Skip to content

Commit 9541870

Browse files
authored
Module specifier completions (microsoft#2587)
1 parent b16ed17 commit 9541870

42 files changed

Lines changed: 1718 additions & 698 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

internal/astnav/tokens.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,9 @@ func FindPrecedingTokenEx(sourceFile *ast.SourceFile, position int, startNode *a
433433
}
434434

435435
func isValidPrecedingNode(node *ast.Node, sourceFile *ast.SourceFile) bool {
436+
if node.Kind == ast.KindEndOfFile {
437+
return len(node.JSDoc(sourceFile)) > 0
438+
}
436439
start := GetStartOfNode(node, sourceFile, false /*includeJSDoc*/)
437440
width := node.End() - start
438441
return !(ast.IsWhitespaceOnlyJsxText(node) || width == 0)

internal/fourslash/_scripts/failingTests.txt

Lines changed: 0 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ TestCompletionForComputedStringProperties
6363
TestCompletionForMetaProperty
6464
TestCompletionForObjectProperty
6565
TestCompletionForStringLiteral
66-
TestCompletionForStringLiteral_details
6766
TestCompletionForStringLiteral_quotePreference
6867
TestCompletionForStringLiteral_quotePreference1
6968
TestCompletionForStringLiteral_quotePreference2
@@ -74,34 +73,8 @@ TestCompletionForStringLiteral_quotePreference6
7473
TestCompletionForStringLiteral_quotePreference7
7574
TestCompletionForStringLiteral_quotePreference8
7675
TestCompletionForStringLiteral4
77-
TestCompletionForStringLiteralExport
78-
TestCompletionForStringLiteralImport1
79-
TestCompletionForStringLiteralImport2
80-
TestCompletionForStringLiteralNonrelativeImport12
81-
TestCompletionForStringLiteralNonrelativeImport14
82-
TestCompletionForStringLiteralNonrelativeImport16
83-
TestCompletionForStringLiteralNonrelativeImport17
84-
TestCompletionForStringLiteralNonrelativeImport18
85-
TestCompletionForStringLiteralNonrelativeImport2
86-
TestCompletionForStringLiteralNonrelativeImport3
87-
TestCompletionForStringLiteralNonrelativeImport4
88-
TestCompletionForStringLiteralNonrelativeImport8
89-
TestCompletionForStringLiteralNonrelativeImport9
90-
TestCompletionForStringLiteralNonrelativeImportTypings1
91-
TestCompletionForStringLiteralNonrelativeImportTypings2
92-
TestCompletionForStringLiteralNonrelativeImportTypings3
93-
TestCompletionForStringLiteralRelativeImport4
94-
TestCompletionForStringLiteralRelativeImport6
95-
TestCompletionForStringLiteralRelativeImportAllowJSTrue
96-
TestCompletionForStringLiteralWithDynamicImport
9776
TestCompletionImportMeta
9877
TestCompletionImportMetaWithGlobalDeclaration
99-
TestCompletionImportModuleSpecifierEndingDts
100-
TestCompletionImportModuleSpecifierEndingJs
101-
TestCompletionImportModuleSpecifierEndingJsx
102-
TestCompletionImportModuleSpecifierEndingTs
103-
TestCompletionImportModuleSpecifierEndingTsxPreserve
104-
TestCompletionImportModuleSpecifierEndingTsxReact
10578
TestCompletionImportModuleSpecifierEndingUnsupportedExtension
10679
TestCompletionInChecks1
10780
TestCompletionInFunctionLikeBody_includesPrimitiveTypes
@@ -113,8 +86,6 @@ TestCompletionListFunctionExpression
11386
TestCompletionListInArrowFunctionInUnclosedCallSite01
11487
TestCompletionListInClassExpressionWithTypeParameter
11588
TestCompletionListInClassStaticBlocks
116-
TestCompletionListInImportClause05
117-
TestCompletionListInImportClause06
11889
TestCompletionListInNamedClassExpression
11990
TestCompletionListInNamedClassExpressionWithShadowing
12091
TestCompletionListInNamedFunctionExpression
@@ -186,10 +157,6 @@ TestCompletionsImport_windowsPathsProjectRelative
186157
TestCompletionsImportOrExportSpecifier
187158
TestCompletionsInExport
188159
TestCompletionsInExport_moduleBlock
189-
TestCompletionsInRequire
190-
TestCompletionsJSDocImportTagAttributesEmptyModuleSpecifier1
191-
TestCompletionsJSDocImportTagAttributesErrorModuleSpecifier1
192-
TestCompletionsJSDocImportTagEmptyModuleSpecifier1
193160
TestCompletionsJSDocNoCrash1
194161
TestCompletionsJsdocTypeTagCast
195162
TestCompletionsJsxAttributeInitializer2
@@ -209,13 +176,6 @@ TestCompletionsOverridingMethod4
209176
TestCompletionsOverridingMethod9
210177
TestCompletionsOverridingMethodCrash1
211178
TestCompletionsOverridingProperties1
212-
TestCompletionsPaths_importType
213-
TestCompletionsPaths_kinds
214-
TestCompletionsPaths_pathMapping
215-
TestCompletionsPaths_pathMapping_nonTrailingWildcard1
216-
TestCompletionsPaths_pathMapping_parentDirectory
217-
TestCompletionsPathsJsonModule
218-
TestCompletionsPathsRelativeJsonModule
219179
TestCompletionsRecommended_namespace
220180
TestCompletionsRecommended_union
221181
TestCompletionsRedeclareModuleAsGlobal
@@ -347,24 +307,6 @@ TestGetJavaScriptQuickInfo8
347307
TestGetJavaScriptSyntacticDiagnostics24
348308
TestGetOccurrencesIfElseBroken
349309
TestHoverOverComment
350-
TestImportCompletions_importsMap1
351-
TestImportCompletions_importsMap2
352-
TestImportCompletions_importsMap3
353-
TestImportCompletions_importsMap4
354-
TestImportCompletions_importsMap5
355-
TestImportCompletionsPackageJsonExportsSpecifierEndsInTs
356-
TestImportCompletionsPackageJsonExportsTrailingSlash1
357-
TestImportCompletionsPackageJsonImports_ts
358-
TestImportCompletionsPackageJsonImportsConditions1
359-
TestImportCompletionsPackageJsonImportsLength1
360-
TestImportCompletionsPackageJsonImportsLength2
361-
TestImportCompletionsPackageJsonImportsPattern
362-
TestImportCompletionsPackageJsonImportsPattern_capsInPath1
363-
TestImportCompletionsPackageJsonImportsPattern_capsInPath2
364-
TestImportCompletionsPackageJsonImportsPattern_js_ts
365-
TestImportCompletionsPackageJsonImportsPattern_ts
366-
TestImportCompletionsPackageJsonImportsPattern_ts_ts
367-
TestImportCompletionsPackageJsonImportsPattern2
368310
TestImportFixesGlobalTypingsCache
369311
TestImportMetaCompletionDetails
370312
TestImportNameCodeFix_avoidRelativeNodeModules
@@ -478,62 +420,13 @@ TestMultilineCommentBeforeOpenBrace
478420
TestMultiModuleFundule
479421
TestNgProxy1
480422
TestNgProxy4
481-
TestNodeModulesImportCompletions1
482423
TestNoQuickInfoForLabel
483424
TestNoQuickInfoInWhitespace
484425
TestNumericPropertyNames
485426
TestOptionalPropertyFormatting
486427
TestOverloadQuickInfo
487428
TestParameterWithDestructuring
488429
TestParameterWithNestedDestructuring
489-
TestPathCompletionsAllowModuleAugmentationExtensions
490-
TestPathCompletionsAllowTsExtensions
491-
TestPathCompletionsPackageJsonExportsBundlerNoNodeCondition
492-
TestPathCompletionsPackageJsonExportsCustomConditions
493-
TestPathCompletionsPackageJsonExportsWildcard1
494-
TestPathCompletionsPackageJsonExportsWildcard10
495-
TestPathCompletionsPackageJsonExportsWildcard11
496-
TestPathCompletionsPackageJsonExportsWildcard12
497-
TestPathCompletionsPackageJsonExportsWildcard2
498-
TestPathCompletionsPackageJsonExportsWildcard3
499-
TestPathCompletionsPackageJsonExportsWildcard4
500-
TestPathCompletionsPackageJsonExportsWildcard5
501-
TestPathCompletionsPackageJsonExportsWildcard6
502-
TestPathCompletionsPackageJsonExportsWildcard7
503-
TestPathCompletionsPackageJsonExportsWildcard8
504-
TestPathCompletionsPackageJsonExportsWildcard9
505-
TestPathCompletionsPackageJsonImportsBundlerNoNodeCondition
506-
TestPathCompletionsPackageJsonImportsCustomConditions
507-
TestPathCompletionsPackageJsonImportsIgnoreMatchingNodeModule2
508-
TestPathCompletionsPackageJsonImportsOnlyFromClosestScope1
509-
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard1
510-
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard2
511-
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard3
512-
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard4
513-
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard5
514-
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard6
515-
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard7
516-
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard8
517-
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard9
518-
TestPathCompletionsPackageJsonImportsWildcard1
519-
TestPathCompletionsPackageJsonImportsWildcard10
520-
TestPathCompletionsPackageJsonImportsWildcard11
521-
TestPathCompletionsPackageJsonImportsWildcard12
522-
TestPathCompletionsPackageJsonImportsWildcard2
523-
TestPathCompletionsPackageJsonImportsWildcard3
524-
TestPathCompletionsPackageJsonImportsWildcard4
525-
TestPathCompletionsPackageJsonImportsWildcard5
526-
TestPathCompletionsPackageJsonImportsWildcard6
527-
TestPathCompletionsPackageJsonImportsWildcard7
528-
TestPathCompletionsPackageJsonImportsWildcard8
529-
TestPathCompletionsPackageJsonImportsWildcard9
530-
TestPathCompletionsTypesVersionsLocal
531-
TestPathCompletionsTypesVersionsWildcard1
532-
TestPathCompletionsTypesVersionsWildcard2
533-
TestPathCompletionsTypesVersionsWildcard3
534-
TestPathCompletionsTypesVersionsWildcard4
535-
TestPathCompletionsTypesVersionsWildcard5
536-
TestPathCompletionsTypesVersionsWildcard6
537430
TestProtoVarVisibleWithOuterScopeUnderscoreProto
538431
TestQualifyModuleTypeNames
539432
TestQuickInfo_notInsideComment
@@ -666,12 +559,6 @@ TestTabbingAfterNewlineInsertedBeforeWhile
666559
TestThisBindingInLambda
667560
TestThisPredicateFunctionQuickInfo01
668561
TestThisPredicateFunctionQuickInfo02
669-
TestTripleSlashRefPathCompletionAbsolutePaths
670-
TestTripleSlashRefPathCompletionContext
671-
TestTripleSlashRefPathCompletionExtensionsAllowJSFalse
672-
TestTripleSlashRefPathCompletionExtensionsAllowJSTrue
673-
TestTripleSlashRefPathCompletionHiddenFile
674-
TestTripleSlashRefPathCompletionRootdirs
675562
TestTsxCompletionNonTagLessThan
676563
TestTsxQuickInfo1
677564
TestTsxQuickInfo4

internal/fourslash/_scripts/manualTests.txt

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,30 @@
1+
autoCloseFragment
2+
autoCloseTag
13
autoImportPackageRootPathTypeModule
4+
completionForStringLiteral_details
5+
completionForStringLiteralExport
6+
completionForStringLiteralImport1
7+
completionForStringLiteralImport2
8+
completionForStringLiteralNonrelativeImport12
9+
completionForStringLiteralNonrelativeImport14
10+
completionForStringLiteralNonrelativeImport16
11+
completionForStringLiteralNonrelativeImport4
12+
completionForStringLiteralNonrelativeImport8
13+
completionForStringLiteralRelativeImport4
14+
completionForStringLiteralWithDynamicImport
215
completionListInClosedFunction05
16+
completionListInImportClause05
317
completionListWithLabel
418
completionsAtIncompleteObjectLiteralProperty
519
completionsImport_defaultAndNamedConflict
620
completionsImport_filteredByPackageJson_ambient
721
completionsImport_reExportDefault
822
completionsImport_reexportTransient
23+
completionsPaths_importType
24+
completionsPaths_pathMapping_nonTrailingWildcard1
925
completionsSelfDeclaring1
1026
completionsWithDeprecatedTag4
1127
completionsWithStringReplacementMode1
12-
formatOnEnterInComment
1328
duplicatePackageServices_fileChanges
1429
exhaustiveCaseCompletions1
1530
exhaustiveCaseCompletions2
@@ -19,6 +34,8 @@ exhaustiveCaseCompletions5
1934
exhaustiveCaseCompletions6
2035
exhaustiveCaseCompletions7
2136
exhaustiveCaseCompletions8
37+
formatOnEnterInComment
38+
formattingFatArrowFunctions
2239
getOutliningSpans
2340
importNameCodeFix_uriStyleNodeCoreModules1
2441
importNameCodeFixDefaultExport7
@@ -41,26 +58,27 @@ navto_excludeLib1
4158
navto_excludeLib2
4259
navto_excludeLib4
4360
navto_serverExcludeLib
61+
nodeModulesImportCompletions1
4462
outliningForNonCompleteInterfaceDeclaration
4563
outliningHintSpansForFunction
4664
parserCorruptionAfterMapInClass
65+
pathCompletionsPackageJsonExportsWildcard1
66+
pathCompletionsPackageJsonExportsWildcard12
67+
pathCompletionsPackageJsonExportsWildcard4
68+
pathCompletionsPackageJsonImportsSrcNoDistWildcard1
69+
pathCompletionsPackageJsonImportsSrcNoDistWildcard4
70+
pathCompletionsPackageJsonImportsWildcard1
71+
pathCompletionsPackageJsonImportsWildcard12
72+
pathCompletionsPackageJsonImportsWildcard4
73+
pathCompletionsTypesVersionsWildcard3
74+
pathCompletionsTypesVersionsWildcard4
75+
pathCompletionsTypesVersionsWildcard5
76+
pathCompletionsTypesVersionsWildcard6
4777
quickInfoForOverloadOnConst1
4878
renameDefaultKeyword
4979
renameForDefaultExport01
5080
semicolonFormattingInsideAComment
5181
semicolonFormattingInsideAStringLiteral
52-
tsxCompletion12
53-
jsDocFunctionSignatures2
54-
jsDocFunctionSignatures12
55-
getOutliningSpans
56-
incrementalParsingWithJsDoc
57-
autoCloseFragment
58-
autoCloseTag
59-
completionsWithStringReplacementMode1
60-
jsdocParameterNameCompletion
6182
stringLiteralCompletionsInPositionTypedUsingRest
83+
tripleSlashRefPathCompletionAbsolutePaths
6284
tsxCompletion12
63-
importNameCodeFix_uriStyleNodeCoreModules1
64-
importNameCodeFixDefaultExport7
65-
importNameCodeFixOptionalImport0
66-
formattingFatArrowFunctions

internal/fourslash/fourslash.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,6 +1158,7 @@ func (f *FourslashTest) VerifyCompletions(t *testing.T, markerInput MarkerInput,
11581158
}
11591159

11601160
func (f *FourslashTest) verifyCompletionsWorker(t *testing.T, expected *CompletionsExpectedList) *lsproto.CompletionList {
1161+
t.Helper()
11611162
prefix := f.getCurrentPositionPrefix()
11621163
var userPreferences *lsutil.UserPreferences
11631164
if expected != nil {
@@ -1169,6 +1170,7 @@ func (f *FourslashTest) verifyCompletionsWorker(t *testing.T, expected *Completi
11691170
}
11701171

11711172
func (f *FourslashTest) getCompletions(t *testing.T, userPreferences *lsutil.UserPreferences) *lsproto.CompletionList {
1173+
t.Helper()
11721174
params := &lsproto.CompletionParams{
11731175
TextDocument: lsproto.TextDocumentIdentifier{
11741176
Uri: lsconv.FileNameToDocumentURI(f.activeFilename),
@@ -1202,6 +1204,9 @@ func (f *FourslashTest) verifyCompletionsResult(
12021204
}
12031205
return
12041206
} else if expected == nil {
1207+
if len(actual.Items) == 0 {
1208+
return
1209+
}
12051210
// !!! cmp.Diff(actual, nil) should probably be a .String() call here and elswhere
12061211
t.Fatalf(prefix+"Expected nil completion list but got non-nil: %s", cmp.Diff(actual, nil))
12071212
}
@@ -3505,6 +3510,7 @@ func (f *FourslashTest) getCurrentPositionPrefix() string {
35053510
}
35063511

35073512
func (f *FourslashTest) BaselineAutoImportsCompletions(t *testing.T, markerNames []string) {
3513+
t.Helper()
35083514
reset := f.ConfigureWithReset(t, &lsutil.UserPreferences{
35093515
IncludeCompletionsForModuleExports: core.TSTrue,
35103516
IncludeCompletionsForImportStatements: core.TSTrue,

internal/fourslash/tests/autoImportCompletion_test.go

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -120,43 +120,3 @@ b/**/
120120
})
121121
f.BaselineAutoImportsCompletions(t, []string{""})
122122
}
123-
124-
func TestNodeModulesImportCompletions1Baseline(t *testing.T) {
125-
t.Parallel()
126-
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
127-
const content = `// @allowJs: true
128-
// @module: node18
129-
// @Filename: /src/module.mts
130-
export {}
131-
// @Filename: /src/module.cts
132-
export {}
133-
// @Filename: /src/module.js
134-
export {}
135-
// @Filename: /src/decl.d.mts
136-
export {}
137-
// @Filename: /src/decl.d.cts
138-
export {}
139-
// @Filename: /src/decl.d.ts
140-
export {}
141-
// @Filename: /src/js.mjs
142-
export {}
143-
// @Filename: /src/js.cjs
144-
export {}
145-
// @Filename: /src/js.js
146-
export {}
147-
// @Filename: /main.mts
148-
import {} from "./src//*1*/"; //note, this test should not work until packagejsonautoimportprovider is implemented
149-
import mod = require("./src//*2*/");
150-
const m = import("./src//*3*/");
151-
// @Filename: /main.cts
152-
import {} from "./src//*4*/";
153-
import mod = require("./src//*5*/");
154-
const m = import("./src//*6*/");
155-
// @Filename: /main.ts
156-
import {} from "./src//*7*/";
157-
import mod = require("./src//*8*/");
158-
const m = import("./src//*9*/");`
159-
f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content)
160-
defer done()
161-
f.BaselineAutoImportsCompletions(t, []string{"1", "3", "6", "9", "2", "4", "5", "7", "8"})
162-
}

0 commit comments

Comments
 (0)