이 페이지는 아직 한국어로 제공되지 않습니다. 번역 작업 중입니다. 현재 번역 프로젝트에 대한 질문이나 피드백이 있으신 경우 언제든지 연락주시기 바랍니다.
Metadata
ID:rust-code-quality/almost-swapped
Language: Rust
Severity: Error
Category: Error Prone
Description
The pattern a = b followed by b = a looks like an attempted variable
swap, but it does not work. After a = b, the original value of a is
lost. The second assignment b = a then copies the already-overwritten
value back, leaving both variables with what b originally held.
This is one of the most common copy-paste bugs across any language.
How to remediate?
Use std::mem::swap to perform a correct in-place swap:
// Before (broken — both end up with b's original value)
a=b;b=a;// After (correct)
std::mem::swap(&muta,&mutb);
fncorrect_swap(){letmuta=1;letmutb=2;std::mem::swap(&muta,&mutb);}fnunrelated_assignments(){letmuta=1;letmutb=2;a=b;b=3;}fnself_assign(){letmuta=1;// Structurally matches the query pattern but filtered by JS guard
a=a;a=a;}structPoint{x: i32,y: i32}fndifferent_targets(){letmutobj=Point{x: 1,y: 2};letmutother=Point{x: 3,y: 4};// Not a swap — different objects, no mirror
obj.x=other.x;other.y=obj.y;}
원활한 통합. Datadog Code Security 사용해 보기
Datadog Code Security
이 규칙을 사용해 Datadog Code Security로 코드 분석해 보기
이 규칙의 사용법
1
2
rulesets:- rust-code-quality # Rules to enforce Rust code quality.
리포지토리 루트에서 위의 콘텐츠를 사용해 static-analysis.datadog.yml 생성
Datadog의 무료 IDE Plugins를 사용하거나 Code Security 스캔을 CI 파이프라인에 추가