Skip to content

Commit b5c34ba

Browse files
authored
Restore symbol names in JSX import action titles (#64588)
1 parent ba1819f commit b5c34ba

6 files changed

Lines changed: 49 additions & 6 deletions

File tree

‎tsc/internal/fourslash/tests/importNameCodeFix_jsx4_test.go‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
)
99

1010
func TestImportNameCodeFix_jsx4(t *testing.T) {
11-
t.Skip("Known failing fourslash test")
1211
t.Parallel()
1312
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
1413
const content = `// @jsx: react

‎tsc/internal/fourslash/tests/importNameCodeFix_jsx6_test.go‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
)
99

1010
func TestImportNameCodeFix_jsx6(t *testing.T) {
11-
t.Skip("Known failing fourslash test")
1211
t.Parallel()
1312
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
1413
const content = `// @lib: es5
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package fourslash_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/microsoft/TypeScript/tsc/internal/fourslash"
7+
"github.com/microsoft/TypeScript/tsc/internal/testutil"
8+
)
9+
10+
func TestImportNameCodeFix_jsx8(t *testing.T) {
11+
t.Parallel()
12+
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
13+
const content = `// @jsx: react
14+
// @module: esnext
15+
// @esModuleInterop: true
16+
// @moduleResolution: bundler
17+
// @Filename: /node_modules/react/index.d.ts
18+
export = React;
19+
export as namespace React;
20+
declare namespace React {
21+
class Component {}
22+
}
23+
// @Filename: /a.tsx
24+
import { Component } from "react";
25+
<Component></Component>;`
26+
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
27+
defer done()
28+
f.GoToFile(t, "/a.tsx")
29+
f.VerifyCodeFix(t, fourslash.VerifyCodeFixOptions{
30+
Description: "Import 'React' from \"react\"",
31+
NewFileContent: `import React, { Component } from "react";
32+
<Component></Component>;`,
33+
Index: 0,
34+
})
35+
}

‎tsc/internal/ls/autoimport/fix.go‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ func (f *Fix) Edits(
6060
formatOptions lsutil.FormatCodeSettings,
6161
converters *lsconv.Converters,
6262
preferences lsutil.UserPreferences,
63+
includeSymbolNameInDescription bool,
6364
) ([]*lsproto.TextEdit, string, bool) {
6465
locale := locale.FromContext(ctx)
6566
tracker := change.NewTracker(ctx, compilerOptions, formatOptions, converters)
@@ -75,6 +76,9 @@ func (f *Fix) Edits(
7576
existingFix := getAddToExistingImportFix(file, f)
7677
addToExistingImport(tracker, file, existingFix.importClauseOrBindingPattern, existingFix.defaultImport, core.SingleElementSlice(existingFix.namedImport), preferences)
7778
edits, safe := fileEdits(tracker, file)
79+
if includeSymbolNameInDescription {
80+
return edits, diagnostics.Import_0_from_1.Localize(locale, f.Name, f.ModuleSpecifier), safe
81+
}
7882
return edits, diagnostics.Update_import_from_0.Localize(locale, f.ModuleSpecifier), safe
7983
case lsproto.AutoImportFixKindAddNew:
8084
var declarations []*ast.Statement
@@ -107,6 +111,9 @@ func (f *Fix) Edits(
107111
// addNamespaceQualifier(tracker, file, qualification)
108112
// }
109113
edits, safe := fileEdits(tracker, file)
114+
if includeSymbolNameInDescription {
115+
return edits, diagnostics.Import_0_from_1.Localize(locale, f.Name, f.ModuleSpecifier), safe
116+
}
110117
return edits, diagnostics.Add_import_from_0.Localize(locale, f.ModuleSpecifier), safe
111118
case lsproto.AutoImportFixKindPromoteTypeOnly:
112119
promotedDeclaration := promoteFromTypeOnly(tracker, f.TypeOnlyAliasDeclaration, compilerOptions, file, preferences)

‎tsc/internal/ls/codeactions_importfixes.go‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ func getImportCodeActions(ctx context.Context, fixContext *CodeFixContext) ([]*C
8080
fixContext.LS.FormatOptions(),
8181
fixContext.LS.converters,
8282
fixContext.LS.UserPreferences(),
83+
fixInfo.symbolName != fixInfo.errorIdentifierText,
8384
)
8485

8586
if ok {
@@ -339,9 +340,10 @@ func getFixesInfoForNonUMDImport(fixContext *CodeFixContext, symbolToken *ast.No
339340
fixes := view.GetFixes(export, isJSXTagName, isValidTypeOnlyUseSite, &usagePosition)
340341
for _, fix := range fixes {
341342
allInfo = append(allInfo, &fixInfo{
342-
fix: fix,
343-
symbolName: symbolName,
344-
isJsxNamespaceFix: symbolName != symbolToken.Text(),
343+
fix: fix,
344+
symbolName: symbolName,
345+
errorIdentifierText: symbolToken.Text(),
346+
isJsxNamespaceFix: symbolName != symbolToken.Text(),
345347
})
346348
}
347349
}

‎tsc/internal/ls/completions.go‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ func (l *LanguageService) filterContentMappedAutoImports(ctx context.Context, pr
9292
l.FormatOptions(),
9393
l.converters,
9494
l.UserPreferences(),
95+
false, /*includeSymbolNameInDescription*/
9596
)
9697
if !ok {
9798
continue
@@ -5544,7 +5545,7 @@ func (l *LanguageService) getCompletionItemDetails(
55445545
// Auto-imports in content-mapped files are evaluated eagerly so edits outside
55455546
// of verbatim spans can cause the completion item to be filtered out entirely.
55465547
// Only real files take this code path, so the final Edits() is guaranteed ok.
5547-
edits, description, _ := (&autoimport.Fix{AutoImportFix: data.AutoImport}).Edits(ctx, file, program.Options(), l.FormatOptions(), l.converters, l.UserPreferences())
5548+
edits, description, _ := (&autoimport.Fix{AutoImportFix: data.AutoImport}).Edits(ctx, file, program.Options(), l.FormatOptions(), l.converters, l.UserPreferences(), false /*includeSymbolNameInDescription*/)
55485549
item.AdditionalTextEdits = &edits
55495550
item.Detail = strPtrTo(description)
55505551
return item

0 commit comments

Comments
 (0)