Skip to content

Commit 69c61cd

Browse files
authored
Merge pull request #27988 from KnisterPeter/fix24931
Correct codefix by removing private modifier
2 parents 6b641de + 499bed5 commit 69c61cd

File tree

4 files changed

+55
-5
lines changed

4 files changed

+55
-5
lines changed

src/services/codefixes/fixUnusedIdentifier.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,8 @@ namespace ts.codefix {
181181

182182
function deleteAssignments(changes: textChanges.ChangeTracker, sourceFile: SourceFile, token: Identifier, checker: TypeChecker) {
183183
FindAllReferences.Core.eachSymbolReferenceInFile(token, checker, sourceFile, (ref: Node) => {
184-
if (ref.parent.kind === SyntaxKind.PropertyAccessExpression) ref = ref.parent;
185-
if (ref.parent.kind === SyntaxKind.BinaryExpression && ref.parent.parent.kind === SyntaxKind.ExpressionStatement) {
184+
if (isPropertyAccessExpression(ref.parent) && ref.parent.name === ref) ref = ref.parent;
185+
if (isBinaryExpression(ref.parent) && isExpressionStatement(ref.parent.parent) && ref.parent.left === ref) {
186186
changes.delete(sourceFile, ref.parent.parent);
187187
}
188188
});
@@ -200,8 +200,16 @@ namespace ts.codefix {
200200

201201
function tryDeleteParameter(changes: textChanges.ChangeTracker, sourceFile: SourceFile, p: ParameterDeclaration, checker: TypeChecker, sourceFiles: ReadonlyArray<SourceFile>, isFixAll: boolean): void {
202202
if (mayDeleteParameter(p, checker, isFixAll)) {
203-
changes.delete(sourceFile, p);
204-
deleteUnusedArguments(changes, sourceFile, p, sourceFiles, checker);
203+
if (p.modifiers && p.modifiers.length > 0
204+
&& (!isIdentifier(p.name) || FindAllReferences.Core.isSymbolReferencedInFile(p.name, checker, sourceFile))) {
205+
p.modifiers.forEach(modifier => {
206+
changes.deleteModifier(sourceFile, modifier);
207+
});
208+
}
209+
else {
210+
changes.delete(sourceFile, p);
211+
deleteUnusedArguments(changes, sourceFile, p, sourceFiles, checker);
212+
}
205213
}
206214
}
207215

src/services/findAllReferences.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -839,7 +839,9 @@ namespace ts.FindAllReferences.Core {
839839
}
840840

841841
export function eachSymbolReferenceInFile<T>(definition: Identifier, checker: TypeChecker, sourceFile: SourceFile, cb: (token: Identifier) => T): T | undefined {
842-
const symbol = checker.getSymbolAtLocation(definition);
842+
const symbol = isParameterPropertyDeclaration(definition.parent)
843+
? first(checker.getSymbolsOfParameterPropertyDeclaration(definition.parent, definition.text))
844+
: checker.getSymbolAtLocation(definition);
843845
if (!symbol) return undefined;
844846
for (const token of getPossibleSymbolReferenceNodes(sourceFile, symbol.name)) {
845847
if (!isIdentifier(token) || token === definition || token.escapedText !== definition.escapedText) continue;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/// <reference path='fourslash.ts' />
2+
3+
// @noUnusedLocals: true
4+
// @noUnusedParameters: true
5+
6+
////export class Example {
7+
//// prop: any;
8+
//// constructor(private readonly arg: any) {
9+
//// this.prop = arg;
10+
//// }
11+
////}
12+
13+
verify.codeFix({
14+
description: "Remove declaration for: 'arg'",
15+
newFileContent:
16+
`export class Example {
17+
prop: any;
18+
constructor(arg: any) {
19+
this.prop = arg;
20+
}
21+
}`,
22+
});
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/// <reference path='fourslash.ts' />
2+
3+
// @noUnusedLocals: true
4+
// @noUnusedParameters: true
5+
6+
////export class Example {
7+
//// constructor(private readonly arg: any) {
8+
//// }
9+
////}
10+
11+
verify.codeFix({
12+
description: "Remove declaration for: 'arg'",
13+
newFileContent:
14+
`export class Example {
15+
constructor() {
16+
}
17+
}`,
18+
});

0 commit comments

Comments
 (0)