Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ccb6b94

Browse files
authored
fix(eslint-plugin): [no-unused-vars] fix race condition between naming-convention and no-unused-vars (typescript-eslint#2848)
Fixes typescript-eslint#2844
1 parent fed89f2 commit ccb6b94

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

packages/eslint-plugin/src/rules/no-unused-vars.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,9 +238,17 @@ export default util.createRule<Options, MessageIds>({
238238
}
239239
}
240240

241-
if (!hasRestSpreadSibling(variable)) {
242-
unusedVariablesReturn.push(variable);
241+
if (hasRestSpreadSibling(variable)) {
242+
continue;
243+
}
244+
245+
// in case another rule has run and used the collectUnusedVariables,
246+
// we want to ensure our selectors that marked variables as used are respected
247+
if (variable.eslintUsed) {
248+
continue;
243249
}
250+
251+
unusedVariablesReturn.push(variable);
244252
}
245253

246254
return unusedVariablesReturn;

packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import rule from '../../../src/rules/no-unused-vars';
2+
import { collectUnusedVariables } from '../../../src/util';
23
import { noFormat, RuleTester } from '../../RuleTester';
34

45
const ruleTester = new RuleTester({
@@ -10,6 +11,12 @@ const ruleTester = new RuleTester({
1011
parser: '@typescript-eslint/parser',
1112
});
1213

14+
// this is used to ensure that the caching the utility does does not impact the results done by no-unused-vars
15+
ruleTester.defineRule('collect-unused-vars', context => {
16+
collectUnusedVariables(context);
17+
return {};
18+
});
19+
1320
ruleTester.run('no-unused-vars', rule, {
1421
valid: [
1522
`
@@ -960,8 +967,17 @@ interface _Foo {
960967
// ignored by pattern, even though it's only self-referenced
961968
options: [{ varsIgnorePattern: '^_' }],
962969
},
963-
// https://github.com/ocavue/typescript-eslint-issue-2831/blob/master/index.ts
964-
'export const classes = [class C1 {}, class C2 {}, class C3 {}];',
970+
// https://github.com/typescript-eslint/typescript-eslint/issues/2844
971+
`
972+
/* eslint collect-unused-vars: "error" */
973+
declare module 'next-auth' {
974+
interface User {
975+
id: string;
976+
givenName: string;
977+
familyName: string;
978+
}
979+
}
980+
`,
965981
],
966982

967983
invalid: [

0 commit comments

Comments
 (0)