Skip to content

Commit 0be9ee2

Browse files
author
Andy
authored
Increase size of span for unused declaration (#22388)
1 parent c0ac687 commit 0be9ee2

33 files changed

+113
-108
lines changed

src/compiler/checker.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -21614,7 +21614,7 @@ namespace ts {
2161421614
}
2161521615

2161621616
if (!isRemovedPropertyFromObjectSpread(node.kind === SyntaxKind.Identifier ? node.parent : node)) {
21617-
error(node, Diagnostics._0_is_declared_but_its_value_is_never_read, name);
21617+
diagnostics.add(createDiagnosticForNodeSpan(getSourceFileOfNode(declaration), declaration, node, Diagnostics._0_is_declared_but_its_value_is_never_read, name));
2161821618
}
2161921619
}
2162021620

@@ -21623,7 +21623,7 @@ namespace ts {
2162321623
}
2162421624

2162521625
function isIdentifierThatStartsWithUnderScore(node: Node) {
21626-
return node.kind === SyntaxKind.Identifier && idText(<Identifier>node).charCodeAt(0) === CharacterCodes._;
21626+
return isIdentifier(node) && idText(node).charCodeAt(0) === CharacterCodes._;
2162721627
}
2162821628

2162921629
function checkUnusedClassMembers(node: ClassDeclaration | ClassExpression): void {

src/compiler/utilities.ts

+5
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,11 @@ namespace ts {
607607
return createFileDiagnostic(sourceFile, span.start, span.length, message, arg0, arg1, arg2, arg3);
608608
}
609609

610+
export function createDiagnosticForNodeSpan(sourceFile: SourceFile, startNode: Node, endNode: Node, message: DiagnosticMessage, arg0?: string | number, arg1?: string | number, arg2?: string | number, arg3?: string | number): Diagnostic {
611+
const start = skipTrivia(sourceFile.text, startNode.pos);
612+
return createFileDiagnostic(sourceFile, start, endNode.end - start, message, arg0, arg1, arg2, arg3);
613+
}
614+
610615
export function createDiagnosticForNodeFromMessageChain(node: Node, messageChain: DiagnosticMessageChain): Diagnostic {
611616
const sourceFile = getSourceFileOfNode(node);
612617
const span = getErrorSpanForNode(sourceFile, node);

src/services/codefixes/fixUnusedIdentifier.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace ts.codefix {
1010
errorCodes,
1111
getCodeActions(context) {
1212
const { sourceFile } = context;
13-
const token = getToken(sourceFile, context.span.start);
13+
const token = getToken(sourceFile, textSpanEnd(context.span));
1414
const result: CodeFixAction[] = [];
1515

1616
const deletion = textChanges.ChangeTracker.with(context, t => tryDeleteDeclaration(t, sourceFile, token));
@@ -30,7 +30,7 @@ namespace ts.codefix {
3030
fixIds: [fixIdPrefix, fixIdDelete],
3131
getAllCodeActions: context => codeFixAll(context, errorCodes, (changes, diag) => {
3232
const { sourceFile } = context;
33-
const token = getToken(diag.file!, diag.start!);
33+
const token = findPrecedingToken(textSpanEnd(diag), diag.file!);
3434
switch (context.fixId) {
3535
case fixIdPrefix:
3636
if (isIdentifier(token) && canPrefix(token)) {
@@ -47,9 +47,9 @@ namespace ts.codefix {
4747
});
4848

4949
function getToken(sourceFile: SourceFile, pos: number): Node {
50-
const token = getTokenAtPosition(sourceFile, pos, /*includeJsDocComment*/ false);
50+
const token = findPrecedingToken(pos, sourceFile);
5151
// this handles var ["computed"] = 12;
52-
return token.kind === SyntaxKind.OpenBracketToken ? getTokenAtPosition(sourceFile, pos + 1, /*includeJsDocComment*/ false) : token;
52+
return token.kind === SyntaxKind.CloseBracketToken ? findPrecedingToken(pos - 1, sourceFile) : token;
5353
}
5454

5555
function tryPrefixDeclaration(changes: textChanges.ChangeTracker, errorCode: number, sourceFile: SourceFile, token: Node): void {

tests/baselines/reference/noUnusedLocals_selfReference.errors.txt

+14-14
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,42 @@
1-
tests/cases/compiler/noUnusedLocals_selfReference.ts(3,10): error TS6133: 'f' is declared but its value is never read.
2-
tests/cases/compiler/noUnusedLocals_selfReference.ts(5,14): error TS6133: 'g' is declared but its value is never read.
3-
tests/cases/compiler/noUnusedLocals_selfReference.ts(9,7): error TS6133: 'C' is declared but its value is never read.
4-
tests/cases/compiler/noUnusedLocals_selfReference.ts(12,6): error TS6133: 'E' is declared but its value is never read.
5-
tests/cases/compiler/noUnusedLocals_selfReference.ts(13,11): error TS6133: 'I' is declared but its value is never read.
6-
tests/cases/compiler/noUnusedLocals_selfReference.ts(14,6): error TS6133: 'T' is declared but its value is never read.
7-
tests/cases/compiler/noUnusedLocals_selfReference.ts(15,11): error TS6133: 'N' is declared but its value is never read.
1+
tests/cases/compiler/noUnusedLocals_selfReference.ts(3,1): error TS6133: 'f' is declared but its value is never read.
2+
tests/cases/compiler/noUnusedLocals_selfReference.ts(5,5): error TS6133: 'g' is declared but its value is never read.
3+
tests/cases/compiler/noUnusedLocals_selfReference.ts(9,1): error TS6133: 'C' is declared but its value is never read.
4+
tests/cases/compiler/noUnusedLocals_selfReference.ts(12,1): error TS6133: 'E' is declared but its value is never read.
5+
tests/cases/compiler/noUnusedLocals_selfReference.ts(13,1): error TS6133: 'I' is declared but its value is never read.
6+
tests/cases/compiler/noUnusedLocals_selfReference.ts(14,1): error TS6133: 'T' is declared but its value is never read.
7+
tests/cases/compiler/noUnusedLocals_selfReference.ts(15,1): error TS6133: 'N' is declared but its value is never read.
88
tests/cases/compiler/noUnusedLocals_selfReference.ts(22,19): error TS6133: 'm' is declared but its value is never read.
99

1010

1111
==== tests/cases/compiler/noUnusedLocals_selfReference.ts (8 errors) ====
1212
export {}; // Make this a module scope, so these are local variables.
1313

1414
function f() {
15-
~
15+
~~~~~~~~~~
1616
!!! error TS6133: 'f' is declared but its value is never read.
1717
f;
1818
function g() {
19-
~
19+
~~~~~~~~~~
2020
!!! error TS6133: 'g' is declared but its value is never read.
2121
g;
2222
}
2323
}
2424
class C {
25-
~
25+
~~~~~~~
2626
!!! error TS6133: 'C' is declared but its value is never read.
2727
m() { C; }
2828
}
2929
enum E { A = 0, B = E.A }
30-
~
30+
~~~~~~
3131
!!! error TS6133: 'E' is declared but its value is never read.
3232
interface I { x: I };
33-
~
33+
~~~~~~~~~~~
3434
!!! error TS6133: 'I' is declared but its value is never read.
3535
type T = { x: T };
36-
~
36+
~~~~~~
3737
!!! error TS6133: 'T' is declared but its value is never read.
3838
namespace N { N; }
39-
~
39+
~~~~~~~~~~~
4040
!!! error TS6133: 'N' is declared but its value is never read.
4141

4242
// Avoid a false positive.

tests/baselines/reference/noUnusedLocals_selfReference_skipsBlockLocations.errors.txt

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
1-
tests/cases/compiler/noUnusedLocals_selfReference_skipsBlockLocations.ts(2,14): error TS6133: 'f' is declared but its value is never read.
2-
tests/cases/compiler/noUnusedLocals_selfReference_skipsBlockLocations.ts(8,22): error TS6133: 'g' is declared but its value is never read.
3-
tests/cases/compiler/noUnusedLocals_selfReference_skipsBlockLocations.ts(12,22): error TS6133: 'h' is declared but its value is never read.
1+
tests/cases/compiler/noUnusedLocals_selfReference_skipsBlockLocations.ts(2,5): error TS6133: 'f' is declared but its value is never read.
2+
tests/cases/compiler/noUnusedLocals_selfReference_skipsBlockLocations.ts(8,13): error TS6133: 'g' is declared but its value is never read.
3+
tests/cases/compiler/noUnusedLocals_selfReference_skipsBlockLocations.ts(12,13): error TS6133: 'h' is declared but its value is never read.
44

55

66
==== tests/cases/compiler/noUnusedLocals_selfReference_skipsBlockLocations.ts (3 errors) ====
77
namespace n {
88
function f() {
9-
~
9+
~~~~~~~~~~
1010
!!! error TS6133: 'f' is declared but its value is never read.
1111
f;
1212
}
1313

1414
switch (0) {
1515
case 0:
1616
function g() {
17-
~
17+
~~~~~~~~~~
1818
!!! error TS6133: 'g' is declared but its value is never read.
1919
g;
2020
}
2121
default:
2222
function h() {
23-
~
23+
~~~~~~~~~~
2424
!!! error TS6133: 'h' is declared but its value is never read.
2525
h;
2626
}

tests/baselines/reference/unusedClassesinModule1.errors.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
tests/cases/compiler/unusedClassesinModule1.ts(2,11): error TS6133: 'Calculator' is declared but its value is never read.
1+
tests/cases/compiler/unusedClassesinModule1.ts(2,5): error TS6133: 'Calculator' is declared but its value is never read.
22

33

44
==== tests/cases/compiler/unusedClassesinModule1.ts (1 errors) ====
55
module A {
66
class Calculator {
7-
~~~~~~~~~~
7+
~~~~~~~~~~~~~~~~
88
!!! error TS6133: 'Calculator' is declared but its value is never read.
99
public handelChar() {
1010
}

tests/baselines/reference/unusedClassesinNamespace1.errors.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
tests/cases/compiler/unusedClassesinNamespace1.ts(2,11): error TS6133: 'c1' is declared but its value is never read.
1+
tests/cases/compiler/unusedClassesinNamespace1.ts(2,5): error TS6133: 'c1' is declared but its value is never read.
22

33

44
==== tests/cases/compiler/unusedClassesinNamespace1.ts (1 errors) ====
55
namespace Validation {
66
class c1 {
7-
~~
7+
~~~~~~~~
88
!!! error TS6133: 'c1' is declared but its value is never read.
99

1010
}

tests/baselines/reference/unusedClassesinNamespace2.errors.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
tests/cases/compiler/unusedClassesinNamespace2.ts(2,11): error TS6133: 'c1' is declared but its value is never read.
1+
tests/cases/compiler/unusedClassesinNamespace2.ts(2,5): error TS6133: 'c1' is declared but its value is never read.
22

33

44
==== tests/cases/compiler/unusedClassesinNamespace2.ts (1 errors) ====
55
namespace Validation {
66
class c1 {
7-
~~
7+
~~~~~~~~
88
!!! error TS6133: 'c1' is declared but its value is never read.
99

1010
}

tests/baselines/reference/unusedClassesinNamespace4.errors.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/compiler/unusedClassesinNamespace4.ts(10,11): error TS6133: 'c3' is declared but its value is never read.
1+
tests/cases/compiler/unusedClassesinNamespace4.ts(10,5): error TS6133: 'c3' is declared but its value is never read.
22

33

44
==== tests/cases/compiler/unusedClassesinNamespace4.ts (1 errors) ====
@@ -12,7 +12,7 @@ tests/cases/compiler/unusedClassesinNamespace4.ts(10,11): error TS6133: 'c3' is
1212
}
1313

1414
class c3 extends c1 {
15-
~~
15+
~~~~~~~~
1616
!!! error TS6133: 'c3' is declared but its value is never read.
1717

1818
}

tests/baselines/reference/unusedClassesinNamespace5.errors.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/compiler/unusedClassesinNamespace5.ts(10,11): error TS6133: 'c3' is declared but its value is never read.
1+
tests/cases/compiler/unusedClassesinNamespace5.ts(10,5): error TS6133: 'c3' is declared but its value is never read.
22

33

44
==== tests/cases/compiler/unusedClassesinNamespace5.ts (1 errors) ====
@@ -12,7 +12,7 @@ tests/cases/compiler/unusedClassesinNamespace5.ts(10,11): error TS6133: 'c3' is
1212
}
1313

1414
class c3 {
15-
~~
15+
~~~~~~~~
1616
!!! error TS6133: 'c3' is declared but its value is never read.
1717
public x: c1;
1818
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
tests/cases/compiler/unusedFunctionsinNamespaces1.ts(2,14): error TS6133: 'function1' is declared but its value is never read.
1+
tests/cases/compiler/unusedFunctionsinNamespaces1.ts(2,5): error TS6133: 'function1' is declared but its value is never read.
22

33

44
==== tests/cases/compiler/unusedFunctionsinNamespaces1.ts (1 errors) ====
55
namespace Validation {
66
function function1() {
7-
~~~~~~~~~
7+
~~~~~~~~~~~~~~~~~~
88
!!! error TS6133: 'function1' is declared but its value is never read.
99
}
1010
}

tests/baselines/reference/unusedFunctionsinNamespaces5.errors.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
tests/cases/compiler/unusedFunctionsinNamespaces5.ts(9,14): error TS6133: 'function3' is declared but its value is never read.
2-
tests/cases/compiler/unusedFunctionsinNamespaces5.ts(13,14): error TS6133: 'function4' is declared but its value is never read.
1+
tests/cases/compiler/unusedFunctionsinNamespaces5.ts(9,5): error TS6133: 'function3' is declared but its value is never read.
2+
tests/cases/compiler/unusedFunctionsinNamespaces5.ts(13,5): error TS6133: 'function4' is declared but its value is never read.
33

44

55
==== tests/cases/compiler/unusedFunctionsinNamespaces5.ts (2 errors) ====
@@ -12,13 +12,13 @@ tests/cases/compiler/unusedFunctionsinNamespaces5.ts(13,14): error TS6133: 'func
1212
}
1313

1414
function function3() {
15-
~~~~~~~~~
15+
~~~~~~~~~~~~~~~~~~
1616
!!! error TS6133: 'function3' is declared but its value is never read.
1717
function1();
1818
}
1919

2020
function function4() {
21-
~~~~~~~~~
21+
~~~~~~~~~~~~~~~~~~
2222
!!! error TS6133: 'function4' is declared but its value is never read.
2323

2424
}

tests/baselines/reference/unusedFunctionsinNamespaces6.errors.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/compiler/unusedFunctionsinNamespaces6.ts(13,14): error TS6133: 'function4' is declared but its value is never read.
1+
tests/cases/compiler/unusedFunctionsinNamespaces6.ts(13,5): error TS6133: 'function4' is declared but its value is never read.
22

33

44
==== tests/cases/compiler/unusedFunctionsinNamespaces6.ts (1 errors) ====
@@ -15,7 +15,7 @@ tests/cases/compiler/unusedFunctionsinNamespaces6.ts(13,14): error TS6133: 'func
1515
}
1616

1717
function function4() {
18-
~~~~~~~~~
18+
~~~~~~~~~~~~~~~~~~
1919
!!! error TS6133: 'function4' is declared but its value is never read.
2020

2121
}

tests/baselines/reference/unusedIdentifiersConsolidated1.errors.txt

+10-10
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ tests/cases/compiler/unusedIdentifiersConsolidated1.ts(17,13): error TS6133: 'un
1010
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(24,13): error TS6133: 'unUsedPrivateFunction' is declared but its value is never read.
1111
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(37,11): error TS6133: 'numberRegexp' is declared but its value is never read.
1212
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(44,17): error TS6133: 'unUsedPrivateFunction' is declared but its value is never read.
13-
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(57,15): error TS6133: 'usedLocallyInterface2' is declared but its value is never read.
14-
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(64,11): error TS6133: 'dummy' is declared but its value is never read.
15-
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(67,15): error TS6133: 'unusedInterface' is declared but its value is never read.
16-
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(79,11): error TS6133: 'class3' is declared but its value is never read.
17-
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(99,15): error TS6133: 'interface5' is declared but its value is never read.
13+
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(57,5): error TS6133: 'usedLocallyInterface2' is declared but its value is never read.
14+
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(64,5): error TS6133: 'dummy' is declared but its value is never read.
15+
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(67,5): error TS6133: 'unusedInterface' is declared but its value is never read.
16+
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(79,5): error TS6133: 'class3' is declared but its value is never read.
17+
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(99,5): error TS6133: 'interface5' is declared but its value is never read.
1818

1919

2020
==== tests/cases/compiler/unusedIdentifiersConsolidated1.ts (17 errors) ====
@@ -99,7 +99,7 @@ tests/cases/compiler/unusedIdentifiersConsolidated1.ts(99,15): error TS6133: 'in
9999
}
100100

101101
interface usedLocallyInterface2 {
102-
~~~~~~~~~~~~~~~~~~~~~
102+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
103103
!!! error TS6133: 'usedLocallyInterface2' is declared but its value is never read.
104104
someFunction(s1: string): void;
105105
}
@@ -108,12 +108,12 @@ tests/cases/compiler/unusedIdentifiersConsolidated1.ts(99,15): error TS6133: 'in
108108
}
109109

110110
class dummy implements usedLocallyInterface {
111-
~~~~~
111+
~~~~~~~~~~~
112112
!!! error TS6133: 'dummy' is declared but its value is never read.
113113
}
114114

115115
interface unusedInterface {
116-
~~~~~~~~~~~~~~~
116+
~~~~~~~~~~~~~~~~~~~~~~~~~
117117
!!! error TS6133: 'unusedInterface' is declared but its value is never read.
118118
}
119119
}
@@ -127,7 +127,7 @@ tests/cases/compiler/unusedIdentifiersConsolidated1.ts(99,15): error TS6133: 'in
127127
}
128128

129129
class class3 {
130-
~~~~~~
130+
~~~~~~~~~~~~
131131
!!! error TS6133: 'class3' is declared but its value is never read.
132132
}
133133

@@ -149,7 +149,7 @@ tests/cases/compiler/unusedIdentifiersConsolidated1.ts(99,15): error TS6133: 'in
149149
export let a: interface3;
150150

151151
interface interface5 {
152-
~~~~~~~~~~
152+
~~~~~~~~~~~~~~~~~~~~
153153
!!! error TS6133: 'interface5' is declared but its value is never read.
154154
}
155155
}

tests/baselines/reference/unusedImports10.errors.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/compiler/unusedImports10.ts(9,12): error TS6133: 'a' is declared but its value is never read.
1+
tests/cases/compiler/unusedImports10.ts(9,5): error TS6133: 'a' is declared but its value is never read.
22

33

44
==== tests/cases/compiler/unusedImports10.ts (1 errors) ====
@@ -11,6 +11,6 @@ tests/cases/compiler/unusedImports10.ts(9,12): error TS6133: 'a' is declared but
1111

1212
module B {
1313
import a = A;
14-
~
14+
~~~~~~~~
1515
!!! error TS6133: 'a' is declared but its value is never read.
1616
}

tests/baselines/reference/unusedImports12.errors.txt

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
tests/cases/compiler/a.ts(1,10): error TS6133: 'Member' is declared but its value is never read.
22
tests/cases/compiler/a.ts(2,8): error TS6133: 'd' is declared but its value is never read.
3-
tests/cases/compiler/a.ts(2,23): error TS6133: 'M' is declared but its value is never read.
4-
tests/cases/compiler/a.ts(3,13): error TS6133: 'ns' is declared but its value is never read.
5-
tests/cases/compiler/a.ts(4,8): error TS6133: 'r' is declared but its value is never read.
3+
tests/cases/compiler/a.ts(2,13): error TS6133: 'M' is declared but its value is never read.
4+
tests/cases/compiler/a.ts(3,8): error TS6133: 'ns' is declared but its value is never read.
5+
tests/cases/compiler/a.ts(4,1): error TS6133: 'r' is declared but its value is never read.
66

77

88
==== tests/cases/compiler/a.ts (5 errors) ====
@@ -12,13 +12,13 @@ tests/cases/compiler/a.ts(4,8): error TS6133: 'r' is declared but its value is n
1212
import d, { Member as M } from './b';
1313
~
1414
!!! error TS6133: 'd' is declared but its value is never read.
15-
~
15+
~~~~~~~~~~~
1616
!!! error TS6133: 'M' is declared but its value is never read.
1717
import * as ns from './b';
18-
~~
18+
~~~~~~~
1919
!!! error TS6133: 'ns' is declared but its value is never read.
2020
import r = require("./b");
21-
~
21+
~~~~~~~~
2222
!!! error TS6133: 'r' is declared but its value is never read.
2323

2424
==== tests/cases/compiler/b.ts (0 errors) ====

tests/baselines/reference/unusedImports7.errors.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/compiler/file2.ts(1,13): error TS6133: 'n' is declared but its value is never read.
1+
tests/cases/compiler/file2.ts(1,8): error TS6133: 'n' is declared but its value is never read.
22

33

44
==== tests/cases/compiler/file1.ts (0 errors) ====
@@ -16,7 +16,7 @@ tests/cases/compiler/file2.ts(1,13): error TS6133: 'n' is declared but its value
1616

1717
==== tests/cases/compiler/file2.ts (1 errors) ====
1818
import * as n from "./file1"
19-
~
19+
~~~~~~
2020
!!! error TS6133: 'n' is declared but its value is never read.
2121

2222

0 commit comments

Comments
 (0)