diff --git a/packages/eslint-plugin/src/rules/no-unused-vars.ts b/packages/eslint-plugin/src/rules/no-unused-vars.ts index d9117605c404..3f6c18f3f0c6 100644 --- a/packages/eslint-plugin/src/rules/no-unused-vars.ts +++ b/packages/eslint-plugin/src/rules/no-unused-vars.ts @@ -419,10 +419,23 @@ export default createRule({ ref.from.variableScope === unusedVar.scope.variableScope, ); + const id = writeReferences.length + ? writeReferences[writeReferences.length - 1].identifier + : unusedVar.identifiers[0]; + + const { start } = id.loc; + const idLength = id.name.length; + + const loc = { + start, + end: { + line: start.line, + column: start.column + idLength, + }, + }; + context.report({ - node: writeReferences.length - ? writeReferences[writeReferences.length - 1].identifier - : unusedVar.identifiers[0], + loc, messageId: 'unusedVar', data: unusedVar.references.some(ref => ref.isWrite()) ? getAssignedMessageData(unusedVar) diff --git a/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars-eslint.test.ts b/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars-eslint.test.ts index 1ca02bd7add2..d83f23a8024a 100644 --- a/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars-eslint.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars-eslint.test.ts @@ -4,7 +4,6 @@ import { RuleTester } from '@typescript-eslint/rule-tester'; import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; -import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import type { MessageIds } from '../../../src/rules/no-unused-vars'; import rule from '../../../src/rules/no-unused-vars'; @@ -40,7 +39,6 @@ ruleTester.defineRule('use-every-a', context => { function definedError( varName: string, additional = '', - type = AST_NODE_TYPES.Identifier, ): TSESLint.TestCaseError { return { messageId: 'unusedVar', @@ -49,7 +47,6 @@ function definedError( action: 'defined', additional, }, - type, }; } @@ -63,7 +60,6 @@ function definedError( function assignedError( varName: string, additional = '', - type = AST_NODE_TYPES.Identifier, ): TSESLint.TestCaseError { return { messageId: 'unusedVar', @@ -72,7 +68,6 @@ function assignedError( action: 'assigned a value', additional, }, - type, }; } @@ -1232,7 +1227,7 @@ function f() { }, { code: '/*global a */', - errors: [definedError('a', '', AST_NODE_TYPES.Program)], + errors: [definedError('a', '')], }, { code: ` @@ -1341,7 +1336,6 @@ function foo() { messageId: 'unusedVar', data: { varName: 'foo', action: 'defined', additional: '' }, line: 2, - type: AST_NODE_TYPES.Identifier, }, ], }, diff --git a/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts b/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts index 04c218b7631e..c810f351c0ae 100644 --- a/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts @@ -1140,7 +1140,9 @@ export class Foo {} additional: '', }, line: 2, + endLine: 2, column: 10, + endColumn: 31, }, ], }, @@ -1744,6 +1746,8 @@ declare module 'foo' { messageId: 'unusedVar', line: 3, column: 8, + endLine: 3, + endColumn: 12, data: { varName: 'Test', action: 'defined', @@ -1840,6 +1844,8 @@ x = foo(x); messageId: 'unusedVar', line: 3, column: 1, + endLine: 3, + endColumn: 2, data: { varName: 'x', action: 'assigned a value', @@ -1950,5 +1956,24 @@ export namespace Bar { }, ], }, + { + code: ` +const foo: number = 1; + `, + errors: [ + { + messageId: 'unusedVar', + data: { + varName: 'foo', + action: 'assigned a value', + additional: '', + }, + line: 2, + column: 7, + endLine: 2, + endColumn: 10, + }, + ], + }, ], });