Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package fourslash_test

import (
"testing"

"github.com/microsoft/typescript-go/internal/core"
"github.com/microsoft/typescript-go/internal/fourslash"
"github.com/microsoft/typescript-go/internal/ls/lsutil"
"github.com/microsoft/typescript-go/internal/testutil"
)

func TestRenameNamedImportUseAliasesForRenames(t *testing.T) {
t.Parallel()
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
const content = `// @Filename: /a.ts
import { /*import*/MyTypeA } from "./b";
const type: MyTypeA = { foo: "bar" };
// @Filename: /b.ts
export interface MyTypeA {
foo: string;
}`

f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
defer done()
f.VerifyBaselineRename(t, &lsutil.UserPreferences{UseAliasesForRename: core.TSFalse}, "import")
f.VerifyBaselineRename(t, &lsutil.UserPreferences{UseAliasesForRename: core.TSTrue}, "import")
}
2 changes: 1 addition & 1 deletion internal/ls/findallreferences.go
Original file line number Diff line number Diff line change
Expand Up @@ -686,7 +686,7 @@ func (l *LanguageService) getSymbolAndEntries(
}
} else {
options.use = referenceUseRename
options.useAliasesForRename = true
options.useAliasesForRename = l.UserPreferences().UseAliasesForRename.IsTrueOrUnknown()
}
return l.getReferencedSymbolsForNode(ctx, position, node, program, program.GetSourceFiles(), options)
}
Expand Down
9 changes: 5 additions & 4 deletions internal/ls/rename.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ func (l *LanguageService) symbolAndEntriesToRename(ctx context.Context, params *
defer done()

quotePreference := lsutil.GetQuotePreference(sourceFile, l.UserPreferences())
useAliasesForRename := l.UserPreferences().UseAliasesForRename.IsTrueOrUnknown()

Comment on lines 82 to 84
for _, entry := range entries {
uri := l.getFileNameOfEntry(entry)
Expand All @@ -88,7 +89,7 @@ func (l *LanguageService) symbolAndEntriesToRename(ctx context.Context, params *
}
textEdit := &lsproto.TextEdit{
Range: l.getRangeOfEntry(entry),
NewText: l.getTextForRename(data.OriginalNode, entry, params.NewName, ch, quotePreference),
NewText: l.getTextForRename(data.OriginalNode, entry, params.NewName, ch, quotePreference, useAliasesForRename),
}
changes[uri] = append(changes[uri], textEdit)
}
Expand Down Expand Up @@ -186,7 +187,7 @@ func isDefinedInLibraryFile(program *compiler.Program, declaration *ast.Node) bo
// wouldRenameInOtherNodeModules checks if renaming the symbol would affect node_modules.
func wouldRenameInOtherNodeModules(originalFile *ast.SourceFile, symbol *ast.Symbol, ch *checker.Checker, preferences lsutil.UserPreferences) *diagnostics.Message {
sym := symbol
if !preferences.UseAliasesForRename.IsTrue() && sym.Flags&ast.SymbolFlagsAlias != 0 {
if !preferences.UseAliasesForRename.IsTrueOrUnknown() && sym.Flags&ast.SymbolFlagsAlias != 0 {
importSpecifier := core.Find(sym.Declarations, ast.IsImportSpecifier)
if importSpecifier != nil && importSpecifier.AsImportSpecifier().PropertyName == nil {
sym = ch.GetAliasedSymbol(sym)
Expand Down Expand Up @@ -293,8 +294,8 @@ func (l *LanguageService) getNewFileNameForModuleRename(oldPath, specifierText,
return newPath
}

func (l *LanguageService) getTextForRename(originalNode *ast.Node, entry *ReferenceEntry, newText string, ch *checker.Checker, quotePreference lsutil.QuotePreference) string {
if entry.kind != entryKindRange && (ast.IsIdentifier(originalNode) || ast.IsStringLiteralLike(originalNode)) {
func (l *LanguageService) getTextForRename(originalNode *ast.Node, entry *ReferenceEntry, newText string, ch *checker.Checker, quotePreference lsutil.QuotePreference, useAliasesForRename bool) string {
if useAliasesForRename && entry.kind != entryKindRange && (ast.IsIdentifier(originalNode) || ast.IsStringLiteralLike(originalNode)) {
node := ast.GetReparsedNodeForNode(entry.node)
kind := entry.kind
parent := node.Parent
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// === findRenameLocations ===
// @useAliasesForRename: false

// === /a.ts ===
// import { /*RENAME*/[|MyTypeARENAME|] } from "./b";
// const type: [|MyTypeARENAME|] = { foo: "bar" };

// === /b.ts ===
// export interface [|MyTypeARENAME|] {
// foo: string;
// }



// === findRenameLocations ===
// @useAliasesForRename: true

// === /a.ts ===
// import { /*START PREFIX*/MyTypeA as /*RENAME*/[|MyTypeARENAME|] } from "./b";
// const type: [|MyTypeARENAME|] = { foo: "bar" };
Original file line number Diff line number Diff line change
Expand Up @@ -59,22 +59,27 @@
// === /file1.ts ===
// declare function log(s: string | number): void;
// const /*RENAME*/[|qRENAME|] = 1;
// export { [|qRENAME|] as q/*END SUFFIX*/ };
// export { [|qRENAME|] };
// const x = {
// z: 'value'
// }
// const { z } = x;
// log(z);

// === /file2.ts ===
// declare function log(s: string | number): void;
// import { [|qRENAME|] } from "./file1";
// log([|qRENAME|] + 1);



// === findRenameLocations ===
// @useAliasesForRename: false

// === /file1.ts ===
// declare function log(s: string | number): void;
// const q = 1;
// export { /*START PREFIX*/q as /*RENAME*/[|qRENAME|] };
// const [|qRENAME|] = 1;
// export { /*RENAME*/[|qRENAME|] };
// const x = {
// z: 'value'
// }
Expand All @@ -91,19 +96,39 @@
// === findRenameLocations ===
// @useAliasesForRename: false

// === /file1.ts ===
// declare function log(s: string | number): void;
// const [|qRENAME|] = 1;
// export { [|qRENAME|] };
// const x = {
// z: 'value'
// }
// const { z } = x;
// log(z);

// === /file2.ts ===
// declare function log(s: string | number): void;
// import { /*START PREFIX*/q as /*RENAME*/[|qRENAME|] } from "./file1";
// import { /*RENAME*/[|qRENAME|] } from "./file1";
// log([|qRENAME|] + 1);



// === findRenameLocations ===
// @useAliasesForRename: false

// === /file1.ts ===
// declare function log(s: string | number): void;
// const [|qRENAME|] = 1;
// export { [|qRENAME|] };
// const x = {
// z: 'value'
// }
// const { z } = x;
// log(z);

// === /file2.ts ===
// declare function log(s: string | number): void;
// import { /*START PREFIX*/q as [|qRENAME|] } from "./file1";
// import { [|qRENAME|] } from "./file1";
// log(/*RENAME*/[|qRENAME|] + 1);


Expand Down Expand Up @@ -159,20 +184,22 @@
// const x = {
// /*RENAME*/[|zRENAME|]: 'value'
// }
// const { [|zRENAME|]: z/*END SUFFIX*/ } = x;
// log(z);
// const { [|zRENAME|] } = x;
// log([|zRENAME|]);



// === findRenameLocations ===
// @useAliasesForRename: false

// === /file1.ts ===
// --- (line: 3) skipped ---
// declare function log(s: string | number): void;
// const q = 1;
// export { q };
// const x = {
// z: 'value'
// [|zRENAME|]: 'value'
// }
// const { /*START PREFIX*/z: /*RENAME*/[|zRENAME|] } = x;
// const { /*RENAME*/[|zRENAME|] } = x;
// log([|zRENAME|]);


Expand All @@ -181,9 +208,11 @@
// @useAliasesForRename: false

// === /file1.ts ===
// --- (line: 3) skipped ---
// declare function log(s: string | number): void;
// const q = 1;
// export { q };
// const x = {
// z: 'value'
// [|zRENAME|]: 'value'
// }
// const { /*START PREFIX*/z: [|zRENAME|] } = x;
// const { [|zRENAME|] } = x;
// log(/*RENAME*/[|zRENAME|]);
Loading