From a673958ccc12c0722298bc2fd850bf4c115b7c9d Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Tue, 16 Jan 2024 09:35:26 -0800 Subject: [PATCH] Check `autoImportExcludePatterns` against symlink paths (#57033) --- src/services/exportInfoMap.ts | 29 +- .../autoImportFileExcludePatterns1.js | 31 +- .../autoImportFileExcludePatterns_symlinks.js | 1049 ++++++++++++++++ ...autoImportFileExcludePatterns_symlinks2.js | 1111 +++++++++++++++++ .../server/autoImportFileExcludePatterns1.ts | 2 +- .../autoImportFileExcludePatterns_symlinks.ts | 34 + ...autoImportFileExcludePatterns_symlinks2.ts | 40 + 7 files changed, 2288 insertions(+), 8 deletions(-) create mode 100644 tests/baselines/reference/tsserver/fourslashServer/autoImportFileExcludePatterns_symlinks.js create mode 100644 tests/baselines/reference/tsserver/fourslashServer/autoImportFileExcludePatterns_symlinks2.js create mode 100644 tests/cases/fourslash/server/autoImportFileExcludePatterns_symlinks.ts create mode 100644 tests/cases/fourslash/server/autoImportFileExcludePatterns_symlinks2.ts diff --git a/src/services/exportInfoMap.ts b/src/services/exportInfoMap.ts index 4c19b600eb0..3c3ec8c757b 100644 --- a/src/services/exportInfoMap.ts +++ b/src/services/exportInfoMap.ts @@ -8,6 +8,7 @@ import { createMultiMap, Debug, emptyArray, + ensureTrailingDirectorySeparator, findIndex, firstDefined, forEachAncestorDirectory, @@ -43,6 +44,7 @@ import { nodeModulesPathPart, PackageJsonImportFilter, Path, + pathContainsNodeModules, Program, skipAlias, skipOuterExpressions, @@ -427,12 +429,12 @@ export function forEachExternalModuleToImportFrom( return pattern ? getRegexFromPattern(pattern, useCaseSensitiveFileNames) : undefined; }); - forEachExternalModule(program.getTypeChecker(), program.getSourceFiles(), excludePatterns, (module, file) => cb(module, file, program, /*isFromPackageJson*/ false)); + forEachExternalModule(program.getTypeChecker(), program.getSourceFiles(), excludePatterns, host, (module, file) => cb(module, file, program, /*isFromPackageJson*/ false)); const autoImportProvider = useAutoImportProvider && host.getPackageJsonAutoImportProvider?.(); if (autoImportProvider) { const start = timestamp(); const checker = program.getTypeChecker(); - forEachExternalModule(autoImportProvider.getTypeChecker(), autoImportProvider.getSourceFiles(), excludePatterns, (module, file) => { + forEachExternalModule(autoImportProvider.getTypeChecker(), autoImportProvider.getSourceFiles(), excludePatterns, host, (module, file) => { if (file && !program.getSourceFile(file.fileName) || !file && !checker.resolveName(module.name, /*location*/ undefined, SymbolFlags.Module, /*excludeGlobals*/ false)) { // The AutoImportProvider filters files already in the main program out of its *root* files, // but non-root files can still be present in both programs, and already in the export info map @@ -445,15 +447,30 @@ export function forEachExternalModuleToImportFrom( } } -function forEachExternalModule(checker: TypeChecker, allSourceFiles: readonly SourceFile[], excludePatterns: readonly RegExp[] | undefined, cb: (module: Symbol, sourceFile: SourceFile | undefined) => void) { - const isExcluded = excludePatterns && ((fileName: string) => excludePatterns.some(p => p.test(fileName))); +function forEachExternalModule(checker: TypeChecker, allSourceFiles: readonly SourceFile[], excludePatterns: readonly RegExp[] | undefined, host: LanguageServiceHost, cb: (module: Symbol, sourceFile: SourceFile | undefined) => void) { + const realpathsWithSymlinks = host.getSymlinkCache?.().getSymlinkedDirectoriesByRealpath(); + const isExcluded = excludePatterns && (({ fileName, path }: SourceFile) => { + if (excludePatterns.some(p => p.test(fileName))) return true; + if (realpathsWithSymlinks?.size && pathContainsNodeModules(fileName)) { + let dir = getDirectoryPath(fileName); + return forEachAncestorDirectory(getDirectoryPath(path), dirPath => { + const symlinks = realpathsWithSymlinks.get(ensureTrailingDirectorySeparator(dirPath)); + if (symlinks) { + return symlinks.some(s => excludePatterns.some(p => p.test(fileName.replace(dir, s)))); + } + dir = getDirectoryPath(dir); + }) ?? false; + } + return false; + }); + for (const ambient of checker.getAmbientModules()) { - if (!ambient.name.includes("*") && !(excludePatterns && ambient.declarations?.every(d => isExcluded!(d.getSourceFile().fileName)))) { + if (!ambient.name.includes("*") && !(excludePatterns && ambient.declarations?.every(d => isExcluded!(d.getSourceFile())))) { cb(ambient, /*sourceFile*/ undefined); } } for (const sourceFile of allSourceFiles) { - if (isExternalOrCommonJsModule(sourceFile) && !isExcluded?.(sourceFile.fileName)) { + if (isExternalOrCommonJsModule(sourceFile) && !isExcluded?.(sourceFile)) { cb(checker.getMergedSymbol(sourceFile.symbol), sourceFile); } } diff --git a/tests/baselines/reference/tsserver/fourslashServer/autoImportFileExcludePatterns1.js b/tests/baselines/reference/tsserver/fourslashServer/autoImportFileExcludePatterns1.js index c53853b686e..bfdb3c4e26d 100644 --- a/tests/baselines/reference/tsserver/fourslashServer/autoImportFileExcludePatterns1.js +++ b/tests/baselines/reference/tsserver/fourslashServer/autoImportFileExcludePatterns1.js @@ -22,7 +22,7 @@ export * from "./clients/s3"; { "name": "aws-sdk", "version": "2.0.0", "main": "index.js" } //// [/project/package.json] -{ "dependencies": "aws-sdk" } +{ "dependencies": { "aws-sdk": "*" } } Info seq [hh:mm:ss:mss] request: @@ -113,6 +113,24 @@ Info seq [hh:mm:ss:mss] Files (4) Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /project/package.json 250 undefined WatchType: package.json file +Info seq [hh:mm:ss:mss] AutoImportProviderProject: found 1 root files in 1 dependencies in * ms +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /project/node_modules/aws-sdk/index.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/autoImportProviderProject1* +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /project/node_modules/aws-sdk/package.json 2000 undefined Project: /dev/null/autoImportProviderProject1* WatchType: File location affecting resolution +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /project/node_modules/aws-sdk/clients/s3.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/autoImportProviderProject1* Version: 1 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/dev/null/autoImportProviderProject1*' (AutoImportProvider) +Info seq [hh:mm:ss:mss] Files (2) + /project/node_modules/aws-sdk/clients/s3.d.ts Text-1 "export declare class S3 {}" + /project/node_modules/aws-sdk/index.d.ts Text-1 "export * from \"./clients/s3\";" + + + node_modules/aws-sdk/clients/s3.d.ts + Imported via "./clients/s3" from file 'node_modules/aws-sdk/index.d.ts' with packageId 'aws-sdk/clients/s3.d.ts@2.0.0' + node_modules/aws-sdk/index.d.ts + Root file specified for compilation + +Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred) Info seq [hh:mm:ss:mss] Files (4) @@ -120,6 +138,10 @@ Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] Project '/dev/null/inferredProject2*' (Inferred) Info seq [hh:mm:ss:mss] Files (4) +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Project '/dev/null/autoImportProviderProject1*' (AutoImportProvider) +Info seq [hh:mm:ss:mss] Files (2) + Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] Open files: Info seq [hh:mm:ss:mss] FileName: /project/node_modules/aws-sdk/package.json ProjectRootPath: undefined @@ -134,6 +156,12 @@ watchedFiles:: {"pollingInterval":500} /lib.decorators.legacy.d.ts: {"pollingInterval":500} +/project/node_modules/aws-sdk/clients/s3.d.ts: *new* + {"pollingInterval":500} +/project/node_modules/aws-sdk/index.d.ts: *new* + {"pollingInterval":500} +/project/node_modules/aws-sdk/package.json: *new* + {"pollingInterval":2000} /project/package.json: *new* {"pollingInterval":250} @@ -984,6 +1012,7 @@ Info seq [hh:mm:ss:mss] request: }, "command": "getCodeFixes" } +Info seq [hh:mm:ss:mss] forEachExternalModuleToImportFrom autoImportProvider: * Info seq [hh:mm:ss:mss] response: { "seq": 0, diff --git a/tests/baselines/reference/tsserver/fourslashServer/autoImportFileExcludePatterns_symlinks.js b/tests/baselines/reference/tsserver/fourslashServer/autoImportFileExcludePatterns_symlinks.js new file mode 100644 index 00000000000..634279187aa --- /dev/null +++ b/tests/baselines/reference/tsserver/fourslashServer/autoImportFileExcludePatterns_symlinks.js @@ -0,0 +1,1049 @@ +currentDirectory:: / useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +//// [/lib.d.ts] +lib.d.ts-Text + +//// [/lib.decorators.d.ts] +lib.decorators.d.ts-Text + +//// [/lib.decorators.legacy.d.ts] +lib.decorators.legacy.d.ts-Text + +//// [/project/index.ts] +ServerRuntimeMetaFunction + +//// [/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/index.d.ts] +export declare function ServerRuntimeMetaFunction(): void; + +//// [/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/package.json] +{ + "name": "@remix-run/server-runtime", + "version": "0.0.0", + "main": "index.js" +} + +//// [/project/node_modules/@remix-run/server-runtime] symlink(/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package) +//// [/project/package.json] +{ "dependencies": { "@remix-run/server-runtime": "*" } } + + +Info seq [hh:mm:ss:mss] request: + { + "seq": 0, + "type": "request", + "arguments": { + "file": "/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/package.json" + }, + "command": "open" + } +Info seq [hh:mm:ss:mss] Search path: /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package +Info seq [hh:mm:ss:mss] For info: /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/package.json :: No config files found. +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/tsconfig.json 2000 undefined WatchType: Config file for the inferred project root +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/tsconfig.json 2000 undefined WatchType: Config file for the inferred project root +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1* +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /project/node_modules/.store/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /project/node_modules/.store/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* Version: 1 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred) +Info seq [hh:mm:ss:mss] Files (4) + /lib.d.ts Text-1 lib.d.ts-Text + /lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text + /lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text + /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/package.json SVC-1-0 "{\n \"name\": \"@remix-run/server-runtime\",\n \"version\": \"0.0.0\",\n \"main\": \"index.js\"\n}" + + + ../../../../../lib.d.ts + Default library for target 'es5' + ../../../../../lib.decorators.d.ts + Library referenced via 'decorators' from file '../../../../../lib.d.ts' + ../../../../../lib.decorators.legacy.d.ts + Library referenced via 'decorators.legacy' from file '../../../../../lib.d.ts' + package.json + Root file specified for compilation + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/package.json ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /dev/null/inferredProject1* +After Request +watchedFiles:: +/lib.d.ts: *new* + {"pollingInterval":500} +/lib.decorators.d.ts: *new* + {"pollingInterval":500} +/lib.decorators.legacy.d.ts: *new* + {"pollingInterval":500} +/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/jsconfig.json: *new* + {"pollingInterval":2000} +/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/jsconfig.json: *new* + {"pollingInterval":2000} +/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/tsconfig.json: *new* + {"pollingInterval":2000} +/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/tsconfig.json: *new* + {"pollingInterval":2000} + +watchedDirectoriesRecursive:: +/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/node_modules/@types: *new* + {} +/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/node_modules/@types: *new* + {} +/project/node_modules/.store/node_modules/@types: *new* + {} + +Info seq [hh:mm:ss:mss] request: + { + "seq": 1, + "type": "request", + "arguments": { + "file": "/project/index.ts" + }, + "command": "open" + } +Info seq [hh:mm:ss:mss] Search path: /project +Info seq [hh:mm:ss:mss] For info: /project/index.ts :: No config files found. +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject2* +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject2* Version: 1 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/dev/null/inferredProject2*' (Inferred) +Info seq [hh:mm:ss:mss] Files (4) + /lib.d.ts Text-1 lib.d.ts-Text + /lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text + /lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text + /project/index.ts SVC-1-0 "ServerRuntimeMetaFunction" + + + ../lib.d.ts + Default library for target 'es5' + ../lib.decorators.d.ts + Library referenced via 'decorators' from file '../lib.d.ts' + ../lib.decorators.legacy.d.ts + Library referenced via 'decorators.legacy' from file '../lib.d.ts' + index.ts + Root file specified for compilation + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /project/package.json 250 undefined WatchType: package.json file +Info seq [hh:mm:ss:mss] AutoImportProviderProject: found 1 root files in 1 dependencies in * ms +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/index.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/autoImportProviderProject1* +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/autoImportProviderProject1* Version: 1 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/dev/null/autoImportProviderProject1*' (AutoImportProvider) +Info seq [hh:mm:ss:mss] Files (1) + /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/index.d.ts Text-1 "export declare function ServerRuntimeMetaFunction(): void;" + + + node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/index.d.ts + Root file specified for compilation + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Project '/dev/null/inferredProject2*' (Inferred) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Project '/dev/null/autoImportProviderProject1*' (AutoImportProvider) +Info seq [hh:mm:ss:mss] Files (1) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/package.json ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /dev/null/inferredProject1* +Info seq [hh:mm:ss:mss] FileName: /project/index.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /dev/null/inferredProject2* +After Request +watchedFiles:: +/lib.d.ts: + {"pollingInterval":500} +/lib.decorators.d.ts: + {"pollingInterval":500} +/lib.decorators.legacy.d.ts: + {"pollingInterval":500} +/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/jsconfig.json: + {"pollingInterval":2000} +/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/index.d.ts: *new* + {"pollingInterval":500} +/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/jsconfig.json: + {"pollingInterval":2000} +/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/tsconfig.json: + {"pollingInterval":2000} +/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/tsconfig.json: + {"pollingInterval":2000} +/project/package.json: *new* + {"pollingInterval":250} + +watchedDirectoriesRecursive:: +/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/node_modules/@types: + {} +/project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/node_modules/@types: + {} +/project/node_modules/.store/node_modules/@types: + {} + +Info seq [hh:mm:ss:mss] request: + { + "seq": 2, + "type": "request", + "arguments": { + "preferences": { + "includeCompletionsForModuleExports": true, + "autoImportFileExcludePatterns": [ + "/**/@remix-run/server-runtime" + ] + } + }, + "command": "configure" + } +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "configure", + "request_seq": 2, + "success": true + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 3, + "type": "request", + "arguments": { + "file": "/project/index.ts", + "line": 1, + "offset": 26 + }, + "command": "completionInfo" + } +Info seq [hh:mm:ss:mss] getCompletionData: Get current token: * +Info seq [hh:mm:ss:mss] getCompletionData: Is inside comment: * +Info seq [hh:mm:ss:mss] getCompletionData: Get previous token: * +Info seq [hh:mm:ss:mss] getCompletionData: Semantic work: * +Info seq [hh:mm:ss:mss] getCompletionsAtPosition: getCompletionEntriesFromSymbols: * +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "completionInfo", + "request_seq": 3, + "success": true, + "body": { + "flags": 0, + "isGlobalCompletion": true, + "isMemberCompletion": false, + "isNewIdentifierLocation": false, + "optionalReplacementSpan": { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 26 + } + }, + "entries": [ + { + "name": "abstract", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "any", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "ArrayBuffer", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "as", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "asserts", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "async", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "await", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "bigint", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "boolean", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Boolean", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "break", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "case", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "catch", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "class", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "const", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "continue", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "DataView", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "Date", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "debugger", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "declare", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "decodeURI", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "decodeURIComponent", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "default", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "delete", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "do", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "else", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "encodeURI", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "encodeURIComponent", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "enum", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Error", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "eval", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "EvalError", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "export", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "extends", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "false", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "finally", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Float32Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "Float64Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "for", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "function", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Function", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "globalThis", + "kind": "module", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "if", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "implements", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "import", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "in", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "infer", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Infinity", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "instanceof", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Int16Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "Int32Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "Int8Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "interface", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Intl", + "kind": "module", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "isFinite", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "isNaN", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "JSON", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "keyof", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "let", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Math", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "module", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "namespace", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "NaN", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "never", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "new", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "null", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "number", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Number", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "object", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Object", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "package", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "parseFloat", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "parseInt", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "RangeError", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "readonly", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "ReferenceError", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "RegExp", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "return", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "satisfies", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "string", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "String", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "super", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "switch", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "symbol", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "SyntaxError", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "this", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "throw", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "true", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "try", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "type", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "TypeError", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "typeof", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Uint16Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "Uint32Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "Uint8Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "Uint8ClampedArray", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "undefined", + "kind": "var", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "unique", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "unknown", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "URIError", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "var", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "void", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "while", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "with", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "yield", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "escape", + "kind": "function", + "kindModifiers": "deprecated,declare", + "sortText": "z15" + }, + { + "name": "unescape", + "kind": "function", + "kindModifiers": "deprecated,declare", + "sortText": "z15" + } + ] + } + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 4, + "type": "request", + "arguments": { + "preferences": { + "autoImportFileExcludePatterns": [ + "/**/@remix-run/server-runtime" + ] + } + }, + "command": "configure" + } +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "configure", + "request_seq": 4, + "success": true + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 5, + "type": "request", + "arguments": { + "preferences": { + "autoImportFileExcludePatterns": [ + "/**/@remix-run/server-runtime" + ] + } + }, + "command": "configure" + } +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "configure", + "request_seq": 5, + "success": true + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 6, + "type": "request", + "arguments": { + "file": "/project/index.ts", + "includeLinePosition": true + }, + "command": "syntacticDiagnosticsSync" + } +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "syntacticDiagnosticsSync", + "request_seq": 6, + "success": true, + "body": [] + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 7, + "type": "request", + "arguments": { + "file": "/project/index.ts", + "includeLinePosition": true + }, + "command": "semanticDiagnosticsSync" + } +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "semanticDiagnosticsSync", + "request_seq": 7, + "success": true, + "body": [ + { + "message": "Cannot find name 'ServerRuntimeMetaFunction'.", + "start": 0, + "length": 25, + "category": "error", + "code": 2304, + "startLocation": { + "line": 1, + "offset": 1 + }, + "endLocation": { + "line": 1, + "offset": 26 + } + } + ] + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 8, + "type": "request", + "arguments": { + "file": "/project/index.ts", + "includeLinePosition": true + }, + "command": "suggestionDiagnosticsSync" + } +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "suggestionDiagnosticsSync", + "request_seq": 8, + "success": true, + "body": [] + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 9, + "type": "request", + "arguments": { + "file": "/project/index.ts", + "startLine": 1, + "startOffset": 1, + "endLine": 1, + "endOffset": 26, + "errorCodes": [ + 2304 + ] + }, + "command": "getCodeFixes" + } +Info seq [hh:mm:ss:mss] forEachExternalModuleToImportFrom autoImportProvider: * +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "getCodeFixes", + "request_seq": 9, + "success": true, + "body": [] + } \ No newline at end of file diff --git a/tests/baselines/reference/tsserver/fourslashServer/autoImportFileExcludePatterns_symlinks2.js b/tests/baselines/reference/tsserver/fourslashServer/autoImportFileExcludePatterns_symlinks2.js new file mode 100644 index 00000000000..9ee01623789 --- /dev/null +++ b/tests/baselines/reference/tsserver/fourslashServer/autoImportFileExcludePatterns_symlinks2.js @@ -0,0 +1,1111 @@ +currentDirectory:: / useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +//// [/lib.d.ts] +lib.d.ts-Text + +//// [/lib.decorators.d.ts] +lib.decorators.d.ts-Text + +//// [/lib.decorators.legacy.d.ts] +lib.decorators.legacy.d.ts-Text + +//// [c:/project/index.ts] +ServerRuntimeMetaFunction + +//// [c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/index.d.ts] +export {}; + +//// [c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/package.json] +{ "name": "aws-sdk", "version": "2.0.0", "main": "index.js" } + +//// [c:/project/node_modules/@remix-run/server-runtime/index.d.ts] +export declare function ServerRuntimeMetaFunction(): void; + +//// [c:/project/node_modules/@remix-run/server-runtime/package.json] +{ + "name": "@remix-run/server-runtime", + "version": "0.0.0", + "main": "index.js" +} + +//// [c:/project/node_modules/aws-sdk] symlink(c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package) +//// [c:/project/package.json] +{ "dependencies": { "aws-sdk": "*", "@remix-run/server-runtime": "*" } } + + +Info seq [hh:mm:ss:mss] request: + { + "seq": 0, + "type": "request", + "arguments": { + "file": "c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/package.json" + }, + "command": "open" + } +Info seq [hh:mm:ss:mss] Search path: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package +Info seq [hh:mm:ss:mss] For info: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/package.json :: No config files found. +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/tsconfig.json 2000 undefined WatchType: Config file for the inferred project root +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/tsconfig.json 2000 undefined WatchType: Config file for the inferred project root +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: c:/project/node_modules/.store/tsconfig.json 2000 undefined WatchType: Config file for the inferred project root +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: c:/project/node_modules/.store/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: c:/project/node_modules/tsconfig.json 2000 undefined WatchType: Config file for the inferred project root +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: c:/project/node_modules/jsconfig.json 2000 undefined WatchType: Config file for the inferred project root +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1* +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Failed Lookup Locations +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules/.store/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules/.store/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject1* WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* Version: 1 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred) +Info seq [hh:mm:ss:mss] Files (4) + /lib.d.ts Text-1 lib.d.ts-Text + /lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text + /lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text + c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/package.json SVC-1-0 "{ \"name\": \"aws-sdk\", \"version\": \"2.0.0\", \"main\": \"index.js\" }" + + + /lib.d.ts + Default library for target 'es5' + /lib.decorators.d.ts + Library referenced via 'decorators' from file '/lib.d.ts' + /lib.decorators.legacy.d.ts + Library referenced via 'decorators.legacy' from file '/lib.d.ts' + package.json + Root file specified for compilation + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/package.json ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /dev/null/inferredProject1* +After Request +watchedFiles:: +/lib.d.ts: *new* + {"pollingInterval":500} +/lib.decorators.d.ts: *new* + {"pollingInterval":500} +/lib.decorators.legacy.d.ts: *new* + {"pollingInterval":500} +c:/project/node_modules/.store/aws-sdk-virtual-adfe098/jsconfig.json: *new* + {"pollingInterval":2000} +c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/jsconfig.json: *new* + {"pollingInterval":2000} +c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/tsconfig.json: *new* + {"pollingInterval":2000} +c:/project/node_modules/.store/aws-sdk-virtual-adfe098/tsconfig.json: *new* + {"pollingInterval":2000} +c:/project/node_modules/.store/jsconfig.json: *new* + {"pollingInterval":2000} +c:/project/node_modules/.store/tsconfig.json: *new* + {"pollingInterval":2000} +c:/project/node_modules/jsconfig.json: *new* + {"pollingInterval":2000} +c:/project/node_modules/tsconfig.json: *new* + {"pollingInterval":2000} + +watchedDirectoriesRecursive:: +c:/project/node_modules: *new* + {} +c:/project/node_modules/.store/aws-sdk-virtual-adfe098/node_modules/@types: *new* + {} +c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/node_modules: *new* + {} +c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/node_modules/@types: *new* + {} +c:/project/node_modules/.store/node_modules/@types: *new* + {} +c:/project/node_modules/@types: *new* + {} +c:/project/node_modules/node_modules/@types: *new* + {} + +Info seq [hh:mm:ss:mss] request: + { + "seq": 1, + "type": "request", + "arguments": { + "file": "c:/project/index.ts" + }, + "command": "open" + } +Info seq [hh:mm:ss:mss] Search path: c:/project +Info seq [hh:mm:ss:mss] For info: c:/project/index.ts :: No config files found. +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject2* +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules 1 undefined Project: /dev/null/inferredProject2* WatchType: Failed Lookup Locations +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules 1 undefined Project: /dev/null/inferredProject2* WatchType: Failed Lookup Locations +Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject2* WatchType: Type roots +Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: c:/project/node_modules/@types 1 undefined Project: /dev/null/inferredProject2* WatchType: Type roots +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject2* Version: 1 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/dev/null/inferredProject2*' (Inferred) +Info seq [hh:mm:ss:mss] Files (4) + /lib.d.ts Text-1 lib.d.ts-Text + /lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text + /lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text + c:/project/index.ts SVC-1-0 "ServerRuntimeMetaFunction" + + + /lib.d.ts + Default library for target 'es5' + /lib.decorators.d.ts + Library referenced via 'decorators' from file '/lib.d.ts' + /lib.decorators.legacy.d.ts + Library referenced via 'decorators.legacy' from file '/lib.d.ts' + index.ts + Root file specified for compilation + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: c:/project/package.json 250 undefined WatchType: package.json file +Info seq [hh:mm:ss:mss] AutoImportProviderProject: found 2 root files in 2 dependencies in * ms +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/index.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: c:/project/node_modules/@remix-run/server-runtime/index.d.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/autoImportProviderProject1* +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/autoImportProviderProject1* Version: 1 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/dev/null/autoImportProviderProject1*' (AutoImportProvider) +Info seq [hh:mm:ss:mss] Files (2) + c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/index.d.ts Text-1 "export {};" + c:/project/node_modules/@remix-run/server-runtime/index.d.ts Text-1 "export declare function ServerRuntimeMetaFunction(): void;" + + + node_modules/.store/aws-sdk-virtual-adfe098/package/index.d.ts + Root file specified for compilation + node_modules/@remix-run/server-runtime/index.d.ts + Root file specified for compilation + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Project '/dev/null/inferredProject2*' (Inferred) +Info seq [hh:mm:ss:mss] Files (4) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Project '/dev/null/autoImportProviderProject1*' (AutoImportProvider) +Info seq [hh:mm:ss:mss] Files (2) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/package.json ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /dev/null/inferredProject1* +Info seq [hh:mm:ss:mss] FileName: c:/project/index.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /dev/null/inferredProject2* +After Request +watchedFiles:: +/lib.d.ts: + {"pollingInterval":500} +/lib.decorators.d.ts: + {"pollingInterval":500} +/lib.decorators.legacy.d.ts: + {"pollingInterval":500} +c:/project/node_modules/.store/aws-sdk-virtual-adfe098/jsconfig.json: + {"pollingInterval":2000} +c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/index.d.ts: *new* + {"pollingInterval":500} +c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/jsconfig.json: + {"pollingInterval":2000} +c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/tsconfig.json: + {"pollingInterval":2000} +c:/project/node_modules/.store/aws-sdk-virtual-adfe098/tsconfig.json: + {"pollingInterval":2000} +c:/project/node_modules/.store/jsconfig.json: + {"pollingInterval":2000} +c:/project/node_modules/.store/tsconfig.json: + {"pollingInterval":2000} +c:/project/node_modules/@remix-run/server-runtime/index.d.ts: *new* + {"pollingInterval":500} +c:/project/node_modules/jsconfig.json: + {"pollingInterval":2000} +c:/project/node_modules/tsconfig.json: + {"pollingInterval":2000} +c:/project/package.json: *new* + {"pollingInterval":250} + +watchedDirectoriesRecursive:: +c:/project/node_modules: + {} + {} *new* +c:/project/node_modules/.store/aws-sdk-virtual-adfe098/node_modules/@types: + {} +c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/node_modules: + {} +c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/node_modules/@types: + {} +c:/project/node_modules/.store/node_modules/@types: + {} +c:/project/node_modules/@types: + {} + {} *new* +c:/project/node_modules/node_modules/@types: + {} + +Info seq [hh:mm:ss:mss] request: + { + "seq": 2, + "type": "request", + "arguments": { + "preferences": { + "includeCompletionsForModuleExports": true, + "autoImportFileExcludePatterns": [ + "c:/**/@remix-run/server-runtime" + ] + } + }, + "command": "configure" + } +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "configure", + "request_seq": 2, + "success": true + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 3, + "type": "request", + "arguments": { + "file": "c:/project/index.ts", + "line": 1, + "offset": 26 + }, + "command": "completionInfo" + } +Info seq [hh:mm:ss:mss] getCompletionData: Get current token: * +Info seq [hh:mm:ss:mss] getCompletionData: Is inside comment: * +Info seq [hh:mm:ss:mss] getCompletionData: Get previous token: * +Info seq [hh:mm:ss:mss] getCompletionData: Semantic work: * +Info seq [hh:mm:ss:mss] getCompletionsAtPosition: getCompletionEntriesFromSymbols: * +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "completionInfo", + "request_seq": 3, + "success": true, + "body": { + "flags": 0, + "isGlobalCompletion": true, + "isMemberCompletion": false, + "isNewIdentifierLocation": false, + "optionalReplacementSpan": { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 26 + } + }, + "entries": [ + { + "name": "abstract", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "any", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "ArrayBuffer", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "as", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "asserts", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "async", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "await", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "bigint", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "boolean", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Boolean", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "break", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "case", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "catch", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "class", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "const", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "continue", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "DataView", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "Date", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "debugger", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "declare", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "decodeURI", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "decodeURIComponent", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "default", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "delete", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "do", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "else", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "encodeURI", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "encodeURIComponent", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "enum", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Error", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "eval", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "EvalError", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "export", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "extends", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "false", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "finally", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Float32Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "Float64Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "for", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "function", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Function", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "globalThis", + "kind": "module", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "if", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "implements", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "import", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "in", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "infer", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Infinity", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "instanceof", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Int16Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "Int32Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "Int8Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "interface", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Intl", + "kind": "module", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "isFinite", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "isNaN", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "JSON", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "keyof", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "let", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Math", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "module", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "namespace", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "NaN", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "never", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "new", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "null", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "number", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Number", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "object", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Object", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "package", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "parseFloat", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "parseInt", + "kind": "function", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "RangeError", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "readonly", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "ReferenceError", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "RegExp", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "return", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "satisfies", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "string", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "String", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "super", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "switch", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "symbol", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "SyntaxError", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "this", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "throw", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "true", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "try", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "type", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "TypeError", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "typeof", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "Uint16Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "Uint32Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "Uint8Array", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "Uint8ClampedArray", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "undefined", + "kind": "var", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "unique", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "unknown", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "URIError", + "kind": "var", + "kindModifiers": "declare", + "sortText": "15" + }, + { + "name": "var", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "void", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "while", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "with", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "yield", + "kind": "keyword", + "kindModifiers": "", + "sortText": "15" + }, + { + "name": "escape", + "kind": "function", + "kindModifiers": "deprecated,declare", + "sortText": "z15" + }, + { + "name": "unescape", + "kind": "function", + "kindModifiers": "deprecated,declare", + "sortText": "z15" + } + ] + } + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 4, + "type": "request", + "arguments": { + "preferences": { + "autoImportFileExcludePatterns": [ + "c:/**/@remix-run/server-runtime" + ] + } + }, + "command": "configure" + } +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "configure", + "request_seq": 4, + "success": true + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 5, + "type": "request", + "arguments": { + "preferences": { + "autoImportFileExcludePatterns": [ + "c:/**/@remix-run/server-runtime" + ] + } + }, + "command": "configure" + } +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "configure", + "request_seq": 5, + "success": true + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 6, + "type": "request", + "arguments": { + "file": "c:/project/index.ts", + "includeLinePosition": true + }, + "command": "syntacticDiagnosticsSync" + } +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "syntacticDiagnosticsSync", + "request_seq": 6, + "success": true, + "body": [] + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 7, + "type": "request", + "arguments": { + "file": "c:/project/index.ts", + "includeLinePosition": true + }, + "command": "semanticDiagnosticsSync" + } +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "semanticDiagnosticsSync", + "request_seq": 7, + "success": true, + "body": [ + { + "message": "Cannot find name 'ServerRuntimeMetaFunction'.", + "start": 0, + "length": 25, + "category": "error", + "code": 2304, + "startLocation": { + "line": 1, + "offset": 1 + }, + "endLocation": { + "line": 1, + "offset": 26 + } + } + ] + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 8, + "type": "request", + "arguments": { + "file": "c:/project/index.ts", + "includeLinePosition": true + }, + "command": "suggestionDiagnosticsSync" + } +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "suggestionDiagnosticsSync", + "request_seq": 8, + "success": true, + "body": [] + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 9, + "type": "request", + "arguments": { + "file": "c:/project/index.ts", + "startLine": 1, + "startOffset": 1, + "endLine": 1, + "endOffset": 26, + "errorCodes": [ + 2304 + ] + }, + "command": "getCodeFixes" + } +Info seq [hh:mm:ss:mss] forEachExternalModuleToImportFrom autoImportProvider: * +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "getCodeFixes", + "request_seq": 9, + "success": true, + "body": [] + } \ No newline at end of file diff --git a/tests/cases/fourslash/server/autoImportFileExcludePatterns1.ts b/tests/cases/fourslash/server/autoImportFileExcludePatterns1.ts index 2b2a7c9b963..2c5a37e37b3 100644 --- a/tests/cases/fourslash/server/autoImportFileExcludePatterns1.ts +++ b/tests/cases/fourslash/server/autoImportFileExcludePatterns1.ts @@ -12,7 +12,7 @@ //// export declare class S3 {} // @Filename: /project/package.json -//// { "dependencies": "aws-sdk" } +//// { "dependencies": { "aws-sdk": "*" } } // @Filename: /project/index.ts //// S3/**/ diff --git a/tests/cases/fourslash/server/autoImportFileExcludePatterns_symlinks.ts b/tests/cases/fourslash/server/autoImportFileExcludePatterns_symlinks.ts new file mode 100644 index 00000000000..a276d5ccaf6 --- /dev/null +++ b/tests/cases/fourslash/server/autoImportFileExcludePatterns_symlinks.ts @@ -0,0 +1,34 @@ +/// + +// @module: commonjs + +// @Filename: /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/package.json +//// { +//// "name": "@remix-run/server-runtime", +//// "version": "0.0.0", +//// "main": "index.js" +//// } + +// @Filename: /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package/index.d.ts +//// export declare function ServerRuntimeMetaFunction(): void; + +// @Filename: /project/package.json +//// { "dependencies": { "@remix-run/server-runtime": "*" } } + +// @link: /project/node_modules/.store/@remix-run-server-runtime-virtual-c72daf0d/package -> /project/node_modules/@remix-run/server-runtime + +// @Filename: /project/index.ts +//// ServerRuntimeMetaFunction/**/ + +const autoImportFileExcludePatterns = ["/**/@remix-run/server-runtime"]; + +verify.completions({ + marker: "", + excludes: "ServerRuntimeMetaFunction", + preferences: { + includeCompletionsForModuleExports: true, + autoImportFileExcludePatterns, + } +}); + +verify.importFixAtPosition([], /*errorCode*/ undefined, { autoImportFileExcludePatterns }); diff --git a/tests/cases/fourslash/server/autoImportFileExcludePatterns_symlinks2.ts b/tests/cases/fourslash/server/autoImportFileExcludePatterns_symlinks2.ts new file mode 100644 index 00000000000..18547916f95 --- /dev/null +++ b/tests/cases/fourslash/server/autoImportFileExcludePatterns_symlinks2.ts @@ -0,0 +1,40 @@ +/// + +// @module: commonjs + +// @Filename: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/package.json +//// { "name": "aws-sdk", "version": "2.0.0", "main": "index.js" } + +// @Filename: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package/index.d.ts +//// export {}; + +// @Filename: c:/project/node_modules/@remix-run/server-runtime/package.json +//// { +//// "name": "@remix-run/server-runtime", +//// "version": "0.0.0", +//// "main": "index.js" +//// } + +// @Filename: c:/project/node_modules/@remix-run/server-runtime/index.d.ts +//// export declare function ServerRuntimeMetaFunction(): void; + +// @Filename: c:/project/package.json +//// { "dependencies": { "aws-sdk": "*", "@remix-run/server-runtime": "*" } } + +// @link: c:/project/node_modules/.store/aws-sdk-virtual-adfe098/package -> c:/project/node_modules/aws-sdk + +// @Filename: c:/project/index.ts +//// ServerRuntimeMetaFunction/**/ + +const autoImportFileExcludePatterns = ["c:/**/@remix-run/server-runtime"]; + +verify.completions({ + marker: "", + excludes: "ServerRuntimeMetaFunction", + preferences: { + includeCompletionsForModuleExports: true, + autoImportFileExcludePatterns, + } +}); + +verify.importFixAtPosition([], /*errorCode*/ undefined, { autoImportFileExcludePatterns });