Skip to content

Commit 482f781

Browse files
authored
fix(43559): allow renaming in files with no-default-lib enabled (microsoft#43579)
1 parent d171eee commit 482f781

2 files changed

Lines changed: 20 additions & 3 deletions

File tree

src/services/rename.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ namespace ts.Rename {
33
export function getRenameInfo(program: Program, sourceFile: SourceFile, position: number, options?: RenameInfoOptions): RenameInfo {
44
const node = getAdjustedRenameLocation(getTouchingPropertyName(sourceFile, position));
55
if (nodeIsEligibleForRename(node)) {
6-
const renameInfo = getRenameInfoForNode(node, program.getTypeChecker(), sourceFile, declaration => program.isSourceFileDefaultLibrary(declaration.getSourceFile()), options);
6+
const renameInfo = getRenameInfoForNode(node, program.getTypeChecker(), sourceFile, program, options);
77
if (renameInfo) {
88
return renameInfo;
99
}
1010
}
1111
return getRenameInfoError(Diagnostics.You_cannot_rename_this_element);
1212
}
1313

14-
function getRenameInfoForNode(node: Node, typeChecker: TypeChecker, sourceFile: SourceFile, isDefinedInLibraryFile: (declaration: Node) => boolean, options?: RenameInfoOptions): RenameInfo | undefined {
14+
function getRenameInfoForNode(node: Node, typeChecker: TypeChecker, sourceFile: SourceFile, program: Program, options?: RenameInfoOptions): RenameInfo | undefined {
1515
const symbol = typeChecker.getSymbolAtLocation(node);
1616
if (!symbol) {
1717
if (isStringLiteralLike(node)) {
@@ -33,7 +33,7 @@ namespace ts.Rename {
3333
if (!declarations || declarations.length === 0) return;
3434

3535
// Disallow rename for elements that are defined in the standard TypeScript library.
36-
if (declarations.some(isDefinedInLibraryFile)) {
36+
if (declarations.some(declaration => isDefinedInLibraryFile(program, declaration))) {
3737
return getRenameInfoError(Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library);
3838
}
3939

@@ -55,6 +55,11 @@ namespace ts.Rename {
5555
return getRenameInfoSuccess(displayName, fullDisplayName, kind, SymbolDisplay.getSymbolModifiers(typeChecker,symbol), node, sourceFile);
5656
}
5757

58+
function isDefinedInLibraryFile(program: Program, declaration: Node) {
59+
const sourceFile = declaration.getSourceFile();
60+
return program.isSourceFileDefaultLibrary(sourceFile) && fileExtensionIs(sourceFile.fileName, Extension.Dts);
61+
}
62+
5863
function getRenameInfoForModule(node: StringLiteralLike, sourceFile: SourceFile, moduleSymbol: Symbol): RenameInfo | undefined {
5964
if (!isExternalModuleNameRelative(node.text)) {
6065
return getRenameInfoError(Diagnostics.You_cannot_rename_a_module_via_a_global_import);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
// @checkJs: true
4+
// @allowJs: true
5+
6+
// @Filename: /foo.js
7+
//// // @ts-check
8+
//// /// <reference no-default-lib="true" />
9+
//// const [|/**/foo|] = 1;
10+
11+
goTo.marker("");
12+
verify.renameInfoSucceeded("foo")

0 commit comments

Comments
 (0)