eslint/no-shadow Suspicious
무엇을 하는가
외부 스코프에서 선언된 변수를 동일한 이름의 로컬 변수가 가리키는 것을 금지합니다.
왜 좋지 않은가?
가리기(스로잉)란, 지역 변수가 포함된 스코프 내에 존재하는 변수와 동일한 이름을 갖는 경우를 의미합니다. 이는 어떤 변수가 참조되고 있는지 명확하지 않게 만들 수 있으며, 진단하기 어려운 버그로 이어질 수 있습니다.
예시
이 규칙에 잘못된 코드 예시:
var x = 1;
function foo() {
var x = 2; // x는 외부의 x를 가리킴
}이 규칙에 올바른 코드 예시:
var x = 1;
function foo() {
var y = 2; // 다른 이름 사용, 가리기 없음
}구성
이 규칙은 다음 속성을 가진 구성 객체를 수락합니다.
allow
type: string[]
default: []
가리기를 허용할 변수 이름 목록입니다.
builtinGlobals
type: boolean
default: false
내장 전역 변수의 가리기를 보고할지 여부.
hoist
type: "all" | "functions" | "functions-and-types" | "never" | "types"
default: "functions-and-types"
가리기 검사 시 호이스팅 처리 방식을 제어합니다.
"all"
호이스팅으로 인해 외부 변수가 선언되기 전에도 가리기를 보고합니다.
"functions"
함수 선언만 호이스팅되는 경우에만 가리기를 보고합니다.
"functions-and-types"
함수 및 타입 선언 모두 호이스팅되는 경우에 가리기를 보고합니다.
"never"
외부 변수가 선언되기 전에는 절대 가리기를 보고하지 않습니다.
"types"
타입 선언만 호이스팅되는 경우에만 가리기를 보고합니다.
ignoreFunctionTypeParameterNameValueShadow
type: boolean
default: true
true인 경우, 함수 타입 매개변수가 값에 대한 이름을 가리더라도 무시합니다.
예시: const T = 1; function foo<T>() {}
ignoreOnInitialization
type: boolean
default: false
가리키는 변수가 아직 초기화되지 않았다고 추정될 때, 변수 초기화 시점을 무시할지 여부.
ignoreTypeValueShadow
type: boolean
default: true
true인 경우, 타입과 값이 동일한 이름을 가질 때 무시합니다.
이는 타입스크립트에서 흔히 발생합니다: type Foo = ...; const Foo = ...;
사용 방법
구성 파일 또는 명령줄 인터페이스에서 이 규칙을 활성화하려면 다음을 사용할 수 있습니다:
{
"rules": {
"no-shadow": "error"
}
}oxlint --deny no-shadow