From e31bb29504ac7c763e47a90b7db2c1ac7893819d Mon Sep 17 00:00:00 2001 From: navya9singh Date: Thu, 20 Jun 2024 10:16:39 -0700 Subject: [PATCH 01/15] Fixes namespace debug failure but test 2 fails --- src/services/codefixes/importFixes.ts | 51 ++- src/services/refactors/moveToFile.ts | 16 +- .../pasteEdits_namespaceImport.js | 339 ++++++++++++++++++ .../server/pasteEdits_namespaceImport.ts | 47 +++ .../server/pasteEdits_namespaceImport2.ts | 56 +++ 5 files changed, 489 insertions(+), 20 deletions(-) create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport.js create mode 100644 tests/cases/fourslash/server/pasteEdits_namespaceImport.ts create mode 100644 tests/cases/fourslash/server/pasteEdits_namespaceImport2.ts diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index b397f29d74e75..0181ce063c535 100644 --- a/src/services/codefixes/importFixes.ts +++ b/src/services/codefixes/importFixes.ts @@ -272,26 +272,45 @@ function createImportAdderWorker(sourceFile: SourceFile | FutureSourceFile, prog } function addImportFromExportedSymbol(exportedSymbol: Symbol, isValidTypeOnlyUseSite?: boolean, referenceImport?: ImportOrRequireAliasDeclaration) { - const moduleSymbol = Debug.checkDefined(exportedSymbol.parent); - const symbolName = getNameForExportedSymbol(exportedSymbol, getEmitScriptTarget(compilerOptions)); const checker = program.getTypeChecker(); - const symbol = checker.getMergedSymbol(skipAlias(exportedSymbol, checker)); - const exportInfo = getAllExportInfoForSymbol(sourceFile, symbol, symbolName, moduleSymbol, /*preferCapitalized*/ false, program, host, preferences, cancellationToken); const useRequire = shouldUseRequire(sourceFile, program); - let fix = getImportFixForSymbol(sourceFile, Debug.checkDefined(exportInfo), program, /*position*/ undefined, !!isValidTypeOnlyUseSite, useRequire, host, preferences); - if (fix) { - const localName = tryCast(referenceImport?.name, isIdentifier)?.text ?? symbolName; - if ( - referenceImport - && isTypeOnlyImportDeclaration(referenceImport) - && (fix.kind === ImportFixKind.AddNew || fix.kind === ImportFixKind.AddToExisting) - && fix.addAsTypeOnly === AddAsTypeOnly.Allowed - ) { - // Copy the type-only status from the reference import - fix = { ...fix, addAsTypeOnly: AddAsTypeOnly.Required }; + if (referenceImport && isNamespaceImport(referenceImport) && exportedSymbol.valueDeclaration) { + const namespacePrefix = getNamespaceLikeImportText(referenceImport.parent.parent); + const moduleSpecifier = moduleSpecifiers.getLocalModuleSpecifierBetweenFileNames( + sourceFile, + exportedSymbol.valueDeclaration.getSourceFile().fileName, + compilerOptions, + createModuleSpecifierResolutionHost(program, host), + ); + if (namespacePrefix) { + const info: FixInfo = { + fix: { kind: ImportFixKind.AddNew, importKind: ImportKind.Namespace, addAsTypeOnly: isTypeOnlyImportDeclaration(referenceImport) ? AddAsTypeOnly.Required : AddAsTypeOnly.NotAllowed, useRequire, moduleSpecifierKind: undefined, moduleSpecifier }, + symbolName: namespacePrefix, + errorIdentifierText: undefined + }; + addImport(info); } - addImport({ fix, symbolName: localName ?? symbolName, errorIdentifierText: undefined }); } + else { + const moduleSymbol = Debug.checkDefined(exportedSymbol.parent); + const symbolName = getNameForExportedSymbol(exportedSymbol, getEmitScriptTarget(compilerOptions)); + const symbol = checker.getMergedSymbol(skipAlias(exportedSymbol, checker)); + const exportInfo = getAllExportInfoForSymbol(sourceFile, symbol, symbolName, moduleSymbol, /*preferCapitalized*/ false, program, host, preferences, cancellationToken); + let fix = getImportFixForSymbol(sourceFile, Debug.checkDefined(exportInfo), program, /*position*/ undefined, !!isValidTypeOnlyUseSite, useRequire, host, preferences); + if (fix) { + const localName = tryCast(referenceImport?.name, isIdentifier)?.text ?? symbolName; + if ( + referenceImport + && isTypeOnlyImportDeclaration(referenceImport) + && (fix.kind === ImportFixKind.AddNew || fix.kind === ImportFixKind.AddToExisting) + && fix.addAsTypeOnly === AddAsTypeOnly.Allowed + ) { + // Copy the type-only status from the reference import + fix = { ...fix, addAsTypeOnly: AddAsTypeOnly.Required }; + } + addImport({ fix, symbolName: localName ?? symbolName, errorIdentifierText: undefined }); + } + } } function addImportForNonExistentExport(exportName: string, exportingFileName: string, exportKind: ExportKind, exportedMeanings: SymbolFlags, isImportUsageValidAsTypeOnly: boolean) { diff --git a/src/services/refactors/moveToFile.ts b/src/services/refactors/moveToFile.ts index 286b9c2a89533..14764849fe624 100644 --- a/src/services/refactors/moveToFile.ts +++ b/src/services/refactors/moveToFile.ts @@ -1127,12 +1127,20 @@ export function getExistingLocals(sourceFile: SourceFile, statements: readonly S const declaration = importFromModuleSpecifier(moduleSpecifier); if ( isImportDeclaration(declaration) && declaration.importClause && - declaration.importClause.namedBindings && isNamedImports(declaration.importClause.namedBindings) + declaration.importClause.namedBindings ) { - for (const e of declaration.importClause.namedBindings.elements) { - const symbol = checker.getSymbolAtLocation(e.propertyName || e.name); + if (isNamespaceImport(declaration.importClause.namedBindings)) { + const symbol = checker.getSymbolAtLocation(declaration.importClause.namedBindings.name); if (symbol) { - existingLocals.add(skipAlias(symbol, checker)); + existingLocals.add(symbol); + } + } + else if(isNamedImports(declaration.importClause.namedBindings)) { + for (const e of declaration.importClause.namedBindings.elements) { + const symbol = checker.getSymbolAtLocation(e.propertyName || e.name); + if (symbol) { + existingLocals.add(skipAlias(symbol, checker)); + } } } } diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport.js new file mode 100644 index 0000000000000..320fc73591546 --- /dev/null +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport.js @@ -0,0 +1,339 @@ +currentDirectory:: / useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +//// [/a.ts] +const abc = 10; +const def = 20; +export interface testInterface { + abc: number; + def: number; +} + +//// [/b.ts] +import type * as test from "./a"; + +function foo(abc: test.testInterface, def: test.testInterface) { + console.log(abc); + console.log(def); +} + + +//// [/folder/c.ts] + + +//// [/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 + +//// [/tsconfig.json] +{ "files": ["/folder/c.ts", "a.ts", "b.ts"] } + + +Info seq [hh:mm:ss:mss] request: + { + "seq": 0, + "type": "request", + "arguments": { + "file": "/folder/c.ts" + }, + "command": "open" + } +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/tsconfig.json", + "reason": "Creating possible configured project for /folder/c.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { + "rootNames": [ + "/folder/c.ts", + "/a.ts", + "/b.ts" + ], + "options": { + "configFilePath": "/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +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] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + /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 + /folder/c.ts SVC-1-0 "" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /b.ts Text-1 "import type * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\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' + folder/c.ts + Part of 'files' list in tsconfig.json + a.ts + Part of 'files' list in tsconfig.json + Imported via "./a" from file 'b.ts' + b.ts + Part of 'files' list in tsconfig.json + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/folder/c.ts", + "configFile": "/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /tsconfig.json +After Request +watchedFiles:: +/a.ts: *new* + {"pollingInterval":500} +/b.ts: *new* + {"pollingInterval":500} +/lib.d.ts: *new* + {"pollingInterval":500} +/lib.decorators.d.ts: *new* + {"pollingInterval":500} +/lib.decorators.legacy.d.ts: *new* + {"pollingInterval":500} +/tsconfig.json: *new* + {"pollingInterval":2000} + +Projects:: +/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/b.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/folder/c.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /tsconfig.json *default* +/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.legacy.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json + +Info seq [hh:mm:ss:mss] request: + { + "seq": 1, + "type": "request", + "arguments": { + "formatOptions": { + "indentSize": 4, + "tabSize": 4, + "newLineCharacter": "\n", + "convertTabsToSpaces": true, + "indentStyle": 2, + "insertSpaceAfterConstructor": false, + "insertSpaceAfterCommaDelimiter": true, + "insertSpaceAfterSemicolonInForStatements": true, + "insertSpaceBeforeAndAfterBinaryOperators": true, + "insertSpaceAfterKeywordsInControlFlowStatements": true, + "insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": true, + "insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false, + "insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false, + "insertSpaceBeforeFunctionParenthesis": false, + "placeOpenBraceOnNewLineForFunctions": false, + "placeOpenBraceOnNewLineForControlBlocks": false, + "semicolons": "ignore", + "trimTrailingWhitespace": true, + "indentSwitchCase": true + } + }, + "command": "configure" + } +Info seq [hh:mm:ss:mss] Format host information updated +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "configure", + "request_seq": 1, + "success": true + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 2, + "type": "request", + "arguments": { + "file": "/folder/c.ts", + "pastedText": [ + "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + ], + "pasteLocations": [ + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + } + } + ], + "copiedFrom": { + "file": "b.ts", + "spans": [ + { + "start": { + "line": 3, + "offset": 1 + }, + "end": { + "line": 6, + "offset": 2 + } + } + ] + } + }, + "command": "getPasteEdits" + } +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + /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 + /folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /b.ts Text-1 "import type * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "getPasteEdits", + "request_seq": 2, + "success": true, + "performanceData": { + "updateGraphDurationMs": * + }, + "body": { + "edits": [ + { + "fileName": "/folder/c.ts", + "textChanges": [ + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + }, + "newText": "import type * as test from \"../a\";\n\n" + }, + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + }, + "newText": "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + } + ] + } + ], + "fixId": "providePostPasteEdits" + } + } +After Request +Projects:: +/tsconfig.json (Configured) *changed* + projectStateVersion: 3 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/b.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/folder/c.ts (Open) *changed* + version: SVC-1-2 *changed* + containingProjects: 1 + /tsconfig.json *default* +/lib.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.legacy.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json diff --git a/tests/cases/fourslash/server/pasteEdits_namespaceImport.ts b/tests/cases/fourslash/server/pasteEdits_namespaceImport.ts new file mode 100644 index 0000000000000..9bcfed418b34a --- /dev/null +++ b/tests/cases/fourslash/server/pasteEdits_namespaceImport.ts @@ -0,0 +1,47 @@ +/// + +// @Filename: /folder/c.ts +//// [||] + + +// @Filename: /a.ts +//// const abc = 10; +//// const def = 20; +//// export interface testInterface { +//// abc: number; +//// def: number;s +//// } + +// @Filename: /b.ts +//// import * as test from "./a"; +//// +//// [|function foo(abc: test.testInterface, def: test.testInterface) { +//// console.log(abc); +//// console.log(def); +//// }|] +//// + +// @Filename: /tsconfig.json +////{ "files": ["/folder/c.ts", "a.ts", "b.ts"] } + +const range = test.ranges(); +verify.pasteEdits({ + args: { + pastedText: [`function foo(abc: test.abc, def: test.def) { +console.log(abc); +console.log(def); +}`], + pasteLocations: [range[0]], + copiedFrom: { file: "b.ts", range: [range[1]] }, + }, + newFileContents: { + "/folder/c.ts": +`import * as test from "../a"; + +function foo(abc: test.abc, def: test.def) { +console.log(abc); +console.log(def); +}` + } +}); + diff --git a/tests/cases/fourslash/server/pasteEdits_namespaceImport2.ts b/tests/cases/fourslash/server/pasteEdits_namespaceImport2.ts new file mode 100644 index 0000000000000..403ea72fa2567 --- /dev/null +++ b/tests/cases/fourslash/server/pasteEdits_namespaceImport2.ts @@ -0,0 +1,56 @@ +/// + +// @Filename: /folder/c.ts +//// import type * as test from "../a"; +//// +//// function foo(abc: test.abc, def: test.def) { +//// console.log(abc); +//// } +//// [||] +//// + + +// @Filename: /a.ts +//// const abc = 10; +//// const def = 20; +//// export interface testInterface { +//// abc: number; +//// def: number; +//// } + +// @Filename: /b.ts +//// import type * as test from "./a"; +//// +//// [|function foo(abc: test.testInterface, def: test.testInterface) { +//// console.log(abc); +//// console.log(def); +//// }|] +//// + +// @Filename: /tsconfig.json +////{ "files": ["/folder/c.ts", "a.ts", "b.ts"] } + +const range = test.ranges(); +verify.pasteEdits({ + args: { + pastedText: [`function foo(abc: test.abc, def: test.def) { +console.log(abc); +console.log(def); +}`], + pasteLocations: [range[0]], + copiedFrom: { file: "b.ts", range: [range[1]] }, + }, + newFileContents: { + "/folder/c.ts": +`import type * as test from "../a"; + +function foo(abc: test.abc, def: test.def) { +console.log(abc); +} +function foo(abc: test.abc, def: test.def) { +console.log(abc); +console.log(def); +}` + } +}); + From c4d86b83505e3012197e6a7bc533317a8580ad99 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Mon, 24 Jun 2024 13:24:26 -0700 Subject: [PATCH 02/15] fixing test 2 --- src/services/refactors/moveToFile.ts | 2 +- .../pasteEdits_namespaceImport.js | 14 +- .../pasteEdits_namespaceImport2.js | 335 ++++++++++++++++++ .../server/pasteEdits_namespaceImport2.ts | 3 +- 4 files changed, 345 insertions(+), 9 deletions(-) create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport2.js diff --git a/src/services/refactors/moveToFile.ts b/src/services/refactors/moveToFile.ts index 14764849fe624..2cd61b3277c75 100644 --- a/src/services/refactors/moveToFile.ts +++ b/src/services/refactors/moveToFile.ts @@ -1132,7 +1132,7 @@ export function getExistingLocals(sourceFile: SourceFile, statements: readonly S if (isNamespaceImport(declaration.importClause.namedBindings)) { const symbol = checker.getSymbolAtLocation(declaration.importClause.namedBindings.name); if (symbol) { - existingLocals.add(symbol); + existingLocals.add(skipAlias(symbol, checker)); } } else if(isNamedImports(declaration.importClause.namedBindings)) { diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport.js index 320fc73591546..e33a6ce79dbab 100644 --- a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport.js +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport.js @@ -5,11 +5,11 @@ const abc = 10; const def = 20; export interface testInterface { abc: number; - def: number; + def: number;s } //// [/b.ts] -import type * as test from "./a"; +import * as test from "./a"; function foo(abc: test.testInterface, def: test.testInterface) { console.log(abc); @@ -78,8 +78,8 @@ Info seq [hh:mm:ss:mss] Files (6) /lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text /lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text /folder/c.ts SVC-1-0 "" - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /b.ts Text-1 "import type * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;s\n}" + /b.ts Text-1 "import * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" lib.d.ts @@ -258,8 +258,8 @@ Info seq [hh:mm:ss:mss] Files (6) /lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text /lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text /folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /b.ts Text-1 "import type * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;s\n}" + /b.ts Text-1 "import * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] response: @@ -286,7 +286,7 @@ Info seq [hh:mm:ss:mss] response: "line": 1, "offset": 1 }, - "newText": "import type * as test from \"../a\";\n\n" + "newText": "import * as test from \"../a\";\n\n" }, { "start": { diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport2.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport2.js new file mode 100644 index 0000000000000..9d3c98e61c02c --- /dev/null +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport2.js @@ -0,0 +1,335 @@ +currentDirectory:: / useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +//// [/a.ts] +const abc = 10; +const def = 20; +export interface testInterface { + abc: number; + def: number; +} + +//// [/b.ts] +import type * as test from "./a"; + +function foo(abc: test.testInterface, def: test.testInterface) { + console.log(abc); + console.log(def); +} + + +//// [/folder/c.ts] +import type * as test from "../a"; + +function foo(abc: test.abc, def: test.def) { +console.log(abc); +} + + + +//// [/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 + +//// [/tsconfig.json] +{ "files": ["/folder/c.ts", "a.ts", "b.ts"] } + + +Info seq [hh:mm:ss:mss] request: + { + "seq": 0, + "type": "request", + "arguments": { + "file": "/folder/c.ts" + }, + "command": "open" + } +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/tsconfig.json", + "reason": "Creating possible configured project for /folder/c.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { + "rootNames": [ + "/folder/c.ts", + "/a.ts", + "/b.ts" + ], + "options": { + "configFilePath": "/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +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] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + /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 + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /folder/c.ts SVC-1-0 "import type * as test from \"../a\";\n\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\n}\n\n" + /b.ts Text-1 "import type * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\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' + a.ts + Imported via "../a" from file 'folder/c.ts' + Part of 'files' list in tsconfig.json + Imported via "./a" from file 'b.ts' + folder/c.ts + Part of 'files' list in tsconfig.json + b.ts + Part of 'files' list in tsconfig.json + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/folder/c.ts", + "configFile": "/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /tsconfig.json +After Request +watchedFiles:: +/a.ts: *new* + {"pollingInterval":500} +/b.ts: *new* + {"pollingInterval":500} +/lib.d.ts: *new* + {"pollingInterval":500} +/lib.decorators.d.ts: *new* + {"pollingInterval":500} +/lib.decorators.legacy.d.ts: *new* + {"pollingInterval":500} +/tsconfig.json: *new* + {"pollingInterval":2000} + +Projects:: +/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/b.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/folder/c.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /tsconfig.json *default* +/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.legacy.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json + +Info seq [hh:mm:ss:mss] request: + { + "seq": 1, + "type": "request", + "arguments": { + "formatOptions": { + "indentSize": 4, + "tabSize": 4, + "newLineCharacter": "\n", + "convertTabsToSpaces": true, + "indentStyle": 2, + "insertSpaceAfterConstructor": false, + "insertSpaceAfterCommaDelimiter": true, + "insertSpaceAfterSemicolonInForStatements": true, + "insertSpaceBeforeAndAfterBinaryOperators": true, + "insertSpaceAfterKeywordsInControlFlowStatements": true, + "insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": true, + "insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false, + "insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false, + "insertSpaceBeforeFunctionParenthesis": false, + "placeOpenBraceOnNewLineForFunctions": false, + "placeOpenBraceOnNewLineForControlBlocks": false, + "semicolons": "ignore", + "trimTrailingWhitespace": true, + "indentSwitchCase": true + } + }, + "command": "configure" + } +Info seq [hh:mm:ss:mss] Format host information updated +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "configure", + "request_seq": 1, + "success": true + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 2, + "type": "request", + "arguments": { + "file": "/folder/c.ts", + "pastedText": [ + "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + ], + "pasteLocations": [ + { + "start": { + "line": 6, + "offset": 1 + }, + "end": { + "line": 6, + "offset": 1 + } + } + ], + "copiedFrom": { + "file": "b.ts", + "spans": [ + { + "start": { + "line": 3, + "offset": 1 + }, + "end": { + "line": 6, + "offset": 2 + } + } + ] + } + }, + "command": "getPasteEdits" + } +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + /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 + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /folder/c.ts SVC-1-1 "import type * as test from \"../a\";\n\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\n}\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}\n" + /b.ts Text-1 "import type * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "getPasteEdits", + "request_seq": 2, + "success": true, + "performanceData": { + "updateGraphDurationMs": * + }, + "body": { + "edits": [ + { + "fileName": "/folder/c.ts", + "textChanges": [ + { + "start": { + "line": 6, + "offset": 1 + }, + "end": { + "line": 6, + "offset": 1 + }, + "newText": "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + } + ] + } + ], + "fixId": "providePostPasteEdits" + } + } +After Request +Projects:: +/tsconfig.json (Configured) *changed* + projectStateVersion: 3 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/b.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/folder/c.ts (Open) *changed* + version: SVC-1-2 *changed* + containingProjects: 1 + /tsconfig.json *default* +/lib.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.legacy.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json diff --git a/tests/cases/fourslash/server/pasteEdits_namespaceImport2.ts b/tests/cases/fourslash/server/pasteEdits_namespaceImport2.ts index 403ea72fa2567..cf446ad9f901d 100644 --- a/tests/cases/fourslash/server/pasteEdits_namespaceImport2.ts +++ b/tests/cases/fourslash/server/pasteEdits_namespaceImport2.ts @@ -50,7 +50,8 @@ console.log(abc); function foo(abc: test.abc, def: test.def) { console.log(abc); console.log(def); -}` +} +` } }); From 1347b9f00652a8d988cdc82b23180b83f4b68915 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Mon, 24 Jun 2024 15:30:09 -0700 Subject: [PATCH 03/15] fixing formatting --- src/services/codefixes/importFixes.ts | 6 +++--- src/services/refactors/moveToFile.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index 0181ce063c535..e8f290bfd1bac 100644 --- a/src/services/codefixes/importFixes.ts +++ b/src/services/codefixes/importFixes.ts @@ -283,10 +283,10 @@ function createImportAdderWorker(sourceFile: SourceFile | FutureSourceFile, prog createModuleSpecifierResolutionHost(program, host), ); if (namespacePrefix) { - const info: FixInfo = { + const info: FixInfo = { fix: { kind: ImportFixKind.AddNew, importKind: ImportKind.Namespace, addAsTypeOnly: isTypeOnlyImportDeclaration(referenceImport) ? AddAsTypeOnly.Required : AddAsTypeOnly.NotAllowed, useRequire, moduleSpecifierKind: undefined, moduleSpecifier }, symbolName: namespacePrefix, - errorIdentifierText: undefined + errorIdentifierText: undefined, }; addImport(info); } @@ -310,7 +310,7 @@ function createImportAdderWorker(sourceFile: SourceFile | FutureSourceFile, prog } addImport({ fix, symbolName: localName ?? symbolName, errorIdentifierText: undefined }); } - } + } } function addImportForNonExistentExport(exportName: string, exportingFileName: string, exportKind: ExportKind, exportedMeanings: SymbolFlags, isImportUsageValidAsTypeOnly: boolean) { diff --git a/src/services/refactors/moveToFile.ts b/src/services/refactors/moveToFile.ts index 2cd61b3277c75..276a2d3a3d8b5 100644 --- a/src/services/refactors/moveToFile.ts +++ b/src/services/refactors/moveToFile.ts @@ -1135,7 +1135,7 @@ export function getExistingLocals(sourceFile: SourceFile, statements: readonly S existingLocals.add(skipAlias(symbol, checker)); } } - else if(isNamedImports(declaration.importClause.namedBindings)) { + else if (isNamedImports(declaration.importClause.namedBindings)) { for (const e of declaration.importClause.namedBindings.elements) { const symbol = checker.getSymbolAtLocation(e.propertyName || e.name); if (symbol) { From 45af3f007ad544f3c0fc817378032f91c697152e Mon Sep 17 00:00:00 2001 From: navya9singh Date: Mon, 24 Jun 2024 15:38:31 -0700 Subject: [PATCH 04/15] fixing baselines --- .../tsserver/fourslashServer/pasteEdits_namespaceImport.js | 6 +++--- tests/cases/fourslash/server/pasteEdits_namespaceImport.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport.js index e33a6ce79dbab..78b150a0c6675 100644 --- a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport.js +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport.js @@ -5,7 +5,7 @@ const abc = 10; const def = 20; export interface testInterface { abc: number; - def: number;s + def: number; } //// [/b.ts] @@ -78,7 +78,7 @@ Info seq [hh:mm:ss:mss] Files (6) /lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text /lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text /folder/c.ts SVC-1-0 "" - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;s\n}" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" /b.ts Text-1 "import * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" @@ -258,7 +258,7 @@ Info seq [hh:mm:ss:mss] Files (6) /lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text /lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text /folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;s\n}" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" /b.ts Text-1 "import * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" Info seq [hh:mm:ss:mss] ----------------------------------------------- diff --git a/tests/cases/fourslash/server/pasteEdits_namespaceImport.ts b/tests/cases/fourslash/server/pasteEdits_namespaceImport.ts index 9bcfed418b34a..63b43b023153b 100644 --- a/tests/cases/fourslash/server/pasteEdits_namespaceImport.ts +++ b/tests/cases/fourslash/server/pasteEdits_namespaceImport.ts @@ -9,7 +9,7 @@ //// const def = 20; //// export interface testInterface { //// abc: number; -//// def: number;s +//// def: number; //// } // @Filename: /b.ts From e35b0f743bf3b6766ce38e935e858dbcd39c67d8 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Thu, 27 Jun 2024 11:13:12 -0700 Subject: [PATCH 05/15] Adding more fixes and tests --- src/services/codefixes/importFixes.ts | 72 ++-- src/services/refactors/helpers.ts | 3 +- .../pasteEdits_defaultExport.js | 334 +++++++++++++++++ .../pasteEdits_externalModuleSymbolImport1.js | 339 +++++++++++++++++ .../pasteEdits_externalModuleSymbolImport2.js | 335 +++++++++++++++++ .../pasteEdits_externalModuleSymbolImport3.js | 346 ++++++++++++++++++ .../pasteEdits_externalModuleSymbolImport4.js | 340 +++++++++++++++++ .../server/pasteEdits_defaultExport.ts | 34 ++ ...pasteEdits_externalModuleSymbolImport1.ts} | 0 ...pasteEdits_externalModuleSymbolImport2.ts} | 1 - .../pasteEdits_externalModuleSymbolImport3.ts | 46 +++ .../pasteEdits_externalModuleSymbolImport4.ts | 46 +++ 12 files changed, 1858 insertions(+), 38 deletions(-) create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pasteEdits_defaultExport.js create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport1.js create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport2.js create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport3.js create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport4.js create mode 100644 tests/cases/fourslash/server/pasteEdits_defaultExport.ts rename tests/cases/fourslash/server/{pasteEdits_namespaceImport.ts => pasteEdits_externalModuleSymbolImport1.ts} (100%) rename tests/cases/fourslash/server/{pasteEdits_namespaceImport2.ts => pasteEdits_externalModuleSymbolImport2.ts} (95%) create mode 100644 tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport3.ts create mode 100644 tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport4.ts diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index 9553905ff39f4..2c2914e6fa7a3 100644 --- a/src/services/codefixes/importFixes.ts +++ b/src/services/codefixes/importFixes.ts @@ -227,6 +227,7 @@ export interface ImportAdder { addImportFromExportedSymbol: (exportedSymbol: Symbol, isValidTypeOnlyUseSite?: boolean, referenceImport?: ImportOrRequireAliasDeclaration) => void; addImportForNonExistentExport: (exportName: string, exportingFileName: string, exportKind: ExportKind, exportedMeanings: SymbolFlags, isImportUsageValidAsTypeOnly: boolean) => void; addImportForUnresolvedIdentifier: (context: CodeFixContextBase, symbolToken: Identifier, useAutoImportProvider: boolean) => void; + addImportForExternalModuleSymbol: (symbol: Symbol, originalSymbol: Symbol, isValidTypeOnlyUseSite: boolean) => void; addVerbatimImport: (declaration: AnyImportOrRequireStatement | ImportOrRequireAliasDeclaration) => void; removeExistingImport: (declaration: ImportOrRequireAliasDeclaration) => void; writeFixes: (changeTracker: textChanges.ChangeTracker, oldFileQuotePreference?: QuotePreference) => void; @@ -255,7 +256,7 @@ function createImportAdderWorker(sourceFile: SourceFile | FutureSourceFile, prog type NewImportsKey = `${0 | 1}|${string}`; /** Use `getNewImportEntry` for access */ const newImports = new Map>(); - return { addImportFromDiagnostic, addImportFromExportedSymbol, writeFixes, hasFixes, addImportForUnresolvedIdentifier, addImportForNonExistentExport, removeExistingImport, addVerbatimImport }; + return { addImportFromDiagnostic, addImportFromExportedSymbol, writeFixes, hasFixes, addImportForUnresolvedIdentifier, addImportForNonExistentExport, addImportForExternalModuleSymbol, removeExistingImport, addVerbatimImport }; function addVerbatimImport(declaration: AnyImportOrRequireStatement | ImportOrRequireAliasDeclaration) { verbatimImports.add(declaration); @@ -276,48 +277,29 @@ function createImportAdderWorker(sourceFile: SourceFile | FutureSourceFile, prog function addImportFromExportedSymbol(exportedSymbol: Symbol, isValidTypeOnlyUseSite?: boolean, referenceImport?: ImportOrRequireAliasDeclaration) { const checker = program.getTypeChecker(); const useRequire = shouldUseRequire(sourceFile, program); - if (referenceImport && isNamespaceImport(referenceImport) && exportedSymbol.valueDeclaration) { - const namespacePrefix = getNamespaceLikeImportText(referenceImport.parent.parent); - const moduleSpecifier = moduleSpecifiers.getLocalModuleSpecifierBetweenFileNames( - sourceFile, - exportedSymbol.valueDeclaration.getSourceFile().fileName, - compilerOptions, - createModuleSpecifierResolutionHost(program, host), - ); - if (namespacePrefix) { - const info: FixInfo = { - fix: { kind: ImportFixKind.AddNew, importKind: ImportKind.Namespace, addAsTypeOnly: isTypeOnlyImportDeclaration(referenceImport) ? AddAsTypeOnly.Required : AddAsTypeOnly.NotAllowed, useRequire, moduleSpecifierKind: undefined, moduleSpecifier }, - symbolName: namespacePrefix, - errorIdentifierText: undefined, - }; - addImport(info); - } - } - else { - const moduleSymbol = Debug.checkDefined(exportedSymbol.parent); - const symbolName = getNameForExportedSymbol(exportedSymbol, getEmitScriptTarget(compilerOptions)); - const symbol = checker.getMergedSymbol(skipAlias(exportedSymbol, checker)); - const exportInfo = getAllExportInfoForSymbol(sourceFile, symbol, symbolName, moduleSymbol, /*preferCapitalized*/ false, program, host, preferences, cancellationToken); + const moduleSymbol = Debug.checkDefined(exportedSymbol.parent); + const symbolName = getNameForExportedSymbol(exportedSymbol, getEmitScriptTarget(compilerOptions)); + const symbol = checker.getMergedSymbol(skipAlias(exportedSymbol, checker)); + const exportInfo = getAllExportInfoForSymbol(sourceFile, symbol, symbolName, moduleSymbol, /*preferCapitalized*/ false, program, host, preferences, cancellationToken); if (!exportInfo) { // If no exportInfo is found, this means export could not be resolved when we have filtered for autoImportFileExcludePatterns, // so we should not generate an import. Debug.assert(preferences.autoImportFileExcludePatterns?.length); return; } - let fix = getImportFixForSymbol(sourceFile, exportInfo, program, /*position*/ undefined, !!isValidTypeOnlyUseSite, useRequire, host, preferences); - if (fix) { - const localName = tryCast(referenceImport?.name, isIdentifier)?.text ?? symbolName; - if ( - referenceImport - && isTypeOnlyImportDeclaration(referenceImport) - && (fix.kind === ImportFixKind.AddNew || fix.kind === ImportFixKind.AddToExisting) - && fix.addAsTypeOnly === AddAsTypeOnly.Allowed - ) { - // Copy the type-only status from the reference import - fix = { ...fix, addAsTypeOnly: AddAsTypeOnly.Required }; - } - addImport({ fix, symbolName: localName ?? symbolName, errorIdentifierText: undefined }); + let fix = getImportFixForSymbol(sourceFile, exportInfo, program, /*position*/ undefined, !!isValidTypeOnlyUseSite, useRequire, host, preferences); + if (fix) { + const localName = tryCast(referenceImport?.name, isIdentifier)?.text ?? symbolName; + if ( + referenceImport + && isTypeOnlyImportDeclaration(referenceImport) + && (fix.kind === ImportFixKind.AddNew || fix.kind === ImportFixKind.AddToExisting) + && fix.addAsTypeOnly === AddAsTypeOnly.Allowed + ) { + // Copy the type-only status from the reference import + fix = { ...fix, addAsTypeOnly: AddAsTypeOnly.Required }; } + addImport({ fix, symbolName: localName ?? symbolName, errorIdentifierText: undefined }); } } @@ -375,6 +357,24 @@ function createImportAdderWorker(sourceFile: SourceFile | FutureSourceFile, prog } } + function addImportForExternalModuleSymbol(symbol: Symbol, originalSymbol: Symbol, isValidTypeOnlyUseSite: boolean) { + const useRequire = shouldUseRequire(sourceFile, program); + if (originalSymbol.valueDeclaration) { + const moduleSpecifier = moduleSpecifiers.getLocalModuleSpecifierBetweenFileNames( + sourceFile, + originalSymbol.valueDeclaration.getSourceFile().fileName, + compilerOptions, + createModuleSpecifierResolutionHost(program, host), + ); + const info: FixInfo = { + fix: { kind: ImportFixKind.AddNew, importKind: ImportKind.Namespace, addAsTypeOnly: isValidTypeOnlyUseSite ? AddAsTypeOnly.Allowed : AddAsTypeOnly.NotAllowed, useRequire, moduleSpecifierKind: undefined, moduleSpecifier }, + symbolName: symbol.name, + errorIdentifierText: undefined, + }; + addImport(info); + } + } + function removeExistingImport(declaration: ImportOrRequireAliasDeclaration) { if (declaration.kind === SyntaxKind.ImportClause) { Debug.assertIsDefined(declaration.name, "ImportClause should have a name if it's being removed"); diff --git a/src/services/refactors/helpers.ts b/src/services/refactors/helpers.ts index 459979c3ef0dc..b7e94d0d3c72c 100644 --- a/src/services/refactors/helpers.ts +++ b/src/services/refactors/helpers.ts @@ -8,6 +8,7 @@ import { identifierToKeywordKind, isAnyImportOrRequireStatement, isClassLike, + isExternalModuleSymbol, isPrivateIdentifier, isPropertyAccessExpression, ModuleBlock, @@ -81,7 +82,7 @@ export function addTargetFileImports( importAdder.addVerbatimImport(Debug.checkDefined(declaration ?? findAncestor(symbol.declarations?.[0], isAnyImportOrRequireStatement))); } else { - importAdder.addImportFromExportedSymbol(targetSymbol, isValidTypeOnlyUseSite, declaration); + isExternalModuleSymbol(targetSymbol) ? importAdder.addImportForExternalModuleSymbol(symbol, targetSymbol, isValidTypeOnlyUseSite) : importAdder.addImportFromExportedSymbol(targetSymbol, isValidTypeOnlyUseSite, declaration); } }); diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_defaultExport.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_defaultExport.js new file mode 100644 index 0000000000000..684b6f0ede000 --- /dev/null +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_defaultExport.js @@ -0,0 +1,334 @@ +currentDirectory:: / useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +//// [/a.ts] +export default function foo(name: string): void { + console.log(name); +} + +//// [/b.ts] +import foo from "./a"; +foo("bar"); + +//// [/folder/c.ts] + + + +//// [/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 + +//// [/tsconfig.json] +{ "files": ["/folder/c.ts", "a.ts", "b.ts"] } + + +Info seq [hh:mm:ss:mss] request: + { + "seq": 0, + "type": "request", + "arguments": { + "file": "/folder/c.ts" + }, + "command": "open" + } +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/tsconfig.json", + "reason": "Creating possible configured project for /folder/c.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { + "rootNames": [ + "/folder/c.ts", + "/a.ts", + "/b.ts" + ], + "options": { + "configFilePath": "/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +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] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + /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 + /folder/c.ts SVC-1-0 "\n" + /a.ts Text-1 "export default function foo(name: string): void {\n console.log(name);\n}" + /b.ts Text-1 "import foo from \"./a\";\nfoo(\"bar\");" + + + 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' + folder/c.ts + Part of 'files' list in tsconfig.json + a.ts + Part of 'files' list in tsconfig.json + Imported via "./a" from file 'b.ts' + b.ts + Part of 'files' list in tsconfig.json + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/folder/c.ts", + "configFile": "/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /tsconfig.json +After Request +watchedFiles:: +/a.ts: *new* + {"pollingInterval":500} +/b.ts: *new* + {"pollingInterval":500} +/lib.d.ts: *new* + {"pollingInterval":500} +/lib.decorators.d.ts: *new* + {"pollingInterval":500} +/lib.decorators.legacy.d.ts: *new* + {"pollingInterval":500} +/tsconfig.json: *new* + {"pollingInterval":2000} + +Projects:: +/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/b.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/folder/c.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /tsconfig.json *default* +/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.legacy.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json + +Info seq [hh:mm:ss:mss] request: + { + "seq": 1, + "type": "request", + "arguments": { + "formatOptions": { + "indentSize": 4, + "tabSize": 4, + "newLineCharacter": "\n", + "convertTabsToSpaces": true, + "indentStyle": 2, + "insertSpaceAfterConstructor": false, + "insertSpaceAfterCommaDelimiter": true, + "insertSpaceAfterSemicolonInForStatements": true, + "insertSpaceBeforeAndAfterBinaryOperators": true, + "insertSpaceAfterKeywordsInControlFlowStatements": true, + "insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": true, + "insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false, + "insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false, + "insertSpaceBeforeFunctionParenthesis": false, + "placeOpenBraceOnNewLineForFunctions": false, + "placeOpenBraceOnNewLineForControlBlocks": false, + "semicolons": "ignore", + "trimTrailingWhitespace": true, + "indentSwitchCase": true + } + }, + "command": "configure" + } +Info seq [hh:mm:ss:mss] Format host information updated +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "configure", + "request_seq": 1, + "success": true + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 2, + "type": "request", + "arguments": { + "file": "/folder/c.ts", + "pastedText": [ + "foo(\"bar\");" + ], + "pasteLocations": [ + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + } + } + ], + "copiedFrom": { + "file": "b.ts", + "spans": [ + { + "start": { + "line": 2, + "offset": 1 + }, + "end": { + "line": 2, + "offset": 12 + } + } + ] + } + }, + "command": "getPasteEdits" + } +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + /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 + /folder/c.ts SVC-1-1 "foo(\"bar\");\n\n" + /a.ts Text-1 "export default function foo(name: string): void {\n console.log(name);\n}" + /b.ts Text-1 "import foo from \"./a\";\nfoo(\"bar\");" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] getExportInfoMap: cache miss or empty; calculating new results +Info seq [hh:mm:ss:mss] getExportInfoMap: done in * ms +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "getPasteEdits", + "request_seq": 2, + "success": true, + "performanceData": { + "updateGraphDurationMs": * + }, + "body": { + "edits": [ + { + "fileName": "/folder/c.ts", + "textChanges": [ + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + }, + "newText": "import foo from \"../a\";\n\n" + }, + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + }, + "newText": "foo(\"bar\");" + } + ] + } + ], + "fixId": "providePostPasteEdits" + } + } +After Request +Projects:: +/tsconfig.json (Configured) *changed* + projectStateVersion: 3 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/b.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/folder/c.ts (Open) *changed* + version: SVC-1-2 *changed* + containingProjects: 1 + /tsconfig.json *default* +/lib.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.legacy.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport1.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport1.js new file mode 100644 index 0000000000000..78b150a0c6675 --- /dev/null +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport1.js @@ -0,0 +1,339 @@ +currentDirectory:: / useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +//// [/a.ts] +const abc = 10; +const def = 20; +export interface testInterface { + abc: number; + def: number; +} + +//// [/b.ts] +import * as test from "./a"; + +function foo(abc: test.testInterface, def: test.testInterface) { + console.log(abc); + console.log(def); +} + + +//// [/folder/c.ts] + + +//// [/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 + +//// [/tsconfig.json] +{ "files": ["/folder/c.ts", "a.ts", "b.ts"] } + + +Info seq [hh:mm:ss:mss] request: + { + "seq": 0, + "type": "request", + "arguments": { + "file": "/folder/c.ts" + }, + "command": "open" + } +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/tsconfig.json", + "reason": "Creating possible configured project for /folder/c.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { + "rootNames": [ + "/folder/c.ts", + "/a.ts", + "/b.ts" + ], + "options": { + "configFilePath": "/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +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] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + /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 + /folder/c.ts SVC-1-0 "" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /b.ts Text-1 "import * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\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' + folder/c.ts + Part of 'files' list in tsconfig.json + a.ts + Part of 'files' list in tsconfig.json + Imported via "./a" from file 'b.ts' + b.ts + Part of 'files' list in tsconfig.json + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/folder/c.ts", + "configFile": "/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /tsconfig.json +After Request +watchedFiles:: +/a.ts: *new* + {"pollingInterval":500} +/b.ts: *new* + {"pollingInterval":500} +/lib.d.ts: *new* + {"pollingInterval":500} +/lib.decorators.d.ts: *new* + {"pollingInterval":500} +/lib.decorators.legacy.d.ts: *new* + {"pollingInterval":500} +/tsconfig.json: *new* + {"pollingInterval":2000} + +Projects:: +/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/b.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/folder/c.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /tsconfig.json *default* +/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.legacy.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json + +Info seq [hh:mm:ss:mss] request: + { + "seq": 1, + "type": "request", + "arguments": { + "formatOptions": { + "indentSize": 4, + "tabSize": 4, + "newLineCharacter": "\n", + "convertTabsToSpaces": true, + "indentStyle": 2, + "insertSpaceAfterConstructor": false, + "insertSpaceAfterCommaDelimiter": true, + "insertSpaceAfterSemicolonInForStatements": true, + "insertSpaceBeforeAndAfterBinaryOperators": true, + "insertSpaceAfterKeywordsInControlFlowStatements": true, + "insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": true, + "insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false, + "insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false, + "insertSpaceBeforeFunctionParenthesis": false, + "placeOpenBraceOnNewLineForFunctions": false, + "placeOpenBraceOnNewLineForControlBlocks": false, + "semicolons": "ignore", + "trimTrailingWhitespace": true, + "indentSwitchCase": true + } + }, + "command": "configure" + } +Info seq [hh:mm:ss:mss] Format host information updated +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "configure", + "request_seq": 1, + "success": true + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 2, + "type": "request", + "arguments": { + "file": "/folder/c.ts", + "pastedText": [ + "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + ], + "pasteLocations": [ + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + } + } + ], + "copiedFrom": { + "file": "b.ts", + "spans": [ + { + "start": { + "line": 3, + "offset": 1 + }, + "end": { + "line": 6, + "offset": 2 + } + } + ] + } + }, + "command": "getPasteEdits" + } +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + /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 + /folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /b.ts Text-1 "import * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "getPasteEdits", + "request_seq": 2, + "success": true, + "performanceData": { + "updateGraphDurationMs": * + }, + "body": { + "edits": [ + { + "fileName": "/folder/c.ts", + "textChanges": [ + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + }, + "newText": "import * as test from \"../a\";\n\n" + }, + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + }, + "newText": "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + } + ] + } + ], + "fixId": "providePostPasteEdits" + } + } +After Request +Projects:: +/tsconfig.json (Configured) *changed* + projectStateVersion: 3 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/b.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/folder/c.ts (Open) *changed* + version: SVC-1-2 *changed* + containingProjects: 1 + /tsconfig.json *default* +/lib.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.legacy.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport2.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport2.js new file mode 100644 index 0000000000000..9d3c98e61c02c --- /dev/null +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport2.js @@ -0,0 +1,335 @@ +currentDirectory:: / useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +//// [/a.ts] +const abc = 10; +const def = 20; +export interface testInterface { + abc: number; + def: number; +} + +//// [/b.ts] +import type * as test from "./a"; + +function foo(abc: test.testInterface, def: test.testInterface) { + console.log(abc); + console.log(def); +} + + +//// [/folder/c.ts] +import type * as test from "../a"; + +function foo(abc: test.abc, def: test.def) { +console.log(abc); +} + + + +//// [/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 + +//// [/tsconfig.json] +{ "files": ["/folder/c.ts", "a.ts", "b.ts"] } + + +Info seq [hh:mm:ss:mss] request: + { + "seq": 0, + "type": "request", + "arguments": { + "file": "/folder/c.ts" + }, + "command": "open" + } +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/tsconfig.json", + "reason": "Creating possible configured project for /folder/c.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { + "rootNames": [ + "/folder/c.ts", + "/a.ts", + "/b.ts" + ], + "options": { + "configFilePath": "/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +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] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + /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 + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /folder/c.ts SVC-1-0 "import type * as test from \"../a\";\n\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\n}\n\n" + /b.ts Text-1 "import type * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\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' + a.ts + Imported via "../a" from file 'folder/c.ts' + Part of 'files' list in tsconfig.json + Imported via "./a" from file 'b.ts' + folder/c.ts + Part of 'files' list in tsconfig.json + b.ts + Part of 'files' list in tsconfig.json + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/folder/c.ts", + "configFile": "/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /tsconfig.json +After Request +watchedFiles:: +/a.ts: *new* + {"pollingInterval":500} +/b.ts: *new* + {"pollingInterval":500} +/lib.d.ts: *new* + {"pollingInterval":500} +/lib.decorators.d.ts: *new* + {"pollingInterval":500} +/lib.decorators.legacy.d.ts: *new* + {"pollingInterval":500} +/tsconfig.json: *new* + {"pollingInterval":2000} + +Projects:: +/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/b.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/folder/c.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /tsconfig.json *default* +/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.legacy.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json + +Info seq [hh:mm:ss:mss] request: + { + "seq": 1, + "type": "request", + "arguments": { + "formatOptions": { + "indentSize": 4, + "tabSize": 4, + "newLineCharacter": "\n", + "convertTabsToSpaces": true, + "indentStyle": 2, + "insertSpaceAfterConstructor": false, + "insertSpaceAfterCommaDelimiter": true, + "insertSpaceAfterSemicolonInForStatements": true, + "insertSpaceBeforeAndAfterBinaryOperators": true, + "insertSpaceAfterKeywordsInControlFlowStatements": true, + "insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": true, + "insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false, + "insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false, + "insertSpaceBeforeFunctionParenthesis": false, + "placeOpenBraceOnNewLineForFunctions": false, + "placeOpenBraceOnNewLineForControlBlocks": false, + "semicolons": "ignore", + "trimTrailingWhitespace": true, + "indentSwitchCase": true + } + }, + "command": "configure" + } +Info seq [hh:mm:ss:mss] Format host information updated +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "configure", + "request_seq": 1, + "success": true + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 2, + "type": "request", + "arguments": { + "file": "/folder/c.ts", + "pastedText": [ + "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + ], + "pasteLocations": [ + { + "start": { + "line": 6, + "offset": 1 + }, + "end": { + "line": 6, + "offset": 1 + } + } + ], + "copiedFrom": { + "file": "b.ts", + "spans": [ + { + "start": { + "line": 3, + "offset": 1 + }, + "end": { + "line": 6, + "offset": 2 + } + } + ] + } + }, + "command": "getPasteEdits" + } +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + /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 + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /folder/c.ts SVC-1-1 "import type * as test from \"../a\";\n\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\n}\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}\n" + /b.ts Text-1 "import type * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "getPasteEdits", + "request_seq": 2, + "success": true, + "performanceData": { + "updateGraphDurationMs": * + }, + "body": { + "edits": [ + { + "fileName": "/folder/c.ts", + "textChanges": [ + { + "start": { + "line": 6, + "offset": 1 + }, + "end": { + "line": 6, + "offset": 1 + }, + "newText": "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + } + ] + } + ], + "fixId": "providePostPasteEdits" + } + } +After Request +Projects:: +/tsconfig.json (Configured) *changed* + projectStateVersion: 3 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/b.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/folder/c.ts (Open) *changed* + version: SVC-1-2 *changed* + containingProjects: 1 + /tsconfig.json *default* +/lib.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.legacy.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport3.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport3.js new file mode 100644 index 0000000000000..0f45298a066e8 --- /dev/null +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport3.js @@ -0,0 +1,346 @@ +currentDirectory:: / useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +//// [/a.ts] +const abc = 10; +const def = 20; +export interface testInterface { + abc: number; + def: number; +} + +//// [/b.mts] +import test from "./a.js"; + +function foo(abc: test.testInterface, def: test.testInterface) { + console.log(abc); + console.log(def); +} + + +//// [/folder/c.ts] + + +//// [/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 + +//// [/tsconfig.json] +{ "compilerOptions": { "module": "nodenext" }, "files": ["/folder/c.ts", "a.ts", "b.mts"] } + + +Info seq [hh:mm:ss:mss] request: + { + "seq": 0, + "type": "request", + "arguments": { + "file": "/folder/c.ts" + }, + "command": "open" + } +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/tsconfig.json", + "reason": "Creating possible configured project for /folder/c.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { + "rootNames": [ + "/folder/c.ts", + "/a.ts", + "/b.mts" + ], + "options": { + "module": 199, + "configFilePath": "/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.mts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.esnext.full.d.ts 500 undefined Project: /tsconfig.json WatchType: Missing file +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (3) + /folder/c.ts SVC-1-0 "" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /b.mts Text-1 "import test from \"./a.js\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + + + folder/c.ts + Part of 'files' list in tsconfig.json + File is CommonJS module because 'package.json' was not found + a.ts + Part of 'files' list in tsconfig.json + Imported via "./a.js" from file 'b.mts' + File is CommonJS module because 'package.json' was not found + b.mts + Part of 'files' list in tsconfig.json + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/folder/c.ts", + "configFile": "/tsconfig.json", + "diagnostics": [ + { + "text": "File '/lib.esnext.full.d.ts' not found.\n The file is in the program because:\n Default library for target 'esnext'", + "code": 6053, + "category": "error" + }, + { + "text": "Cannot find global type 'Array'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'Boolean'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'Function'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'IArguments'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'Number'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'Object'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'RegExp'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'String'.", + "code": 2318, + "category": "error" + } + ] + } + } +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (3) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /tsconfig.json +After Request +watchedFiles:: +/a.ts: *new* + {"pollingInterval":500} +/b.mts: *new* + {"pollingInterval":500} +/lib.esnext.full.d.ts: *new* + {"pollingInterval":500} +/tsconfig.json: *new* + {"pollingInterval":2000} + +Projects:: +/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/b.mts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/folder/c.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /tsconfig.json *default* + +Info seq [hh:mm:ss:mss] request: + { + "seq": 1, + "type": "request", + "arguments": { + "formatOptions": { + "indentSize": 4, + "tabSize": 4, + "newLineCharacter": "\n", + "convertTabsToSpaces": true, + "indentStyle": 2, + "insertSpaceAfterConstructor": false, + "insertSpaceAfterCommaDelimiter": true, + "insertSpaceAfterSemicolonInForStatements": true, + "insertSpaceBeforeAndAfterBinaryOperators": true, + "insertSpaceAfterKeywordsInControlFlowStatements": true, + "insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": true, + "insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false, + "insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false, + "insertSpaceBeforeFunctionParenthesis": false, + "placeOpenBraceOnNewLineForFunctions": false, + "placeOpenBraceOnNewLineForControlBlocks": false, + "semicolons": "ignore", + "trimTrailingWhitespace": true, + "indentSwitchCase": true + } + }, + "command": "configure" + } +Info seq [hh:mm:ss:mss] Format host information updated +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "configure", + "request_seq": 1, + "success": true + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 2, + "type": "request", + "arguments": { + "file": "/folder/c.ts", + "pastedText": [ + "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + ], + "pasteLocations": [ + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + } + } + ], + "copiedFrom": { + "file": "b.mts", + "spans": [ + { + "start": { + "line": 3, + "offset": 1 + }, + "end": { + "line": 6, + "offset": 2 + } + } + ] + } + }, + "command": "getPasteEdits" + } +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (3) + /folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /b.mts Text-1 "import test from \"./a.js\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "getPasteEdits", + "request_seq": 2, + "success": true, + "performanceData": { + "updateGraphDurationMs": * + }, + "body": { + "edits": [ + { + "fileName": "/folder/c.ts", + "textChanges": [ + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + }, + "newText": "import * as test from \"../a\";\n\n" + }, + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + }, + "newText": "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + } + ] + } + ], + "fixId": "providePostPasteEdits" + } + } +After Request +Projects:: +/tsconfig.json (Configured) *changed* + projectStateVersion: 3 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/b.mts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/folder/c.ts (Open) *changed* + version: SVC-1-2 *changed* + containingProjects: 1 + /tsconfig.json *default* diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport4.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport4.js new file mode 100644 index 0000000000000..de49a02459f71 --- /dev/null +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport4.js @@ -0,0 +1,340 @@ +currentDirectory:: / useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +//// [/a.ts] +const abc = 10; +const def = 20; +export interface testInterface { + abc: number; + def: number; +} + +//// [/b.ts] +import test = require("./a"); + +function foo(abc: test.testInterface, def: test.testInterface) { + console.log(abc); + console.log(def); +} + + +//// [/folder/c.ts] + + +//// [/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 + +//// [/tsconfig.json] +{ "compilerOptions": { "module": "commonjs" }, "files": ["/folder/c.ts", "a.ts", "b.ts"] } + + +Info seq [hh:mm:ss:mss] request: + { + "seq": 0, + "type": "request", + "arguments": { + "file": "/folder/c.ts" + }, + "command": "open" + } +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/tsconfig.json", + "reason": "Creating possible configured project for /folder/c.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { + "rootNames": [ + "/folder/c.ts", + "/a.ts", + "/b.ts" + ], + "options": { + "module": 1, + "configFilePath": "/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +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] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + /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 + /folder/c.ts SVC-1-0 "" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /b.ts Text-1 "import test = require(\"./a\");\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\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' + folder/c.ts + Part of 'files' list in tsconfig.json + a.ts + Part of 'files' list in tsconfig.json + Imported via "./a" from file 'b.ts' + b.ts + Part of 'files' list in tsconfig.json + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/folder/c.ts", + "configFile": "/tsconfig.json", + "diagnostics": [] + } + } +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /tsconfig.json +After Request +watchedFiles:: +/a.ts: *new* + {"pollingInterval":500} +/b.ts: *new* + {"pollingInterval":500} +/lib.d.ts: *new* + {"pollingInterval":500} +/lib.decorators.d.ts: *new* + {"pollingInterval":500} +/lib.decorators.legacy.d.ts: *new* + {"pollingInterval":500} +/tsconfig.json: *new* + {"pollingInterval":2000} + +Projects:: +/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/b.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/folder/c.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /tsconfig.json *default* +/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.legacy.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json + +Info seq [hh:mm:ss:mss] request: + { + "seq": 1, + "type": "request", + "arguments": { + "formatOptions": { + "indentSize": 4, + "tabSize": 4, + "newLineCharacter": "\n", + "convertTabsToSpaces": true, + "indentStyle": 2, + "insertSpaceAfterConstructor": false, + "insertSpaceAfterCommaDelimiter": true, + "insertSpaceAfterSemicolonInForStatements": true, + "insertSpaceBeforeAndAfterBinaryOperators": true, + "insertSpaceAfterKeywordsInControlFlowStatements": true, + "insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": true, + "insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false, + "insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false, + "insertSpaceBeforeFunctionParenthesis": false, + "placeOpenBraceOnNewLineForFunctions": false, + "placeOpenBraceOnNewLineForControlBlocks": false, + "semicolons": "ignore", + "trimTrailingWhitespace": true, + "indentSwitchCase": true + } + }, + "command": "configure" + } +Info seq [hh:mm:ss:mss] Format host information updated +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "configure", + "request_seq": 1, + "success": true + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 2, + "type": "request", + "arguments": { + "file": "/folder/c.ts", + "pastedText": [ + "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + ], + "pasteLocations": [ + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + } + } + ], + "copiedFrom": { + "file": "b.ts", + "spans": [ + { + "start": { + "line": 3, + "offset": 1 + }, + "end": { + "line": 6, + "offset": 2 + } + } + ] + } + }, + "command": "getPasteEdits" + } +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + /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 + /folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /b.ts Text-1 "import test = require(\"./a\");\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "getPasteEdits", + "request_seq": 2, + "success": true, + "performanceData": { + "updateGraphDurationMs": * + }, + "body": { + "edits": [ + { + "fileName": "/folder/c.ts", + "textChanges": [ + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + }, + "newText": "import * as test from \"../a\";\n\n" + }, + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + }, + "newText": "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + } + ] + } + ], + "fixId": "providePostPasteEdits" + } + } +After Request +Projects:: +/tsconfig.json (Configured) *changed* + projectStateVersion: 3 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/b.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/folder/c.ts (Open) *changed* + version: SVC-1-2 *changed* + containingProjects: 1 + /tsconfig.json *default* +/lib.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.legacy.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json diff --git a/tests/cases/fourslash/server/pasteEdits_defaultExport.ts b/tests/cases/fourslash/server/pasteEdits_defaultExport.ts new file mode 100644 index 0000000000000..3839bc6a08e2f --- /dev/null +++ b/tests/cases/fourslash/server/pasteEdits_defaultExport.ts @@ -0,0 +1,34 @@ +/// + +// @Filename: /folder/c.ts +//// [||] +//// + +// @Filename: /a.ts +//// export default function foo(name: string): void { +//// console.log(name); +//// } + +// @Filename: /b.ts +//// import foo from "./a"; +//// [|foo("bar");|] + +// @Filename: /tsconfig.json +////{ "files": ["/folder/c.ts", "a.ts", "b.ts"] } + +const range = test.ranges(); +verify.pasteEdits({ + args: { + pastedText: [`foo("bar");`], + pasteLocations: [range[0]], + copiedFrom: { file: "b.ts", range: [range[1]] }, + }, + newFileContents: { + "/folder/c.ts": +`import foo from "../a"; + +foo("bar"); +` + } +}); + diff --git a/tests/cases/fourslash/server/pasteEdits_namespaceImport.ts b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport1.ts similarity index 100% rename from tests/cases/fourslash/server/pasteEdits_namespaceImport.ts rename to tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport1.ts diff --git a/tests/cases/fourslash/server/pasteEdits_namespaceImport2.ts b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport2.ts similarity index 95% rename from tests/cases/fourslash/server/pasteEdits_namespaceImport2.ts rename to tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport2.ts index cf446ad9f901d..6190112c24a45 100644 --- a/tests/cases/fourslash/server/pasteEdits_namespaceImport2.ts +++ b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport2.ts @@ -9,7 +9,6 @@ //// [||] //// - // @Filename: /a.ts //// const abc = 10; //// const def = 20; diff --git a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport3.ts b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport3.ts new file mode 100644 index 0000000000000..9fb210df806e9 --- /dev/null +++ b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport3.ts @@ -0,0 +1,46 @@ +/// + +// @Filename: /folder/c.ts +//// [||] + + +// @Filename: /a.ts +//// const abc = 10; +//// const def = 20; +//// export interface testInterface { +//// abc: number; +//// def: number; +//// } + +// @Filename: /b.mts +//// import test from "./a.js"; +//// +//// [|function foo(abc: test.testInterface, def: test.testInterface) { +//// console.log(abc); +//// console.log(def); +//// }|] +//// + +// @Filename: /tsconfig.json +////{ "compilerOptions": { "module": "nodenext" }, "files": ["/folder/c.ts", "a.ts", "b.mts"] } + +const range = test.ranges(); +verify.pasteEdits({ + args: { + pastedText: [`function foo(abc: test.abc, def: test.def) { +console.log(abc); +console.log(def); +}`], + pasteLocations: [range[0]], + copiedFrom: { file: "b.mts", range: [range[1]] }, + }, + newFileContents: { + "/folder/c.ts": +`import * as test from "../a"; + +function foo(abc: test.abc, def: test.def) { +console.log(abc); +console.log(def); +}` + } +}); diff --git a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport4.ts b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport4.ts new file mode 100644 index 0000000000000..1238634168eb0 --- /dev/null +++ b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport4.ts @@ -0,0 +1,46 @@ +/// + +// @Filename: /folder/c.ts +//// [||] + +// @Filename: /a.ts +//// const abc = 10; +//// const def = 20; +//// export interface testInterface { +//// abc: number; +//// def: number; +//// } + +// @Filename: /b.ts +//// import test = require("./a"); +//// +//// [|function foo(abc: test.testInterface, def: test.testInterface) { +//// console.log(abc); +//// console.log(def); +//// }|] +//// + +// @Filename: /tsconfig.json +////{ "compilerOptions": { "module": "commonjs" }, "files": ["/folder/c.ts", "a.ts", "b.ts"] } + +const range = test.ranges(); +verify.pasteEdits({ + args: { + pastedText: [`function foo(abc: test.abc, def: test.def) { +console.log(abc); +console.log(def); +}`], + pasteLocations: [range[0]], + copiedFrom: { file: "b.ts", range: [range[1]] }, + }, + newFileContents: { + "/folder/c.ts": +`import * as test from "../a"; + +function foo(abc: test.abc, def: test.def) { +console.log(abc); +console.log(def); +}` + } +}); + From c0aaae444f1c04077239d536f461dc909e38f5d6 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Thu, 27 Jun 2024 11:29:44 -0700 Subject: [PATCH 06/15] Removing previous changes --- src/services/codefixes/importFixes.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index 2c2914e6fa7a3..f911a8ff34972 100644 --- a/src/services/codefixes/importFixes.ts +++ b/src/services/codefixes/importFixes.ts @@ -275,10 +275,9 @@ function createImportAdderWorker(sourceFile: SourceFile | FutureSourceFile, prog } function addImportFromExportedSymbol(exportedSymbol: Symbol, isValidTypeOnlyUseSite?: boolean, referenceImport?: ImportOrRequireAliasDeclaration) { - const checker = program.getTypeChecker(); - const useRequire = shouldUseRequire(sourceFile, program); const moduleSymbol = Debug.checkDefined(exportedSymbol.parent); const symbolName = getNameForExportedSymbol(exportedSymbol, getEmitScriptTarget(compilerOptions)); + const checker = program.getTypeChecker(); const symbol = checker.getMergedSymbol(skipAlias(exportedSymbol, checker)); const exportInfo = getAllExportInfoForSymbol(sourceFile, symbol, symbolName, moduleSymbol, /*preferCapitalized*/ false, program, host, preferences, cancellationToken); if (!exportInfo) { @@ -287,6 +286,7 @@ function createImportAdderWorker(sourceFile: SourceFile | FutureSourceFile, prog Debug.assert(preferences.autoImportFileExcludePatterns?.length); return; } + const useRequire = shouldUseRequire(sourceFile, program); let fix = getImportFixForSymbol(sourceFile, exportInfo, program, /*position*/ undefined, !!isValidTypeOnlyUseSite, useRequire, host, preferences); if (fix) { const localName = tryCast(referenceImport?.name, isIdentifier)?.text ?? symbolName; From dc452e8b7fde844ae1ea73fbdad774c16574d277 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Thu, 27 Jun 2024 11:32:17 -0700 Subject: [PATCH 07/15] deleting old baselines --- .../pasteEdits_namespaceImport.js | 339 ------------------ .../pasteEdits_namespaceImport2.js | 335 ----------------- 2 files changed, 674 deletions(-) delete mode 100644 tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport.js delete mode 100644 tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport2.js diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport.js deleted file mode 100644 index 78b150a0c6675..0000000000000 --- a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport.js +++ /dev/null @@ -1,339 +0,0 @@ -currentDirectory:: / useCaseSensitiveFileNames: false -Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist -//// [/a.ts] -const abc = 10; -const def = 20; -export interface testInterface { - abc: number; - def: number; -} - -//// [/b.ts] -import * as test from "./a"; - -function foo(abc: test.testInterface, def: test.testInterface) { - console.log(abc); - console.log(def); -} - - -//// [/folder/c.ts] - - -//// [/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 - -//// [/tsconfig.json] -{ "files": ["/folder/c.ts", "a.ts", "b.ts"] } - - -Info seq [hh:mm:ss:mss] request: - { - "seq": 0, - "type": "request", - "arguments": { - "file": "/folder/c.ts" - }, - "command": "open" - } -Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json -Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file -Info seq [hh:mm:ss:mss] event: - { - "seq": 0, - "type": "event", - "event": "projectLoadingStart", - "body": { - "projectName": "/tsconfig.json", - "reason": "Creating possible configured project for /folder/c.ts to open" - } - } -Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { - "rootNames": [ - "/folder/c.ts", - "/a.ts", - "/b.ts" - ], - "options": { - "configFilePath": "/tsconfig.json" - } -} -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json -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] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (6) - /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 - /folder/c.ts SVC-1-0 "" - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /b.ts Text-1 "import * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\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' - folder/c.ts - Part of 'files' list in tsconfig.json - a.ts - Part of 'files' list in tsconfig.json - Imported via "./a" from file 'b.ts' - b.ts - Part of 'files' list in tsconfig.json - -Info seq [hh:mm:ss:mss] ----------------------------------------------- -Info seq [hh:mm:ss:mss] event: - { - "seq": 0, - "type": "event", - "event": "projectLoadingFinish", - "body": { - "projectName": "/tsconfig.json" - } - } -Info seq [hh:mm:ss:mss] event: - { - "seq": 0, - "type": "event", - "event": "configFileDiag", - "body": { - "triggerFile": "/folder/c.ts", - "configFile": "/tsconfig.json", - "diagnostics": [] - } - } -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (6) - -Info seq [hh:mm:ss:mss] ----------------------------------------------- -Info seq [hh:mm:ss:mss] Open files: -Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined -Info seq [hh:mm:ss:mss] Projects: /tsconfig.json -After Request -watchedFiles:: -/a.ts: *new* - {"pollingInterval":500} -/b.ts: *new* - {"pollingInterval":500} -/lib.d.ts: *new* - {"pollingInterval":500} -/lib.decorators.d.ts: *new* - {"pollingInterval":500} -/lib.decorators.legacy.d.ts: *new* - {"pollingInterval":500} -/tsconfig.json: *new* - {"pollingInterval":2000} - -Projects:: -/tsconfig.json (Configured) *new* - projectStateVersion: 1 - projectProgramVersion: 1 - -ScriptInfos:: -/a.ts *new* - version: Text-1 - containingProjects: 1 - /tsconfig.json -/b.ts *new* - version: Text-1 - containingProjects: 1 - /tsconfig.json -/folder/c.ts (Open) *new* - version: SVC-1-0 - containingProjects: 1 - /tsconfig.json *default* -/lib.d.ts *new* - version: Text-1 - containingProjects: 1 - /tsconfig.json -/lib.decorators.d.ts *new* - version: Text-1 - containingProjects: 1 - /tsconfig.json -/lib.decorators.legacy.d.ts *new* - version: Text-1 - containingProjects: 1 - /tsconfig.json - -Info seq [hh:mm:ss:mss] request: - { - "seq": 1, - "type": "request", - "arguments": { - "formatOptions": { - "indentSize": 4, - "tabSize": 4, - "newLineCharacter": "\n", - "convertTabsToSpaces": true, - "indentStyle": 2, - "insertSpaceAfterConstructor": false, - "insertSpaceAfterCommaDelimiter": true, - "insertSpaceAfterSemicolonInForStatements": true, - "insertSpaceBeforeAndAfterBinaryOperators": true, - "insertSpaceAfterKeywordsInControlFlowStatements": true, - "insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, - "insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, - "insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, - "insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": true, - "insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false, - "insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false, - "insertSpaceBeforeFunctionParenthesis": false, - "placeOpenBraceOnNewLineForFunctions": false, - "placeOpenBraceOnNewLineForControlBlocks": false, - "semicolons": "ignore", - "trimTrailingWhitespace": true, - "indentSwitchCase": true - } - }, - "command": "configure" - } -Info seq [hh:mm:ss:mss] Format host information updated -Info seq [hh:mm:ss:mss] response: - { - "seq": 0, - "type": "response", - "command": "configure", - "request_seq": 1, - "success": true - } -Info seq [hh:mm:ss:mss] request: - { - "seq": 2, - "type": "request", - "arguments": { - "file": "/folder/c.ts", - "pastedText": [ - "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - ], - "pasteLocations": [ - { - "start": { - "line": 1, - "offset": 1 - }, - "end": { - "line": 1, - "offset": 1 - } - } - ], - "copiedFrom": { - "file": "b.ts", - "spans": [ - { - "start": { - "line": 3, - "offset": 1 - }, - "end": { - "line": 6, - "offset": 2 - } - } - ] - } - }, - "command": "getPasteEdits" - } -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json -Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (6) - /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 - /folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /b.ts Text-1 "import * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" - -Info seq [hh:mm:ss:mss] ----------------------------------------------- -Info seq [hh:mm:ss:mss] response: - { - "seq": 0, - "type": "response", - "command": "getPasteEdits", - "request_seq": 2, - "success": true, - "performanceData": { - "updateGraphDurationMs": * - }, - "body": { - "edits": [ - { - "fileName": "/folder/c.ts", - "textChanges": [ - { - "start": { - "line": 1, - "offset": 1 - }, - "end": { - "line": 1, - "offset": 1 - }, - "newText": "import * as test from \"../a\";\n\n" - }, - { - "start": { - "line": 1, - "offset": 1 - }, - "end": { - "line": 1, - "offset": 1 - }, - "newText": "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - } - ] - } - ], - "fixId": "providePostPasteEdits" - } - } -After Request -Projects:: -/tsconfig.json (Configured) *changed* - projectStateVersion: 3 *changed* - projectProgramVersion: 1 - dirty: true *changed* - -ScriptInfos:: -/a.ts - version: Text-1 - containingProjects: 1 - /tsconfig.json -/b.ts - version: Text-1 - containingProjects: 1 - /tsconfig.json -/folder/c.ts (Open) *changed* - version: SVC-1-2 *changed* - containingProjects: 1 - /tsconfig.json *default* -/lib.d.ts - version: Text-1 - containingProjects: 1 - /tsconfig.json -/lib.decorators.d.ts - version: Text-1 - containingProjects: 1 - /tsconfig.json -/lib.decorators.legacy.d.ts - version: Text-1 - containingProjects: 1 - /tsconfig.json diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport2.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport2.js deleted file mode 100644 index 9d3c98e61c02c..0000000000000 --- a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_namespaceImport2.js +++ /dev/null @@ -1,335 +0,0 @@ -currentDirectory:: / useCaseSensitiveFileNames: false -Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist -//// [/a.ts] -const abc = 10; -const def = 20; -export interface testInterface { - abc: number; - def: number; -} - -//// [/b.ts] -import type * as test from "./a"; - -function foo(abc: test.testInterface, def: test.testInterface) { - console.log(abc); - console.log(def); -} - - -//// [/folder/c.ts] -import type * as test from "../a"; - -function foo(abc: test.abc, def: test.def) { -console.log(abc); -} - - - -//// [/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 - -//// [/tsconfig.json] -{ "files": ["/folder/c.ts", "a.ts", "b.ts"] } - - -Info seq [hh:mm:ss:mss] request: - { - "seq": 0, - "type": "request", - "arguments": { - "file": "/folder/c.ts" - }, - "command": "open" - } -Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json -Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file -Info seq [hh:mm:ss:mss] event: - { - "seq": 0, - "type": "event", - "event": "projectLoadingStart", - "body": { - "projectName": "/tsconfig.json", - "reason": "Creating possible configured project for /folder/c.ts to open" - } - } -Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { - "rootNames": [ - "/folder/c.ts", - "/a.ts", - "/b.ts" - ], - "options": { - "configFilePath": "/tsconfig.json" - } -} -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json -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] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (6) - /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 - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /folder/c.ts SVC-1-0 "import type * as test from \"../a\";\n\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\n}\n\n" - /b.ts Text-1 "import type * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\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' - a.ts - Imported via "../a" from file 'folder/c.ts' - Part of 'files' list in tsconfig.json - Imported via "./a" from file 'b.ts' - folder/c.ts - Part of 'files' list in tsconfig.json - b.ts - Part of 'files' list in tsconfig.json - -Info seq [hh:mm:ss:mss] ----------------------------------------------- -Info seq [hh:mm:ss:mss] event: - { - "seq": 0, - "type": "event", - "event": "projectLoadingFinish", - "body": { - "projectName": "/tsconfig.json" - } - } -Info seq [hh:mm:ss:mss] event: - { - "seq": 0, - "type": "event", - "event": "configFileDiag", - "body": { - "triggerFile": "/folder/c.ts", - "configFile": "/tsconfig.json", - "diagnostics": [] - } - } -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (6) - -Info seq [hh:mm:ss:mss] ----------------------------------------------- -Info seq [hh:mm:ss:mss] Open files: -Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined -Info seq [hh:mm:ss:mss] Projects: /tsconfig.json -After Request -watchedFiles:: -/a.ts: *new* - {"pollingInterval":500} -/b.ts: *new* - {"pollingInterval":500} -/lib.d.ts: *new* - {"pollingInterval":500} -/lib.decorators.d.ts: *new* - {"pollingInterval":500} -/lib.decorators.legacy.d.ts: *new* - {"pollingInterval":500} -/tsconfig.json: *new* - {"pollingInterval":2000} - -Projects:: -/tsconfig.json (Configured) *new* - projectStateVersion: 1 - projectProgramVersion: 1 - -ScriptInfos:: -/a.ts *new* - version: Text-1 - containingProjects: 1 - /tsconfig.json -/b.ts *new* - version: Text-1 - containingProjects: 1 - /tsconfig.json -/folder/c.ts (Open) *new* - version: SVC-1-0 - containingProjects: 1 - /tsconfig.json *default* -/lib.d.ts *new* - version: Text-1 - containingProjects: 1 - /tsconfig.json -/lib.decorators.d.ts *new* - version: Text-1 - containingProjects: 1 - /tsconfig.json -/lib.decorators.legacy.d.ts *new* - version: Text-1 - containingProjects: 1 - /tsconfig.json - -Info seq [hh:mm:ss:mss] request: - { - "seq": 1, - "type": "request", - "arguments": { - "formatOptions": { - "indentSize": 4, - "tabSize": 4, - "newLineCharacter": "\n", - "convertTabsToSpaces": true, - "indentStyle": 2, - "insertSpaceAfterConstructor": false, - "insertSpaceAfterCommaDelimiter": true, - "insertSpaceAfterSemicolonInForStatements": true, - "insertSpaceBeforeAndAfterBinaryOperators": true, - "insertSpaceAfterKeywordsInControlFlowStatements": true, - "insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, - "insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, - "insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, - "insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": true, - "insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false, - "insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false, - "insertSpaceBeforeFunctionParenthesis": false, - "placeOpenBraceOnNewLineForFunctions": false, - "placeOpenBraceOnNewLineForControlBlocks": false, - "semicolons": "ignore", - "trimTrailingWhitespace": true, - "indentSwitchCase": true - } - }, - "command": "configure" - } -Info seq [hh:mm:ss:mss] Format host information updated -Info seq [hh:mm:ss:mss] response: - { - "seq": 0, - "type": "response", - "command": "configure", - "request_seq": 1, - "success": true - } -Info seq [hh:mm:ss:mss] request: - { - "seq": 2, - "type": "request", - "arguments": { - "file": "/folder/c.ts", - "pastedText": [ - "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - ], - "pasteLocations": [ - { - "start": { - "line": 6, - "offset": 1 - }, - "end": { - "line": 6, - "offset": 1 - } - } - ], - "copiedFrom": { - "file": "b.ts", - "spans": [ - { - "start": { - "line": 3, - "offset": 1 - }, - "end": { - "line": 6, - "offset": 2 - } - } - ] - } - }, - "command": "getPasteEdits" - } -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json -Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (6) - /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 - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /folder/c.ts SVC-1-1 "import type * as test from \"../a\";\n\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\n}\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}\n" - /b.ts Text-1 "import type * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" - -Info seq [hh:mm:ss:mss] ----------------------------------------------- -Info seq [hh:mm:ss:mss] response: - { - "seq": 0, - "type": "response", - "command": "getPasteEdits", - "request_seq": 2, - "success": true, - "performanceData": { - "updateGraphDurationMs": * - }, - "body": { - "edits": [ - { - "fileName": "/folder/c.ts", - "textChanges": [ - { - "start": { - "line": 6, - "offset": 1 - }, - "end": { - "line": 6, - "offset": 1 - }, - "newText": "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - } - ] - } - ], - "fixId": "providePostPasteEdits" - } - } -After Request -Projects:: -/tsconfig.json (Configured) *changed* - projectStateVersion: 3 *changed* - projectProgramVersion: 1 - dirty: true *changed* - -ScriptInfos:: -/a.ts - version: Text-1 - containingProjects: 1 - /tsconfig.json -/b.ts - version: Text-1 - containingProjects: 1 - /tsconfig.json -/folder/c.ts (Open) *changed* - version: SVC-1-2 *changed* - containingProjects: 1 - /tsconfig.json *default* -/lib.d.ts - version: Text-1 - containingProjects: 1 - /tsconfig.json -/lib.decorators.d.ts - version: Text-1 - containingProjects: 1 - /tsconfig.json -/lib.decorators.legacy.d.ts - version: Text-1 - containingProjects: 1 - /tsconfig.json From d47ff25e963101a67dcc6cfbf53e690fc425a5ee Mon Sep 17 00:00:00 2001 From: navya9singh Date: Thu, 11 Jul 2024 10:45:42 -0700 Subject: [PATCH 08/15] default import fixes --- src/services/codefixes/importFixes.ts | 32 +- src/services/refactors/helpers.ts | 2 +- src/services/refactors/moveToFile.ts | 6 +- .../pasteEdits_externalModuleSymbolImport3.js | 2 +- .../pasteEdits_externalModuleSymvolImport5.js | 349 ++++++++++++++++++ .../pasteEdits_externalModuleSymbolImport3.ts | 2 +- .../pasteEdits_externalModuleSymvolImport5.ts | 45 +++ 7 files changed, 417 insertions(+), 21 deletions(-) create mode 100644 tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymvolImport5.js create mode 100644 tests/cases/fourslash/server/pasteEdits_externalModuleSymvolImport5.ts diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index f911a8ff34972..0613cc49978a9 100644 --- a/src/services/codefixes/importFixes.ts +++ b/src/services/codefixes/importFixes.ts @@ -82,6 +82,7 @@ import { isFullSourceFile, isIdentifier, isImportableFile, + isImportClause, isImportDeclaration, isImportEqualsDeclaration, isIntrinsicJsxName, @@ -227,7 +228,7 @@ export interface ImportAdder { addImportFromExportedSymbol: (exportedSymbol: Symbol, isValidTypeOnlyUseSite?: boolean, referenceImport?: ImportOrRequireAliasDeclaration) => void; addImportForNonExistentExport: (exportName: string, exportingFileName: string, exportKind: ExportKind, exportedMeanings: SymbolFlags, isImportUsageValidAsTypeOnly: boolean) => void; addImportForUnresolvedIdentifier: (context: CodeFixContextBase, symbolToken: Identifier, useAutoImportProvider: boolean) => void; - addImportForExternalModuleSymbol: (symbol: Symbol, originalSymbol: Symbol, isValidTypeOnlyUseSite: boolean) => void; + addImportForExternalModuleSymbol: (symbol: Symbol, symbolName: string, isValidTypeOnlyUseSite: boolean, referenceImport?: ImportOrRequireAliasDeclaration) => void; addVerbatimImport: (declaration: AnyImportOrRequireStatement | ImportOrRequireAliasDeclaration) => void; removeExistingImport: (declaration: ImportOrRequireAliasDeclaration) => void; writeFixes: (changeTracker: textChanges.ChangeTracker, oldFileQuotePreference?: QuotePreference) => void; @@ -357,22 +358,23 @@ function createImportAdderWorker(sourceFile: SourceFile | FutureSourceFile, prog } } - function addImportForExternalModuleSymbol(symbol: Symbol, originalSymbol: Symbol, isValidTypeOnlyUseSite: boolean) { + function addImportForExternalModuleSymbol(symbol: Symbol, symbolName: string, isValidTypeOnlyUseSite: boolean, referenceImport?: ImportOrRequireAliasDeclaration) { const useRequire = shouldUseRequire(sourceFile, program); - if (originalSymbol.valueDeclaration) { - const moduleSpecifier = moduleSpecifiers.getLocalModuleSpecifierBetweenFileNames( - sourceFile, - originalSymbol.valueDeclaration.getSourceFile().fileName, - compilerOptions, - createModuleSpecifierResolutionHost(program, host), - ); - const info: FixInfo = { - fix: { kind: ImportFixKind.AddNew, importKind: ImportKind.Namespace, addAsTypeOnly: isValidTypeOnlyUseSite ? AddAsTypeOnly.Allowed : AddAsTypeOnly.NotAllowed, useRequire, moduleSpecifierKind: undefined, moduleSpecifier }, - symbolName: symbol.name, - errorIdentifierText: undefined, - }; - addImport(info); + const moduleSpecifier = moduleSpecifiers.getLocalModuleSpecifierBetweenFileNames( + sourceFile, + Debug.checkDefined(symbol.valueDeclaration).getSourceFile().fileName, + compilerOptions, + createModuleSpecifierResolutionHost(program, host), + ); + let info: FixInfo = { + fix: { kind: ImportFixKind.AddNew, importKind: ImportKind.Namespace, addAsTypeOnly: isValidTypeOnlyUseSite ? AddAsTypeOnly.Allowed : AddAsTypeOnly.NotAllowed, useRequire, moduleSpecifierKind: undefined, moduleSpecifier }, + symbolName, + errorIdentifierText: undefined, + }; + if (referenceImport && isImportClause(referenceImport)) { + info = { ...info, fix: { ...info.fix, importKind: ImportKind.Default, addAsTypeOnly: isTypeOnlyImportDeclaration(referenceImport) ? AddAsTypeOnly.Required : AddAsTypeOnly.NotAllowed } }; } + addImport(info); } function removeExistingImport(declaration: ImportOrRequireAliasDeclaration) { diff --git a/src/services/refactors/helpers.ts b/src/services/refactors/helpers.ts index b7e94d0d3c72c..52f9f0b8a67a5 100644 --- a/src/services/refactors/helpers.ts +++ b/src/services/refactors/helpers.ts @@ -82,7 +82,7 @@ export function addTargetFileImports( importAdder.addVerbatimImport(Debug.checkDefined(declaration ?? findAncestor(symbol.declarations?.[0], isAnyImportOrRequireStatement))); } else { - isExternalModuleSymbol(targetSymbol) ? importAdder.addImportForExternalModuleSymbol(symbol, targetSymbol, isValidTypeOnlyUseSite) : importAdder.addImportFromExportedSymbol(targetSymbol, isValidTypeOnlyUseSite, declaration); + isExternalModuleSymbol(targetSymbol) ? importAdder.addImportForExternalModuleSymbol(targetSymbol, symbol.name, isValidTypeOnlyUseSite, declaration) : importAdder.addImportFromExportedSymbol(targetSymbol, isValidTypeOnlyUseSite, declaration); } }); diff --git a/src/services/refactors/moveToFile.ts b/src/services/refactors/moveToFile.ts index 4730b1fe1bb4a..0843a628beae1 100644 --- a/src/services/refactors/moveToFile.ts +++ b/src/services/refactors/moveToFile.ts @@ -1134,14 +1134,14 @@ export function getExistingLocals(sourceFile: SourceFile, statements: readonly S declaration.importClause.namedBindings ) { if (isNamespaceImport(declaration.importClause.namedBindings)) { - const symbol = checker.getSymbolAtLocation(declaration.importClause.namedBindings.name); + const symbol = declaration.importClause.namedBindings.symbol; if (symbol) { existingLocals.add(skipAlias(symbol, checker)); } } else if (isNamedImports(declaration.importClause.namedBindings)) { for (const e of declaration.importClause.namedBindings.elements) { - const symbol = checker.getSymbolAtLocation(e.propertyName || e.name); + const symbol = e.symbol; if (symbol) { existingLocals.add(skipAlias(symbol, checker)); } @@ -1150,7 +1150,7 @@ export function getExistingLocals(sourceFile: SourceFile, statements: readonly S } if (isVariableDeclarationInitializedToRequire(declaration.parent) && isObjectBindingPattern(declaration.parent.name)) { for (const e of declaration.parent.name.elements) { - const symbol = checker.getSymbolAtLocation(e.propertyName || e.name); + const symbol = e.symbol; if (symbol) { existingLocals.add(skipAlias(symbol, checker)); } diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport3.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport3.js index 0f45298a066e8..b5b84b42d1db7 100644 --- a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport3.js +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport3.js @@ -305,7 +305,7 @@ Info seq [hh:mm:ss:mss] response: "line": 1, "offset": 1 }, - "newText": "import * as test from \"../a\";\n\n" + "newText": "import test from \"../a\";\n\n" }, { "start": { diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymvolImport5.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymvolImport5.js new file mode 100644 index 0000000000000..592f042ceaa9a --- /dev/null +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymvolImport5.js @@ -0,0 +1,349 @@ +currentDirectory:: / useCaseSensitiveFileNames: false +Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist +//// [/a.ts] +const abc = 10; +const def = 20; +export default interface testInterface { + abc: number; + def: number; +} + +//// [/b.ts] +import testInterface from "./a.ts"; + +function foo(abc: testInterface, def: testInterface) { + console.log(abc); + console.log(def); +} + + +//// [/folder/c.ts] + + +//// [/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 + +//// [/tsconfig.json] +{ "compilerOptions": { "module": "nodenext" }, "files": ["/folder/c.ts", "a.ts", "b.ts"] } + + +Info seq [hh:mm:ss:mss] request: + { + "seq": 0, + "type": "request", + "arguments": { + "file": "/folder/c.ts" + }, + "command": "open" + } +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingStart", + "body": { + "projectName": "/tsconfig.json", + "reason": "Creating possible configured project for /folder/c.ts to open" + } + } +Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { + "rootNames": [ + "/folder/c.ts", + "/a.ts", + "/b.ts" + ], + "options": { + "module": 199, + "configFilePath": "/tsconfig.json" + } +} +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.esnext.full.d.ts 500 undefined Project: /tsconfig.json WatchType: Missing file +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (3) + /folder/c.ts SVC-1-0 "" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport default interface testInterface {\n abc: number;\n def: number;\n}" + /b.ts Text-1 "import testInterface from \"./a.ts\";\n\nfunction foo(abc: testInterface, def: testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + + + folder/c.ts + Part of 'files' list in tsconfig.json + File is CommonJS module because 'package.json' was not found + a.ts + Part of 'files' list in tsconfig.json + Imported via "./a.ts" from file 'b.ts' + File is CommonJS module because 'package.json' was not found + b.ts + Part of 'files' list in tsconfig.json + File is CommonJS module because 'package.json' was not found + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "projectLoadingFinish", + "body": { + "projectName": "/tsconfig.json" + } + } +Info seq [hh:mm:ss:mss] event: + { + "seq": 0, + "type": "event", + "event": "configFileDiag", + "body": { + "triggerFile": "/folder/c.ts", + "configFile": "/tsconfig.json", + "diagnostics": [ + { + "text": "File '/lib.esnext.full.d.ts' not found.\n The file is in the program because:\n Default library for target 'esnext'", + "code": 6053, + "category": "error" + }, + { + "text": "Cannot find global type 'Array'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'Boolean'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'Function'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'IArguments'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'Number'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'Object'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'RegExp'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'String'.", + "code": 2318, + "category": "error" + } + ] + } + } +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (3) + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] Open files: +Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /tsconfig.json +After Request +watchedFiles:: +/a.ts: *new* + {"pollingInterval":500} +/b.ts: *new* + {"pollingInterval":500} +/lib.esnext.full.d.ts: *new* + {"pollingInterval":500} +/tsconfig.json: *new* + {"pollingInterval":2000} + +Projects:: +/tsconfig.json (Configured) *new* + projectStateVersion: 1 + projectProgramVersion: 1 + +ScriptInfos:: +/a.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/b.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/folder/c.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /tsconfig.json *default* + +Info seq [hh:mm:ss:mss] request: + { + "seq": 1, + "type": "request", + "arguments": { + "formatOptions": { + "indentSize": 4, + "tabSize": 4, + "newLineCharacter": "\n", + "convertTabsToSpaces": true, + "indentStyle": 2, + "insertSpaceAfterConstructor": false, + "insertSpaceAfterCommaDelimiter": true, + "insertSpaceAfterSemicolonInForStatements": true, + "insertSpaceBeforeAndAfterBinaryOperators": true, + "insertSpaceAfterKeywordsInControlFlowStatements": true, + "insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, + "insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": true, + "insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false, + "insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false, + "insertSpaceBeforeFunctionParenthesis": false, + "placeOpenBraceOnNewLineForFunctions": false, + "placeOpenBraceOnNewLineForControlBlocks": false, + "semicolons": "ignore", + "trimTrailingWhitespace": true, + "indentSwitchCase": true + } + }, + "command": "configure" + } +Info seq [hh:mm:ss:mss] Format host information updated +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "configure", + "request_seq": 1, + "success": true + } +Info seq [hh:mm:ss:mss] request: + { + "seq": 2, + "type": "request", + "arguments": { + "file": "/folder/c.ts", + "pastedText": [ + "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + ], + "pasteLocations": [ + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + } + } + ], + "copiedFrom": { + "file": "b.ts", + "spans": [ + { + "start": { + "line": 3, + "offset": 1 + }, + "end": { + "line": 6, + "offset": 2 + } + } + ] + } + }, + "command": "getPasteEdits" + } +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (3) + /folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport default interface testInterface {\n abc: number;\n def: number;\n}" + /b.ts Text-1 "import testInterface from \"./a.ts\";\n\nfunction foo(abc: testInterface, def: testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + +Info seq [hh:mm:ss:mss] ----------------------------------------------- +Info seq [hh:mm:ss:mss] getExportInfoMap: cache miss or empty; calculating new results +Info seq [hh:mm:ss:mss] getExportInfoMap: done in * ms +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "getPasteEdits", + "request_seq": 2, + "success": true, + "performanceData": { + "updateGraphDurationMs": * + }, + "body": { + "edits": [ + { + "fileName": "/folder/c.ts", + "textChanges": [ + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + }, + "newText": "import testInterface from \"../a\";\n\n" + }, + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, + "offset": 1 + }, + "newText": "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + } + ] + } + ], + "fixId": "providePostPasteEdits" + } + } +After Request +Projects:: +/tsconfig.json (Configured) *changed* + projectStateVersion: 3 *changed* + projectProgramVersion: 1 + dirty: true *changed* + +ScriptInfos:: +/a.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/b.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/folder/c.ts (Open) *changed* + version: SVC-1-2 *changed* + containingProjects: 1 + /tsconfig.json *default* diff --git a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport3.ts b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport3.ts index 9fb210df806e9..c3aabe1a2f349 100644 --- a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport3.ts +++ b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport3.ts @@ -36,7 +36,7 @@ console.log(def); }, newFileContents: { "/folder/c.ts": -`import * as test from "../a"; +`import test from "../a"; function foo(abc: test.abc, def: test.def) { console.log(abc); diff --git a/tests/cases/fourslash/server/pasteEdits_externalModuleSymvolImport5.ts b/tests/cases/fourslash/server/pasteEdits_externalModuleSymvolImport5.ts new file mode 100644 index 0000000000000..97d57fad054a3 --- /dev/null +++ b/tests/cases/fourslash/server/pasteEdits_externalModuleSymvolImport5.ts @@ -0,0 +1,45 @@ +/// + +// @Filename: /folder/c.ts +//// [||] + +// @Filename: /a.ts +//// const abc = 10; +//// const def = 20; +//// export default interface testInterface { +//// abc: number; +//// def: number; +//// } + +// @Filename: /b.ts +//// import testInterface from "./a.ts"; +//// +//// [|function foo(abc: testInterface, def: testInterface) { +//// console.log(abc); +//// console.log(def); +//// }|] +//// + +// @Filename: /tsconfig.json +////{ "compilerOptions": { "module": "nodenext" }, "files": ["/folder/c.ts", "a.ts", "b.ts"] } + +const range = test.ranges(); +verify.pasteEdits({ + args: { + pastedText: [`function foo(abc: test.abc, def: test.def) { +console.log(abc); +console.log(def); +}`], + pasteLocations: [range[0]], + copiedFrom: { file: "b.ts", range: [range[1]] }, + }, + newFileContents: { + "/folder/c.ts": +`import testInterface from "../a"; + +function foo(abc: test.abc, def: test.def) { +console.log(abc); +console.log(def); +}` + } +}); From ba4c3dda2dd51a2f121ad66221047f5f1a6914a3 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Thu, 11 Jul 2024 12:02:06 -0700 Subject: [PATCH 09/15] fixing baselines --- .../pasteEdits_externalModuleSymvolImport5.js | 349 ------------------ .../pasteEdits_externalModuleSymvolImport5.ts | 45 --- 2 files changed, 394 deletions(-) delete mode 100644 tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymvolImport5.js delete mode 100644 tests/cases/fourslash/server/pasteEdits_externalModuleSymvolImport5.ts diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymvolImport5.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymvolImport5.js deleted file mode 100644 index 592f042ceaa9a..0000000000000 --- a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymvolImport5.js +++ /dev/null @@ -1,349 +0,0 @@ -currentDirectory:: / useCaseSensitiveFileNames: false -Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist -//// [/a.ts] -const abc = 10; -const def = 20; -export default interface testInterface { - abc: number; - def: number; -} - -//// [/b.ts] -import testInterface from "./a.ts"; - -function foo(abc: testInterface, def: testInterface) { - console.log(abc); - console.log(def); -} - - -//// [/folder/c.ts] - - -//// [/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 - -//// [/tsconfig.json] -{ "compilerOptions": { "module": "nodenext" }, "files": ["/folder/c.ts", "a.ts", "b.ts"] } - - -Info seq [hh:mm:ss:mss] request: - { - "seq": 0, - "type": "request", - "arguments": { - "file": "/folder/c.ts" - }, - "command": "open" - } -Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json -Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file -Info seq [hh:mm:ss:mss] event: - { - "seq": 0, - "type": "event", - "event": "projectLoadingStart", - "body": { - "projectName": "/tsconfig.json", - "reason": "Creating possible configured project for /folder/c.ts to open" - } - } -Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { - "rootNames": [ - "/folder/c.ts", - "/a.ts", - "/b.ts" - ], - "options": { - "module": 199, - "configFilePath": "/tsconfig.json" - } -} -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.esnext.full.d.ts 500 undefined Project: /tsconfig.json WatchType: Missing file -Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (3) - /folder/c.ts SVC-1-0 "" - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport default interface testInterface {\n abc: number;\n def: number;\n}" - /b.ts Text-1 "import testInterface from \"./a.ts\";\n\nfunction foo(abc: testInterface, def: testInterface) {\n console.log(abc);\n console.log(def);\n}\n" - - - folder/c.ts - Part of 'files' list in tsconfig.json - File is CommonJS module because 'package.json' was not found - a.ts - Part of 'files' list in tsconfig.json - Imported via "./a.ts" from file 'b.ts' - File is CommonJS module because 'package.json' was not found - b.ts - Part of 'files' list in tsconfig.json - File is CommonJS module because 'package.json' was not found - -Info seq [hh:mm:ss:mss] ----------------------------------------------- -Info seq [hh:mm:ss:mss] event: - { - "seq": 0, - "type": "event", - "event": "projectLoadingFinish", - "body": { - "projectName": "/tsconfig.json" - } - } -Info seq [hh:mm:ss:mss] event: - { - "seq": 0, - "type": "event", - "event": "configFileDiag", - "body": { - "triggerFile": "/folder/c.ts", - "configFile": "/tsconfig.json", - "diagnostics": [ - { - "text": "File '/lib.esnext.full.d.ts' not found.\n The file is in the program because:\n Default library for target 'esnext'", - "code": 6053, - "category": "error" - }, - { - "text": "Cannot find global type 'Array'.", - "code": 2318, - "category": "error" - }, - { - "text": "Cannot find global type 'Boolean'.", - "code": 2318, - "category": "error" - }, - { - "text": "Cannot find global type 'Function'.", - "code": 2318, - "category": "error" - }, - { - "text": "Cannot find global type 'IArguments'.", - "code": 2318, - "category": "error" - }, - { - "text": "Cannot find global type 'Number'.", - "code": 2318, - "category": "error" - }, - { - "text": "Cannot find global type 'Object'.", - "code": 2318, - "category": "error" - }, - { - "text": "Cannot find global type 'RegExp'.", - "code": 2318, - "category": "error" - }, - { - "text": "Cannot find global type 'String'.", - "code": 2318, - "category": "error" - } - ] - } - } -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (3) - -Info seq [hh:mm:ss:mss] ----------------------------------------------- -Info seq [hh:mm:ss:mss] Open files: -Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined -Info seq [hh:mm:ss:mss] Projects: /tsconfig.json -After Request -watchedFiles:: -/a.ts: *new* - {"pollingInterval":500} -/b.ts: *new* - {"pollingInterval":500} -/lib.esnext.full.d.ts: *new* - {"pollingInterval":500} -/tsconfig.json: *new* - {"pollingInterval":2000} - -Projects:: -/tsconfig.json (Configured) *new* - projectStateVersion: 1 - projectProgramVersion: 1 - -ScriptInfos:: -/a.ts *new* - version: Text-1 - containingProjects: 1 - /tsconfig.json -/b.ts *new* - version: Text-1 - containingProjects: 1 - /tsconfig.json -/folder/c.ts (Open) *new* - version: SVC-1-0 - containingProjects: 1 - /tsconfig.json *default* - -Info seq [hh:mm:ss:mss] request: - { - "seq": 1, - "type": "request", - "arguments": { - "formatOptions": { - "indentSize": 4, - "tabSize": 4, - "newLineCharacter": "\n", - "convertTabsToSpaces": true, - "indentStyle": 2, - "insertSpaceAfterConstructor": false, - "insertSpaceAfterCommaDelimiter": true, - "insertSpaceAfterSemicolonInForStatements": true, - "insertSpaceBeforeAndAfterBinaryOperators": true, - "insertSpaceAfterKeywordsInControlFlowStatements": true, - "insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, - "insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, - "insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, - "insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": true, - "insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false, - "insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false, - "insertSpaceBeforeFunctionParenthesis": false, - "placeOpenBraceOnNewLineForFunctions": false, - "placeOpenBraceOnNewLineForControlBlocks": false, - "semicolons": "ignore", - "trimTrailingWhitespace": true, - "indentSwitchCase": true - } - }, - "command": "configure" - } -Info seq [hh:mm:ss:mss] Format host information updated -Info seq [hh:mm:ss:mss] response: - { - "seq": 0, - "type": "response", - "command": "configure", - "request_seq": 1, - "success": true - } -Info seq [hh:mm:ss:mss] request: - { - "seq": 2, - "type": "request", - "arguments": { - "file": "/folder/c.ts", - "pastedText": [ - "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - ], - "pasteLocations": [ - { - "start": { - "line": 1, - "offset": 1 - }, - "end": { - "line": 1, - "offset": 1 - } - } - ], - "copiedFrom": { - "file": "b.ts", - "spans": [ - { - "start": { - "line": 3, - "offset": 1 - }, - "end": { - "line": 6, - "offset": 2 - } - } - ] - } - }, - "command": "getPasteEdits" - } -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json -Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (3) - /folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport default interface testInterface {\n abc: number;\n def: number;\n}" - /b.ts Text-1 "import testInterface from \"./a.ts\";\n\nfunction foo(abc: testInterface, def: testInterface) {\n console.log(abc);\n console.log(def);\n}\n" - -Info seq [hh:mm:ss:mss] ----------------------------------------------- -Info seq [hh:mm:ss:mss] getExportInfoMap: cache miss or empty; calculating new results -Info seq [hh:mm:ss:mss] getExportInfoMap: done in * ms -Info seq [hh:mm:ss:mss] response: - { - "seq": 0, - "type": "response", - "command": "getPasteEdits", - "request_seq": 2, - "success": true, - "performanceData": { - "updateGraphDurationMs": * - }, - "body": { - "edits": [ - { - "fileName": "/folder/c.ts", - "textChanges": [ - { - "start": { - "line": 1, - "offset": 1 - }, - "end": { - "line": 1, - "offset": 1 - }, - "newText": "import testInterface from \"../a\";\n\n" - }, - { - "start": { - "line": 1, - "offset": 1 - }, - "end": { - "line": 1, - "offset": 1 - }, - "newText": "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - } - ] - } - ], - "fixId": "providePostPasteEdits" - } - } -After Request -Projects:: -/tsconfig.json (Configured) *changed* - projectStateVersion: 3 *changed* - projectProgramVersion: 1 - dirty: true *changed* - -ScriptInfos:: -/a.ts - version: Text-1 - containingProjects: 1 - /tsconfig.json -/b.ts - version: Text-1 - containingProjects: 1 - /tsconfig.json -/folder/c.ts (Open) *changed* - version: SVC-1-2 *changed* - containingProjects: 1 - /tsconfig.json *default* diff --git a/tests/cases/fourslash/server/pasteEdits_externalModuleSymvolImport5.ts b/tests/cases/fourslash/server/pasteEdits_externalModuleSymvolImport5.ts deleted file mode 100644 index 97d57fad054a3..0000000000000 --- a/tests/cases/fourslash/server/pasteEdits_externalModuleSymvolImport5.ts +++ /dev/null @@ -1,45 +0,0 @@ -/// - -// @Filename: /folder/c.ts -//// [||] - -// @Filename: /a.ts -//// const abc = 10; -//// const def = 20; -//// export default interface testInterface { -//// abc: number; -//// def: number; -//// } - -// @Filename: /b.ts -//// import testInterface from "./a.ts"; -//// -//// [|function foo(abc: testInterface, def: testInterface) { -//// console.log(abc); -//// console.log(def); -//// }|] -//// - -// @Filename: /tsconfig.json -////{ "compilerOptions": { "module": "nodenext" }, "files": ["/folder/c.ts", "a.ts", "b.ts"] } - -const range = test.ranges(); -verify.pasteEdits({ - args: { - pastedText: [`function foo(abc: test.abc, def: test.def) { -console.log(abc); -console.log(def); -}`], - pasteLocations: [range[0]], - copiedFrom: { file: "b.ts", range: [range[1]] }, - }, - newFileContents: { - "/folder/c.ts": -`import testInterface from "../a"; - -function foo(abc: test.abc, def: test.def) { -console.log(abc); -console.log(def); -}` - } -}); From fb453ee7c79fa6027107bbf02786acc2ed21a638 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Thu, 11 Jul 2024 13:03:46 -0700 Subject: [PATCH 10/15] changing baselines --- .../pasteEdits_defaultExport.js | 176 +++++++++--------- .../pasteEdits_externalModuleSymbolImport1.js | 176 +++++++++--------- .../pasteEdits_externalModuleSymbolImport2.js | 118 ++++++------ .../pasteEdits_externalModuleSymbolImport3.js | 134 ++++++------- .../pasteEdits_externalModuleSymbolImport4.js | 176 +++++++++--------- .../server/pasteEdits_defaultExport.ts | 14 +- .../pasteEdits_externalModuleSymbolImport1.ts | 14 +- .../pasteEdits_externalModuleSymbolImport2.ts | 12 +- .../pasteEdits_externalModuleSymbolImport3.ts | 14 +- .../pasteEdits_externalModuleSymbolImport4.ts | 14 +- 10 files changed, 424 insertions(+), 424 deletions(-) diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_defaultExport.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_defaultExport.js index 684b6f0ede000..af92fc0de5ccb 100644 --- a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_defaultExport.js +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_defaultExport.js @@ -1,29 +1,29 @@ currentDirectory:: / useCaseSensitiveFileNames: false Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist -//// [/a.ts] +//// [/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 + +//// [/src/a.ts] export default function foo(name: string): void { console.log(name); } -//// [/b.ts] +//// [/src/b.ts] import foo from "./a"; foo("bar"); -//// [/folder/c.ts] +//// [/src/folder/c.ts] -//// [/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 - -//// [/tsconfig.json] -{ "files": ["/folder/c.ts", "a.ts", "b.ts"] } +//// [/src/tsconfig.json] +{ "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.ts"] } Info seq [hh:mm:ss:mss] request: @@ -31,56 +31,56 @@ Info seq [hh:mm:ss:mss] request: "seq": 0, "type": "request", "arguments": { - "file": "/folder/c.ts" + "file": "/src/folder/c.ts" }, "command": "open" } -Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json -Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /src/folder/c.ts ProjectRootPath: undefined:: Result: /src/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /src/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/tsconfig.json 2000 undefined Project: /src/tsconfig.json WatchType: Config file Info seq [hh:mm:ss:mss] event: { "seq": 0, "type": "event", "event": "projectLoadingStart", "body": { - "projectName": "/tsconfig.json", - "reason": "Creating possible configured project for /folder/c.ts to open" + "projectName": "/src/tsconfig.json", + "reason": "Creating possible configured project for /src/folder/c.ts to open" } } -Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { +Info seq [hh:mm:ss:mss] Config: /src/tsconfig.json : { "rootNames": [ - "/folder/c.ts", - "/a.ts", - "/b.ts" + "/src/folder/c.ts", + "/src/a.ts", + "/src/b.ts" ], "options": { - "configFilePath": "/tsconfig.json" + "configFilePath": "/src/tsconfig.json" } } -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/b.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /src/tsconfig.json 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] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /src/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (6) /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 - /folder/c.ts SVC-1-0 "\n" - /a.ts Text-1 "export default function foo(name: string): void {\n console.log(name);\n}" - /b.ts Text-1 "import foo from \"./a\";\nfoo(\"bar\");" + /src/folder/c.ts SVC-1-0 "\n" + /src/a.ts Text-1 "export default function foo(name: string): void {\n console.log(name);\n}" + /src/b.ts Text-1 "import foo from \"./a\";\nfoo(\"bar\");" - lib.d.ts + ../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' + ../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' folder/c.ts Part of 'files' list in tsconfig.json a.ts @@ -96,7 +96,7 @@ Info seq [hh:mm:ss:mss] event: "type": "event", "event": "projectLoadingFinish", "body": { - "projectName": "/tsconfig.json" + "projectName": "/src/tsconfig.json" } } Info seq [hh:mm:ss:mss] event: @@ -105,63 +105,63 @@ Info seq [hh:mm:ss:mss] event: "type": "event", "event": "configFileDiag", "body": { - "triggerFile": "/folder/c.ts", - "configFile": "/tsconfig.json", + "triggerFile": "/src/folder/c.ts", + "configFile": "/src/tsconfig.json", "diagnostics": [] } } -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (6) Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] Open files: -Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined -Info seq [hh:mm:ss:mss] Projects: /tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /src/folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /src/tsconfig.json After Request watchedFiles:: -/a.ts: *new* - {"pollingInterval":500} -/b.ts: *new* - {"pollingInterval":500} /lib.d.ts: *new* {"pollingInterval":500} /lib.decorators.d.ts: *new* {"pollingInterval":500} /lib.decorators.legacy.d.ts: *new* {"pollingInterval":500} -/tsconfig.json: *new* +/src/a.ts: *new* + {"pollingInterval":500} +/src/b.ts: *new* + {"pollingInterval":500} +/src/tsconfig.json: *new* {"pollingInterval":2000} Projects:: -/tsconfig.json (Configured) *new* +/src/tsconfig.json (Configured) *new* projectStateVersion: 1 projectProgramVersion: 1 ScriptInfos:: -/a.ts *new* +/lib.d.ts *new* version: Text-1 containingProjects: 1 - /tsconfig.json -/b.ts *new* + /src/tsconfig.json +/lib.decorators.d.ts *new* version: Text-1 containingProjects: 1 - /tsconfig.json -/folder/c.ts (Open) *new* - version: SVC-1-0 - containingProjects: 1 - /tsconfig.json *default* -/lib.d.ts *new* + /src/tsconfig.json +/lib.decorators.legacy.d.ts *new* version: Text-1 containingProjects: 1 - /tsconfig.json -/lib.decorators.d.ts *new* + /src/tsconfig.json +/src/a.ts *new* version: Text-1 containingProjects: 1 - /tsconfig.json -/lib.decorators.legacy.d.ts *new* + /src/tsconfig.json +/src/b.ts *new* version: Text-1 containingProjects: 1 - /tsconfig.json + /src/tsconfig.json +/src/folder/c.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /src/tsconfig.json *default* Info seq [hh:mm:ss:mss] request: { @@ -209,7 +209,7 @@ Info seq [hh:mm:ss:mss] request: "seq": 2, "type": "request", "arguments": { - "file": "/folder/c.ts", + "file": "/src/folder/c.ts", "pastedText": [ "foo(\"bar\");" ], @@ -226,7 +226,7 @@ Info seq [hh:mm:ss:mss] request: } ], "copiedFrom": { - "file": "b.ts", + "file": "/src/b.ts", "spans": [ { "start": { @@ -243,16 +243,16 @@ Info seq [hh:mm:ss:mss] request: }, "command": "getPasteEdits" } -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json -Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /src/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /src/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (6) /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 - /folder/c.ts SVC-1-1 "foo(\"bar\");\n\n" - /a.ts Text-1 "export default function foo(name: string): void {\n console.log(name);\n}" - /b.ts Text-1 "import foo from \"./a\";\nfoo(\"bar\");" + /src/folder/c.ts SVC-1-1 "foo(\"bar\");\n\n" + /src/a.ts Text-1 "export default function foo(name: string): void {\n console.log(name);\n}" + /src/b.ts Text-1 "import foo from \"./a\";\nfoo(\"bar\");" Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] getExportInfoMap: cache miss or empty; calculating new results @@ -270,7 +270,7 @@ Info seq [hh:mm:ss:mss] response: "body": { "edits": [ { - "fileName": "/folder/c.ts", + "fileName": "/src/folder/c.ts", "textChanges": [ { "start": { @@ -302,33 +302,33 @@ Info seq [hh:mm:ss:mss] response: } After Request Projects:: -/tsconfig.json (Configured) *changed* +/src/tsconfig.json (Configured) *changed* projectStateVersion: 3 *changed* projectProgramVersion: 1 dirty: true *changed* ScriptInfos:: -/a.ts +/lib.d.ts version: Text-1 containingProjects: 1 - /tsconfig.json -/b.ts + /src/tsconfig.json +/lib.decorators.d.ts version: Text-1 containingProjects: 1 - /tsconfig.json -/folder/c.ts (Open) *changed* - version: SVC-1-2 *changed* - containingProjects: 1 - /tsconfig.json *default* -/lib.d.ts + /src/tsconfig.json +/lib.decorators.legacy.d.ts version: Text-1 containingProjects: 1 - /tsconfig.json -/lib.decorators.d.ts + /src/tsconfig.json +/src/a.ts version: Text-1 containingProjects: 1 - /tsconfig.json -/lib.decorators.legacy.d.ts + /src/tsconfig.json +/src/b.ts version: Text-1 containingProjects: 1 - /tsconfig.json + /src/tsconfig.json +/src/folder/c.ts (Open) *changed* + version: SVC-1-2 *changed* + containingProjects: 1 + /src/tsconfig.json *default* diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport1.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport1.js index 78b150a0c6675..900b099397c48 100644 --- a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport1.js +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport1.js @@ -1,6 +1,15 @@ currentDirectory:: / useCaseSensitiveFileNames: false Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist -//// [/a.ts] +//// [/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 + +//// [/src/a.ts] const abc = 10; const def = 20; export interface testInterface { @@ -8,7 +17,7 @@ export interface testInterface { def: number; } -//// [/b.ts] +//// [/src/b.ts] import * as test from "./a"; function foo(abc: test.testInterface, def: test.testInterface) { @@ -17,20 +26,11 @@ function foo(abc: test.testInterface, def: test.testInterface) { } -//// [/folder/c.ts] +//// [/src/folder/c.ts] -//// [/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 - -//// [/tsconfig.json] -{ "files": ["/folder/c.ts", "a.ts", "b.ts"] } +//// [/src/tsconfig.json] +{ "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.ts"] } Info seq [hh:mm:ss:mss] request: @@ -38,56 +38,56 @@ Info seq [hh:mm:ss:mss] request: "seq": 0, "type": "request", "arguments": { - "file": "/folder/c.ts" + "file": "/src/folder/c.ts" }, "command": "open" } -Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json -Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /src/folder/c.ts ProjectRootPath: undefined:: Result: /src/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /src/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/tsconfig.json 2000 undefined Project: /src/tsconfig.json WatchType: Config file Info seq [hh:mm:ss:mss] event: { "seq": 0, "type": "event", "event": "projectLoadingStart", "body": { - "projectName": "/tsconfig.json", - "reason": "Creating possible configured project for /folder/c.ts to open" + "projectName": "/src/tsconfig.json", + "reason": "Creating possible configured project for /src/folder/c.ts to open" } } -Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { +Info seq [hh:mm:ss:mss] Config: /src/tsconfig.json : { "rootNames": [ - "/folder/c.ts", - "/a.ts", - "/b.ts" + "/src/folder/c.ts", + "/src/a.ts", + "/src/b.ts" ], "options": { - "configFilePath": "/tsconfig.json" + "configFilePath": "/src/tsconfig.json" } } -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/b.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /src/tsconfig.json 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] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /src/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (6) /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 - /folder/c.ts SVC-1-0 "" - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /b.ts Text-1 "import * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + /src/folder/c.ts SVC-1-0 "" + /src/a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /src/b.ts Text-1 "import * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" - lib.d.ts + ../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' + ../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' folder/c.ts Part of 'files' list in tsconfig.json a.ts @@ -103,7 +103,7 @@ Info seq [hh:mm:ss:mss] event: "type": "event", "event": "projectLoadingFinish", "body": { - "projectName": "/tsconfig.json" + "projectName": "/src/tsconfig.json" } } Info seq [hh:mm:ss:mss] event: @@ -112,63 +112,63 @@ Info seq [hh:mm:ss:mss] event: "type": "event", "event": "configFileDiag", "body": { - "triggerFile": "/folder/c.ts", - "configFile": "/tsconfig.json", + "triggerFile": "/src/folder/c.ts", + "configFile": "/src/tsconfig.json", "diagnostics": [] } } -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (6) Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] Open files: -Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined -Info seq [hh:mm:ss:mss] Projects: /tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /src/folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /src/tsconfig.json After Request watchedFiles:: -/a.ts: *new* - {"pollingInterval":500} -/b.ts: *new* - {"pollingInterval":500} /lib.d.ts: *new* {"pollingInterval":500} /lib.decorators.d.ts: *new* {"pollingInterval":500} /lib.decorators.legacy.d.ts: *new* {"pollingInterval":500} -/tsconfig.json: *new* +/src/a.ts: *new* + {"pollingInterval":500} +/src/b.ts: *new* + {"pollingInterval":500} +/src/tsconfig.json: *new* {"pollingInterval":2000} Projects:: -/tsconfig.json (Configured) *new* +/src/tsconfig.json (Configured) *new* projectStateVersion: 1 projectProgramVersion: 1 ScriptInfos:: -/a.ts *new* +/lib.d.ts *new* version: Text-1 containingProjects: 1 - /tsconfig.json -/b.ts *new* + /src/tsconfig.json +/lib.decorators.d.ts *new* version: Text-1 containingProjects: 1 - /tsconfig.json -/folder/c.ts (Open) *new* - version: SVC-1-0 - containingProjects: 1 - /tsconfig.json *default* -/lib.d.ts *new* + /src/tsconfig.json +/lib.decorators.legacy.d.ts *new* version: Text-1 containingProjects: 1 - /tsconfig.json -/lib.decorators.d.ts *new* + /src/tsconfig.json +/src/a.ts *new* version: Text-1 containingProjects: 1 - /tsconfig.json -/lib.decorators.legacy.d.ts *new* + /src/tsconfig.json +/src/b.ts *new* version: Text-1 containingProjects: 1 - /tsconfig.json + /src/tsconfig.json +/src/folder/c.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /src/tsconfig.json *default* Info seq [hh:mm:ss:mss] request: { @@ -216,7 +216,7 @@ Info seq [hh:mm:ss:mss] request: "seq": 2, "type": "request", "arguments": { - "file": "/folder/c.ts", + "file": "/src/folder/c.ts", "pastedText": [ "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" ], @@ -233,7 +233,7 @@ Info seq [hh:mm:ss:mss] request: } ], "copiedFrom": { - "file": "b.ts", + "file": "/src/b.ts", "spans": [ { "start": { @@ -250,16 +250,16 @@ Info seq [hh:mm:ss:mss] request: }, "command": "getPasteEdits" } -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json -Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /src/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /src/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (6) /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 - /folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /b.ts Text-1 "import * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + /src/folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + /src/a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /src/b.ts Text-1 "import * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] response: @@ -275,7 +275,7 @@ Info seq [hh:mm:ss:mss] response: "body": { "edits": [ { - "fileName": "/folder/c.ts", + "fileName": "/src/folder/c.ts", "textChanges": [ { "start": { @@ -307,33 +307,33 @@ Info seq [hh:mm:ss:mss] response: } After Request Projects:: -/tsconfig.json (Configured) *changed* +/src/tsconfig.json (Configured) *changed* projectStateVersion: 3 *changed* projectProgramVersion: 1 dirty: true *changed* ScriptInfos:: -/a.ts +/lib.d.ts version: Text-1 containingProjects: 1 - /tsconfig.json -/b.ts + /src/tsconfig.json +/lib.decorators.d.ts version: Text-1 containingProjects: 1 - /tsconfig.json -/folder/c.ts (Open) *changed* - version: SVC-1-2 *changed* - containingProjects: 1 - /tsconfig.json *default* -/lib.d.ts + /src/tsconfig.json +/lib.decorators.legacy.d.ts version: Text-1 containingProjects: 1 - /tsconfig.json -/lib.decorators.d.ts + /src/tsconfig.json +/src/a.ts version: Text-1 containingProjects: 1 - /tsconfig.json -/lib.decorators.legacy.d.ts + /src/tsconfig.json +/src/b.ts version: Text-1 containingProjects: 1 - /tsconfig.json + /src/tsconfig.json +/src/folder/c.ts (Open) *changed* + version: SVC-1-2 *changed* + containingProjects: 1 + /src/tsconfig.json *default* diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport2.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport2.js index 9d3c98e61c02c..7722c0ecd06dd 100644 --- a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport2.js +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport2.js @@ -1,6 +1,15 @@ currentDirectory:: / useCaseSensitiveFileNames: false Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist -//// [/a.ts] +//// [/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 + +//// [/src/a.ts] const abc = 10; const def = 20; export interface testInterface { @@ -8,7 +17,7 @@ export interface testInterface { def: number; } -//// [/b.ts] +//// [/src/b.ts] import type * as test from "./a"; function foo(abc: test.testInterface, def: test.testInterface) { @@ -17,7 +26,7 @@ function foo(abc: test.testInterface, def: test.testInterface) { } -//// [/folder/c.ts] +//// [/src/folder/c.ts] import type * as test from "../a"; function foo(abc: test.abc, def: test.def) { @@ -26,17 +35,8 @@ console.log(abc); -//// [/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 - //// [/tsconfig.json] -{ "files": ["/folder/c.ts", "a.ts", "b.ts"] } +{ "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.ts"] } Info seq [hh:mm:ss:mss] request: @@ -44,11 +44,11 @@ Info seq [hh:mm:ss:mss] request: "seq": 0, "type": "request", "arguments": { - "file": "/folder/c.ts" + "file": "/src/folder/c.ts" }, "command": "open" } -Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /src/folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file Info seq [hh:mm:ss:mss] event: @@ -58,21 +58,21 @@ Info seq [hh:mm:ss:mss] event: "event": "projectLoadingStart", "body": { "projectName": "/tsconfig.json", - "reason": "Creating possible configured project for /folder/c.ts to open" + "reason": "Creating possible configured project for /src/folder/c.ts to open" } } Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { "rootNames": [ - "/folder/c.ts", - "/a.ts", - "/b.ts" + "/src/folder/c.ts", + "/src/a.ts", + "/src/b.ts" ], "options": { "configFilePath": "/tsconfig.json" } } -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/b.ts 500 undefined WatchType: Closed Script info Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json 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 @@ -83,9 +83,9 @@ Info seq [hh:mm:ss:mss] Files (6) /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 - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /folder/c.ts SVC-1-0 "import type * as test from \"../a\";\n\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\n}\n\n" - /b.ts Text-1 "import type * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + /src/a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /src/folder/c.ts SVC-1-0 "import type * as test from \"../a\";\n\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\n}\n\n" + /src/b.ts Text-1 "import type * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" lib.d.ts @@ -94,13 +94,13 @@ Info seq [hh:mm:ss:mss] Files (6) Library referenced via 'decorators' from file 'lib.d.ts' lib.decorators.legacy.d.ts Library referenced via 'decorators.legacy' from file 'lib.d.ts' - a.ts - Imported via "../a" from file 'folder/c.ts' + src/a.ts + Imported via "../a" from file 'src/folder/c.ts' Part of 'files' list in tsconfig.json - Imported via "./a" from file 'b.ts' - folder/c.ts + Imported via "./a" from file 'src/b.ts' + src/folder/c.ts Part of 'files' list in tsconfig.json - b.ts + src/b.ts Part of 'files' list in tsconfig.json Info seq [hh:mm:ss:mss] ----------------------------------------------- @@ -119,7 +119,7 @@ Info seq [hh:mm:ss:mss] event: "type": "event", "event": "configFileDiag", "body": { - "triggerFile": "/folder/c.ts", + "triggerFile": "/src/folder/c.ts", "configFile": "/tsconfig.json", "diagnostics": [] } @@ -129,20 +129,20 @@ Info seq [hh:mm:ss:mss] Files (6) Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] Open files: -Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] FileName: /src/folder/c.ts ProjectRootPath: undefined Info seq [hh:mm:ss:mss] Projects: /tsconfig.json After Request watchedFiles:: -/a.ts: *new* - {"pollingInterval":500} -/b.ts: *new* - {"pollingInterval":500} /lib.d.ts: *new* {"pollingInterval":500} /lib.decorators.d.ts: *new* {"pollingInterval":500} /lib.decorators.legacy.d.ts: *new* {"pollingInterval":500} +/src/a.ts: *new* + {"pollingInterval":500} +/src/b.ts: *new* + {"pollingInterval":500} /tsconfig.json: *new* {"pollingInterval":2000} @@ -152,30 +152,30 @@ Projects:: projectProgramVersion: 1 ScriptInfos:: -/a.ts *new* +/lib.d.ts *new* version: Text-1 containingProjects: 1 /tsconfig.json -/b.ts *new* +/lib.decorators.d.ts *new* version: Text-1 containingProjects: 1 /tsconfig.json -/folder/c.ts (Open) *new* - version: SVC-1-0 - containingProjects: 1 - /tsconfig.json *default* -/lib.d.ts *new* +/lib.decorators.legacy.d.ts *new* version: Text-1 containingProjects: 1 /tsconfig.json -/lib.decorators.d.ts *new* +/src/a.ts *new* version: Text-1 containingProjects: 1 /tsconfig.json -/lib.decorators.legacy.d.ts *new* +/src/b.ts *new* version: Text-1 containingProjects: 1 /tsconfig.json +/src/folder/c.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /tsconfig.json *default* Info seq [hh:mm:ss:mss] request: { @@ -223,7 +223,7 @@ Info seq [hh:mm:ss:mss] request: "seq": 2, "type": "request", "arguments": { - "file": "/folder/c.ts", + "file": "/src/folder/c.ts", "pastedText": [ "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" ], @@ -240,7 +240,7 @@ Info seq [hh:mm:ss:mss] request: } ], "copiedFrom": { - "file": "b.ts", + "file": "/src/b.ts", "spans": [ { "start": { @@ -264,9 +264,9 @@ Info seq [hh:mm:ss:mss] Files (6) /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 - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /folder/c.ts SVC-1-1 "import type * as test from \"../a\";\n\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\n}\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}\n" - /b.ts Text-1 "import type * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + /src/a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /src/folder/c.ts SVC-1-1 "import type * as test from \"../a\";\n\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\n}\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}\n" + /src/b.ts Text-1 "import type * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] response: @@ -282,7 +282,7 @@ Info seq [hh:mm:ss:mss] response: "body": { "edits": [ { - "fileName": "/folder/c.ts", + "fileName": "/src/folder/c.ts", "textChanges": [ { "start": { @@ -309,27 +309,27 @@ Projects:: dirty: true *changed* ScriptInfos:: -/a.ts +/lib.d.ts version: Text-1 containingProjects: 1 /tsconfig.json -/b.ts +/lib.decorators.d.ts version: Text-1 containingProjects: 1 /tsconfig.json -/folder/c.ts (Open) *changed* - version: SVC-1-2 *changed* - containingProjects: 1 - /tsconfig.json *default* -/lib.d.ts +/lib.decorators.legacy.d.ts version: Text-1 containingProjects: 1 /tsconfig.json -/lib.decorators.d.ts +/src/a.ts version: Text-1 containingProjects: 1 /tsconfig.json -/lib.decorators.legacy.d.ts +/src/b.ts version: Text-1 containingProjects: 1 /tsconfig.json +/src/folder/c.ts (Open) *changed* + version: SVC-1-2 *changed* + containingProjects: 1 + /tsconfig.json *default* diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport3.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport3.js index b5b84b42d1db7..6bf235b844d75 100644 --- a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport3.js +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport3.js @@ -1,6 +1,15 @@ currentDirectory:: / useCaseSensitiveFileNames: false Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist -//// [/a.ts] +//// [/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 + +//// [/src/a.ts] const abc = 10; const def = 20; export interface testInterface { @@ -8,7 +17,7 @@ export interface testInterface { def: number; } -//// [/b.mts] +//// [/src/b.mts] import test from "./a.js"; function foo(abc: test.testInterface, def: test.testInterface) { @@ -17,20 +26,11 @@ function foo(abc: test.testInterface, def: test.testInterface) { } -//// [/folder/c.ts] - +//// [/src/folder/c.ts] -//// [/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 - -//// [/tsconfig.json] -{ "compilerOptions": { "module": "nodenext" }, "files": ["/folder/c.ts", "a.ts", "b.mts"] } +//// [/src/tsconfig.json] +{ "compilerOptions": { "module": "nodenext" }, "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.mts"] } Info seq [hh:mm:ss:mss] request: @@ -38,44 +38,44 @@ Info seq [hh:mm:ss:mss] request: "seq": 0, "type": "request", "arguments": { - "file": "/folder/c.ts" + "file": "/src/folder/c.ts" }, "command": "open" } -Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json -Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /src/folder/c.ts ProjectRootPath: undefined:: Result: /src/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /src/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/tsconfig.json 2000 undefined Project: /src/tsconfig.json WatchType: Config file Info seq [hh:mm:ss:mss] event: { "seq": 0, "type": "event", "event": "projectLoadingStart", "body": { - "projectName": "/tsconfig.json", - "reason": "Creating possible configured project for /folder/c.ts to open" + "projectName": "/src/tsconfig.json", + "reason": "Creating possible configured project for /src/folder/c.ts to open" } } -Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { +Info seq [hh:mm:ss:mss] Config: /src/tsconfig.json : { "rootNames": [ - "/folder/c.ts", - "/a.ts", - "/b.mts" + "/src/folder/c.ts", + "/src/a.ts", + "/src/b.mts" ], "options": { "module": 199, - "configFilePath": "/tsconfig.json" + "configFilePath": "/src/tsconfig.json" } } -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.mts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.esnext.full.d.ts 500 undefined Project: /tsconfig.json WatchType: Missing file -Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/b.mts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /src/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.esnext.full.d.ts 500 undefined Project: /src/tsconfig.json WatchType: Missing file +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /src/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (3) - /folder/c.ts SVC-1-0 "" - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /b.mts Text-1 "import test from \"./a.js\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + /src/folder/c.ts SVC-1-0 "" + /src/a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /src/b.mts Text-1 "import test from \"./a.js\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" folder/c.ts @@ -95,7 +95,7 @@ Info seq [hh:mm:ss:mss] event: "type": "event", "event": "projectLoadingFinish", "body": { - "projectName": "/tsconfig.json" + "projectName": "/src/tsconfig.json" } } Info seq [hh:mm:ss:mss] event: @@ -104,8 +104,8 @@ Info seq [hh:mm:ss:mss] event: "type": "event", "event": "configFileDiag", "body": { - "triggerFile": "/folder/c.ts", - "configFile": "/tsconfig.json", + "triggerFile": "/src/folder/c.ts", + "configFile": "/src/tsconfig.json", "diagnostics": [ { "text": "File '/lib.esnext.full.d.ts' not found.\n The file is in the program because:\n Default library for target 'esnext'", @@ -155,42 +155,42 @@ Info seq [hh:mm:ss:mss] event: ] } } -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (3) Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] Open files: -Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined -Info seq [hh:mm:ss:mss] Projects: /tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /src/folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /src/tsconfig.json After Request watchedFiles:: -/a.ts: *new* +/lib.esnext.full.d.ts: *new* {"pollingInterval":500} -/b.mts: *new* +/src/a.ts: *new* {"pollingInterval":500} -/lib.esnext.full.d.ts: *new* +/src/b.mts: *new* {"pollingInterval":500} -/tsconfig.json: *new* +/src/tsconfig.json: *new* {"pollingInterval":2000} Projects:: -/tsconfig.json (Configured) *new* +/src/tsconfig.json (Configured) *new* projectStateVersion: 1 projectProgramVersion: 1 ScriptInfos:: -/a.ts *new* +/src/a.ts *new* version: Text-1 containingProjects: 1 - /tsconfig.json -/b.mts *new* + /src/tsconfig.json +/src/b.mts *new* version: Text-1 containingProjects: 1 - /tsconfig.json -/folder/c.ts (Open) *new* + /src/tsconfig.json +/src/folder/c.ts (Open) *new* version: SVC-1-0 containingProjects: 1 - /tsconfig.json *default* + /src/tsconfig.json *default* Info seq [hh:mm:ss:mss] request: { @@ -238,7 +238,7 @@ Info seq [hh:mm:ss:mss] request: "seq": 2, "type": "request", "arguments": { - "file": "/folder/c.ts", + "file": "/src/folder/c.ts", "pastedText": [ "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" ], @@ -255,7 +255,7 @@ Info seq [hh:mm:ss:mss] request: } ], "copiedFrom": { - "file": "b.mts", + "file": "/src/b.mts", "spans": [ { "start": { @@ -272,13 +272,13 @@ Info seq [hh:mm:ss:mss] request: }, "command": "getPasteEdits" } -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json -Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /src/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /src/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (3) - /folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /b.mts Text-1 "import test from \"./a.js\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + /src/folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + /src/a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /src/b.mts Text-1 "import test from \"./a.js\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] response: @@ -294,7 +294,7 @@ Info seq [hh:mm:ss:mss] response: "body": { "edits": [ { - "fileName": "/folder/c.ts", + "fileName": "/src/folder/c.ts", "textChanges": [ { "start": { @@ -326,21 +326,21 @@ Info seq [hh:mm:ss:mss] response: } After Request Projects:: -/tsconfig.json (Configured) *changed* +/src/tsconfig.json (Configured) *changed* projectStateVersion: 3 *changed* projectProgramVersion: 1 dirty: true *changed* ScriptInfos:: -/a.ts +/src/a.ts version: Text-1 containingProjects: 1 - /tsconfig.json -/b.mts + /src/tsconfig.json +/src/b.mts version: Text-1 containingProjects: 1 - /tsconfig.json -/folder/c.ts (Open) *changed* + /src/tsconfig.json +/src/folder/c.ts (Open) *changed* version: SVC-1-2 *changed* containingProjects: 1 - /tsconfig.json *default* + /src/tsconfig.json *default* diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport4.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport4.js index de49a02459f71..e3795dbabaaad 100644 --- a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport4.js +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport4.js @@ -1,6 +1,15 @@ currentDirectory:: / useCaseSensitiveFileNames: false Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist -//// [/a.ts] +//// [/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 + +//// [/src/a.ts] const abc = 10; const def = 20; export interface testInterface { @@ -8,7 +17,7 @@ export interface testInterface { def: number; } -//// [/b.ts] +//// [/src/b.ts] import test = require("./a"); function foo(abc: test.testInterface, def: test.testInterface) { @@ -17,20 +26,11 @@ function foo(abc: test.testInterface, def: test.testInterface) { } -//// [/folder/c.ts] +//// [/src/folder/c.ts] -//// [/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 - -//// [/tsconfig.json] -{ "compilerOptions": { "module": "commonjs" }, "files": ["/folder/c.ts", "a.ts", "b.ts"] } +//// [/src/tsconfig.json] +{ "compilerOptions": { "module": "commonjs" }, "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.ts"] } Info seq [hh:mm:ss:mss] request: @@ -38,57 +38,57 @@ Info seq [hh:mm:ss:mss] request: "seq": 0, "type": "request", "arguments": { - "file": "/folder/c.ts" + "file": "/src/folder/c.ts" }, "command": "open" } -Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json -Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /src/folder/c.ts ProjectRootPath: undefined:: Result: /src/tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /src/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/tsconfig.json 2000 undefined Project: /src/tsconfig.json WatchType: Config file Info seq [hh:mm:ss:mss] event: { "seq": 0, "type": "event", "event": "projectLoadingStart", "body": { - "projectName": "/tsconfig.json", - "reason": "Creating possible configured project for /folder/c.ts to open" + "projectName": "/src/tsconfig.json", + "reason": "Creating possible configured project for /src/folder/c.ts to open" } } -Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { +Info seq [hh:mm:ss:mss] Config: /src/tsconfig.json : { "rootNames": [ - "/folder/c.ts", - "/a.ts", - "/b.ts" + "/src/folder/c.ts", + "/src/a.ts", + "/src/b.ts" ], "options": { "module": 1, - "configFilePath": "/tsconfig.json" + "configFilePath": "/src/tsconfig.json" } } -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/b.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /src/tsconfig.json 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] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /src/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (6) /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 - /folder/c.ts SVC-1-0 "" - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /b.ts Text-1 "import test = require(\"./a\");\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + /src/folder/c.ts SVC-1-0 "" + /src/a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /src/b.ts Text-1 "import test = require(\"./a\");\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" - lib.d.ts + ../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' + ../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' folder/c.ts Part of 'files' list in tsconfig.json a.ts @@ -104,7 +104,7 @@ Info seq [hh:mm:ss:mss] event: "type": "event", "event": "projectLoadingFinish", "body": { - "projectName": "/tsconfig.json" + "projectName": "/src/tsconfig.json" } } Info seq [hh:mm:ss:mss] event: @@ -113,63 +113,63 @@ Info seq [hh:mm:ss:mss] event: "type": "event", "event": "configFileDiag", "body": { - "triggerFile": "/folder/c.ts", - "configFile": "/tsconfig.json", + "triggerFile": "/src/folder/c.ts", + "configFile": "/src/tsconfig.json", "diagnostics": [] } } -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (6) Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] Open files: -Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined -Info seq [hh:mm:ss:mss] Projects: /tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /src/folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /src/tsconfig.json After Request watchedFiles:: -/a.ts: *new* - {"pollingInterval":500} -/b.ts: *new* - {"pollingInterval":500} /lib.d.ts: *new* {"pollingInterval":500} /lib.decorators.d.ts: *new* {"pollingInterval":500} /lib.decorators.legacy.d.ts: *new* {"pollingInterval":500} -/tsconfig.json: *new* +/src/a.ts: *new* + {"pollingInterval":500} +/src/b.ts: *new* + {"pollingInterval":500} +/src/tsconfig.json: *new* {"pollingInterval":2000} Projects:: -/tsconfig.json (Configured) *new* +/src/tsconfig.json (Configured) *new* projectStateVersion: 1 projectProgramVersion: 1 ScriptInfos:: -/a.ts *new* +/lib.d.ts *new* version: Text-1 containingProjects: 1 - /tsconfig.json -/b.ts *new* + /src/tsconfig.json +/lib.decorators.d.ts *new* version: Text-1 containingProjects: 1 - /tsconfig.json -/folder/c.ts (Open) *new* - version: SVC-1-0 - containingProjects: 1 - /tsconfig.json *default* -/lib.d.ts *new* + /src/tsconfig.json +/lib.decorators.legacy.d.ts *new* version: Text-1 containingProjects: 1 - /tsconfig.json -/lib.decorators.d.ts *new* + /src/tsconfig.json +/src/a.ts *new* version: Text-1 containingProjects: 1 - /tsconfig.json -/lib.decorators.legacy.d.ts *new* + /src/tsconfig.json +/src/b.ts *new* version: Text-1 containingProjects: 1 - /tsconfig.json + /src/tsconfig.json +/src/folder/c.ts (Open) *new* + version: SVC-1-0 + containingProjects: 1 + /src/tsconfig.json *default* Info seq [hh:mm:ss:mss] request: { @@ -217,7 +217,7 @@ Info seq [hh:mm:ss:mss] request: "seq": 2, "type": "request", "arguments": { - "file": "/folder/c.ts", + "file": "/src/folder/c.ts", "pastedText": [ "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" ], @@ -234,7 +234,7 @@ Info seq [hh:mm:ss:mss] request: } ], "copiedFrom": { - "file": "b.ts", + "file": "/src/b.ts", "spans": [ { "start": { @@ -251,16 +251,16 @@ Info seq [hh:mm:ss:mss] request: }, "command": "getPasteEdits" } -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json -Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /src/tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /src/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (6) /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 - /folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /b.ts Text-1 "import test = require(\"./a\");\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + /src/folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + /src/a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /src/b.ts Text-1 "import test = require(\"./a\");\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] response: @@ -276,7 +276,7 @@ Info seq [hh:mm:ss:mss] response: "body": { "edits": [ { - "fileName": "/folder/c.ts", + "fileName": "/src/folder/c.ts", "textChanges": [ { "start": { @@ -308,33 +308,33 @@ Info seq [hh:mm:ss:mss] response: } After Request Projects:: -/tsconfig.json (Configured) *changed* +/src/tsconfig.json (Configured) *changed* projectStateVersion: 3 *changed* projectProgramVersion: 1 dirty: true *changed* ScriptInfos:: -/a.ts +/lib.d.ts version: Text-1 containingProjects: 1 - /tsconfig.json -/b.ts + /src/tsconfig.json +/lib.decorators.d.ts version: Text-1 containingProjects: 1 - /tsconfig.json -/folder/c.ts (Open) *changed* - version: SVC-1-2 *changed* - containingProjects: 1 - /tsconfig.json *default* -/lib.d.ts + /src/tsconfig.json +/lib.decorators.legacy.d.ts version: Text-1 containingProjects: 1 - /tsconfig.json -/lib.decorators.d.ts + /src/tsconfig.json +/src/a.ts version: Text-1 containingProjects: 1 - /tsconfig.json -/lib.decorators.legacy.d.ts + /src/tsconfig.json +/src/b.ts version: Text-1 containingProjects: 1 - /tsconfig.json + /src/tsconfig.json +/src/folder/c.ts (Open) *changed* + version: SVC-1-2 *changed* + containingProjects: 1 + /src/tsconfig.json *default* diff --git a/tests/cases/fourslash/server/pasteEdits_defaultExport.ts b/tests/cases/fourslash/server/pasteEdits_defaultExport.ts index 3839bc6a08e2f..fd2bbd0f30a97 100644 --- a/tests/cases/fourslash/server/pasteEdits_defaultExport.ts +++ b/tests/cases/fourslash/server/pasteEdits_defaultExport.ts @@ -1,30 +1,30 @@ /// -// @Filename: /folder/c.ts +// @Filename: /src/folder/c.ts //// [||] //// -// @Filename: /a.ts +// @Filename: /src/a.ts //// export default function foo(name: string): void { //// console.log(name); //// } -// @Filename: /b.ts +// @Filename: /src/b.ts //// import foo from "./a"; //// [|foo("bar");|] -// @Filename: /tsconfig.json -////{ "files": ["/folder/c.ts", "a.ts", "b.ts"] } +// @Filename: /src/tsconfig.json +////{ "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.ts"] } const range = test.ranges(); verify.pasteEdits({ args: { pastedText: [`foo("bar");`], pasteLocations: [range[0]], - copiedFrom: { file: "b.ts", range: [range[1]] }, + copiedFrom: { file: "/src/b.ts", range: [range[1]] }, }, newFileContents: { - "/folder/c.ts": + "/src/folder/c.ts": `import foo from "../a"; foo("bar"); diff --git a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport1.ts b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport1.ts index 63b43b023153b..bd063e9db73cc 100644 --- a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport1.ts +++ b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport1.ts @@ -1,10 +1,10 @@ /// -// @Filename: /folder/c.ts +// @Filename: /src/folder/c.ts //// [||] -// @Filename: /a.ts +// @Filename: /src/a.ts //// const abc = 10; //// const def = 20; //// export interface testInterface { @@ -12,7 +12,7 @@ //// def: number; //// } -// @Filename: /b.ts +// @Filename: /src/b.ts //// import * as test from "./a"; //// //// [|function foo(abc: test.testInterface, def: test.testInterface) { @@ -21,8 +21,8 @@ //// }|] //// -// @Filename: /tsconfig.json -////{ "files": ["/folder/c.ts", "a.ts", "b.ts"] } +// @Filename: /src/tsconfig.json +////{ "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.ts"] } const range = test.ranges(); verify.pasteEdits({ @@ -32,10 +32,10 @@ console.log(abc); console.log(def); }`], pasteLocations: [range[0]], - copiedFrom: { file: "b.ts", range: [range[1]] }, + copiedFrom: { file: "/src/b.ts", range: [range[1]] }, }, newFileContents: { - "/folder/c.ts": + "/src/folder/c.ts": `import * as test from "../a"; function foo(abc: test.abc, def: test.def) { diff --git a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport2.ts b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport2.ts index 6190112c24a45..f8dc5461d22be 100644 --- a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport2.ts +++ b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport2.ts @@ -1,6 +1,6 @@ /// -// @Filename: /folder/c.ts +// @Filename: /src/folder/c.ts //// import type * as test from "../a"; //// //// function foo(abc: test.abc, def: test.def) { @@ -9,7 +9,7 @@ //// [||] //// -// @Filename: /a.ts +// @Filename: /src/a.ts //// const abc = 10; //// const def = 20; //// export interface testInterface { @@ -17,7 +17,7 @@ //// def: number; //// } -// @Filename: /b.ts +// @Filename: /src/b.ts //// import type * as test from "./a"; //// //// [|function foo(abc: test.testInterface, def: test.testInterface) { @@ -27,7 +27,7 @@ //// // @Filename: /tsconfig.json -////{ "files": ["/folder/c.ts", "a.ts", "b.ts"] } +////{ "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.ts"] } const range = test.ranges(); verify.pasteEdits({ @@ -37,10 +37,10 @@ console.log(abc); console.log(def); }`], pasteLocations: [range[0]], - copiedFrom: { file: "b.ts", range: [range[1]] }, + copiedFrom: { file: "/src/b.ts", range: [range[1]] }, }, newFileContents: { - "/folder/c.ts": + "/src/folder/c.ts": `import type * as test from "../a"; function foo(abc: test.abc, def: test.def) { diff --git a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport3.ts b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport3.ts index c3aabe1a2f349..4dc006c9fef5e 100644 --- a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport3.ts +++ b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport3.ts @@ -1,10 +1,10 @@ /// -// @Filename: /folder/c.ts +// @Filename: /src/folder/c.ts //// [||] -// @Filename: /a.ts +// @Filename: /src/a.ts //// const abc = 10; //// const def = 20; //// export interface testInterface { @@ -12,7 +12,7 @@ //// def: number; //// } -// @Filename: /b.mts +// @Filename: /src/b.mts //// import test from "./a.js"; //// //// [|function foo(abc: test.testInterface, def: test.testInterface) { @@ -21,8 +21,8 @@ //// }|] //// -// @Filename: /tsconfig.json -////{ "compilerOptions": { "module": "nodenext" }, "files": ["/folder/c.ts", "a.ts", "b.mts"] } +// @Filename: /src/tsconfig.json +////{ "compilerOptions": { "module": "nodenext" }, "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.mts"] } const range = test.ranges(); verify.pasteEdits({ @@ -32,10 +32,10 @@ console.log(abc); console.log(def); }`], pasteLocations: [range[0]], - copiedFrom: { file: "b.mts", range: [range[1]] }, + copiedFrom: { file: "/src/b.mts", range: [range[1]] }, }, newFileContents: { - "/folder/c.ts": + "/src/folder/c.ts": `import test from "../a"; function foo(abc: test.abc, def: test.def) { diff --git a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport4.ts b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport4.ts index 1238634168eb0..a9cebf9ba1c17 100644 --- a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport4.ts +++ b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport4.ts @@ -1,9 +1,9 @@ /// -// @Filename: /folder/c.ts +// @Filename: /src/folder/c.ts //// [||] -// @Filename: /a.ts +// @Filename: /src/a.ts //// const abc = 10; //// const def = 20; //// export interface testInterface { @@ -11,7 +11,7 @@ //// def: number; //// } -// @Filename: /b.ts +// @Filename: /src/b.ts //// import test = require("./a"); //// //// [|function foo(abc: test.testInterface, def: test.testInterface) { @@ -20,8 +20,8 @@ //// }|] //// -// @Filename: /tsconfig.json -////{ "compilerOptions": { "module": "commonjs" }, "files": ["/folder/c.ts", "a.ts", "b.ts"] } +// @Filename: /src/tsconfig.json +////{ "compilerOptions": { "module": "commonjs" }, "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.ts"] } const range = test.ranges(); verify.pasteEdits({ @@ -31,10 +31,10 @@ console.log(abc); console.log(def); }`], pasteLocations: [range[0]], - copiedFrom: { file: "b.ts", range: [range[1]] }, + copiedFrom: { file: "/src/b.ts", range: [range[1]] }, }, newFileContents: { - "/folder/c.ts": + "/src/folder/c.ts": `import * as test from "../a"; function foo(abc: test.abc, def: test.def) { From b21b4a1f0cd8eaa3b8fc49a04fdffbf036a0190c Mon Sep 17 00:00:00 2001 From: navya9singh Date: Mon, 15 Jul 2024 12:18:32 -0700 Subject: [PATCH 11/15] fixing tests and baselines --- src/services/refactors/moveToFile.ts | 2 +- .../pasteEdits_defaultExport.js | 188 +++++++------ .../pasteEdits_externalModuleSymbolImport1.js | 187 +++++++------ .../pasteEdits_externalModuleSymbolImport2.js | 230 +++++++++------- .../pasteEdits_externalModuleSymbolImport3.js | 253 +++++++++--------- .../server/pasteEdits_defaultExport.ts | 22 +- .../pasteEdits_externalModuleSymbolImport1.ts | 14 +- .../pasteEdits_externalModuleSymbolImport2.ts | 30 +-- .../pasteEdits_externalModuleSymbolImport3.ts | 20 +- .../pasteEdits_externalModuleSymbolImport4.ts | 46 ---- 10 files changed, 491 insertions(+), 501 deletions(-) delete mode 100644 tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport4.ts diff --git a/src/services/refactors/moveToFile.ts b/src/services/refactors/moveToFile.ts index 13f64f6e8b7cc..98e6adad9095b 100644 --- a/src/services/refactors/moveToFile.ts +++ b/src/services/refactors/moveToFile.ts @@ -964,7 +964,7 @@ function inferNewFileName(importsFromNewFile: Map, movedSymbols function forEachReference(node: Node, checker: TypeChecker, enclosingRange: TextRange | undefined, onReference: (s: Symbol, isValidTypeOnlyUseSite: boolean) => void) { node.forEachChild(function cb(node) { if (isIdentifier(node) && !isDeclarationName(node)) { - if (enclosingRange && !rangeContainsRange(enclosingRange, node)) { + if (enclosingRange && !rangeContainsRange(enclosingRange, { pos: node.getStart(), end: node.getEnd() })) { return; } const sym = checker.getSymbolAtLocation(node); diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_defaultExport.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_defaultExport.js index af92fc0de5ccb..206d100da0bcf 100644 --- a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_defaultExport.js +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_defaultExport.js @@ -1,29 +1,28 @@ 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 - -//// [/src/a.ts] +//// [/a.ts] export default function foo(name: string): void { console.log(name); } -//// [/src/b.ts] +//// [/b.ts] import foo from "./a"; foo("bar"); -//// [/src/folder/c.ts] - +//// [/folder/c.ts] + + +//// [/lib.d.ts] +lib.d.ts-Text +//// [/lib.decorators.d.ts] +lib.decorators.d.ts-Text -//// [/src/tsconfig.json] -{ "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.ts"] } +//// [/lib.decorators.legacy.d.ts] +lib.decorators.legacy.d.ts-Text + +//// [/tsconfig.json] +{ "files": ["/folder/c.ts", "/a.ts", "/b.ts"] } Info seq [hh:mm:ss:mss] request: @@ -31,56 +30,56 @@ Info seq [hh:mm:ss:mss] request: "seq": 0, "type": "request", "arguments": { - "file": "/src/folder/c.ts" + "file": "/folder/c.ts" }, "command": "open" } -Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /src/folder/c.ts ProjectRootPath: undefined:: Result: /src/tsconfig.json -Info seq [hh:mm:ss:mss] Creating configuration project /src/tsconfig.json -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/tsconfig.json 2000 undefined Project: /src/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file Info seq [hh:mm:ss:mss] event: { "seq": 0, "type": "event", "event": "projectLoadingStart", "body": { - "projectName": "/src/tsconfig.json", - "reason": "Creating possible configured project for /src/folder/c.ts to open" + "projectName": "/tsconfig.json", + "reason": "Creating possible configured project for /folder/c.ts to open" } } -Info seq [hh:mm:ss:mss] Config: /src/tsconfig.json : { +Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { "rootNames": [ - "/src/folder/c.ts", - "/src/a.ts", - "/src/b.ts" + "/folder/c.ts", + "/a.ts", + "/b.ts" ], "options": { - "configFilePath": "/src/tsconfig.json" + "configFilePath": "/tsconfig.json" } } -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/b.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /src/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json 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] Finishing updateGraphWorker: Project: /src/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (6) /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 - /src/folder/c.ts SVC-1-0 "\n" - /src/a.ts Text-1 "export default function foo(name: string): void {\n console.log(name);\n}" - /src/b.ts Text-1 "import foo from \"./a\";\nfoo(\"bar\");" + /folder/c.ts SVC-1-0 "" + /a.ts Text-1 "export default function foo(name: string): void {\n console.log(name);\n}" + /b.ts Text-1 "import foo from \"./a\";\nfoo(\"bar\");" - ../lib.d.ts + 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' + 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' folder/c.ts Part of 'files' list in tsconfig.json a.ts @@ -96,7 +95,7 @@ Info seq [hh:mm:ss:mss] event: "type": "event", "event": "projectLoadingFinish", "body": { - "projectName": "/src/tsconfig.json" + "projectName": "/tsconfig.json" } } Info seq [hh:mm:ss:mss] event: @@ -105,63 +104,74 @@ Info seq [hh:mm:ss:mss] event: "type": "event", "event": "configFileDiag", "body": { - "triggerFile": "/src/folder/c.ts", - "configFile": "/src/tsconfig.json", + "triggerFile": "/folder/c.ts", + "configFile": "/tsconfig.json", "diagnostics": [] } } -Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (6) Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] Open files: -Info seq [hh:mm:ss:mss] FileName: /src/folder/c.ts ProjectRootPath: undefined -Info seq [hh:mm:ss:mss] Projects: /src/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "open", + "request_seq": 0, + "success": true, + "performanceData": { + "updateGraphDurationMs": * + } + } After Request watchedFiles:: +/a.ts: *new* + {"pollingInterval":500} +/b.ts: *new* + {"pollingInterval":500} /lib.d.ts: *new* {"pollingInterval":500} /lib.decorators.d.ts: *new* {"pollingInterval":500} /lib.decorators.legacy.d.ts: *new* {"pollingInterval":500} -/src/a.ts: *new* - {"pollingInterval":500} -/src/b.ts: *new* - {"pollingInterval":500} -/src/tsconfig.json: *new* +/tsconfig.json: *new* {"pollingInterval":2000} Projects:: -/src/tsconfig.json (Configured) *new* +/tsconfig.json (Configured) *new* projectStateVersion: 1 projectProgramVersion: 1 ScriptInfos:: -/lib.d.ts *new* +/a.ts *new* version: Text-1 containingProjects: 1 - /src/tsconfig.json -/lib.decorators.d.ts *new* + /tsconfig.json +/b.ts *new* version: Text-1 containingProjects: 1 - /src/tsconfig.json -/lib.decorators.legacy.d.ts *new* - version: Text-1 + /tsconfig.json +/folder/c.ts (Open) *new* + version: SVC-1-0 containingProjects: 1 - /src/tsconfig.json -/src/a.ts *new* + /tsconfig.json *default* +/lib.d.ts *new* version: Text-1 containingProjects: 1 - /src/tsconfig.json -/src/b.ts *new* + /tsconfig.json +/lib.decorators.d.ts *new* version: Text-1 containingProjects: 1 - /src/tsconfig.json -/src/folder/c.ts (Open) *new* - version: SVC-1-0 + /tsconfig.json +/lib.decorators.legacy.d.ts *new* + version: Text-1 containingProjects: 1 - /src/tsconfig.json *default* + /tsconfig.json Info seq [hh:mm:ss:mss] request: { @@ -209,7 +219,7 @@ Info seq [hh:mm:ss:mss] request: "seq": 2, "type": "request", "arguments": { - "file": "/src/folder/c.ts", + "file": "/folder/c.ts", "pastedText": [ "foo(\"bar\");" ], @@ -226,7 +236,7 @@ Info seq [hh:mm:ss:mss] request: } ], "copiedFrom": { - "file": "/src/b.ts", + "file": "/b.ts", "spans": [ { "start": { @@ -243,16 +253,16 @@ Info seq [hh:mm:ss:mss] request: }, "command": "getPasteEdits" } -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /src/tsconfig.json -Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /src/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (6) /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 - /src/folder/c.ts SVC-1-1 "foo(\"bar\");\n\n" - /src/a.ts Text-1 "export default function foo(name: string): void {\n console.log(name);\n}" - /src/b.ts Text-1 "import foo from \"./a\";\nfoo(\"bar\");" + /folder/c.ts SVC-1-1 "foo(\"bar\");" + /a.ts Text-1 "export default function foo(name: string): void {\n console.log(name);\n}" + /b.ts Text-1 "import foo from \"./a\";\nfoo(\"bar\");" Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] getExportInfoMap: cache miss or empty; calculating new results @@ -270,7 +280,7 @@ Info seq [hh:mm:ss:mss] response: "body": { "edits": [ { - "fileName": "/src/folder/c.ts", + "fileName": "/folder/c.ts", "textChanges": [ { "start": { @@ -302,33 +312,33 @@ Info seq [hh:mm:ss:mss] response: } After Request Projects:: -/src/tsconfig.json (Configured) *changed* +/tsconfig.json (Configured) *changed* projectStateVersion: 3 *changed* projectProgramVersion: 1 dirty: true *changed* ScriptInfos:: -/lib.d.ts +/a.ts version: Text-1 containingProjects: 1 - /src/tsconfig.json -/lib.decorators.d.ts + /tsconfig.json +/b.ts version: Text-1 containingProjects: 1 - /src/tsconfig.json -/lib.decorators.legacy.d.ts - version: Text-1 + /tsconfig.json +/folder/c.ts (Open) *changed* + version: SVC-1-2 *changed* containingProjects: 1 - /src/tsconfig.json -/src/a.ts + /tsconfig.json *default* +/lib.d.ts version: Text-1 containingProjects: 1 - /src/tsconfig.json -/src/b.ts + /tsconfig.json +/lib.decorators.d.ts version: Text-1 containingProjects: 1 - /src/tsconfig.json -/src/folder/c.ts (Open) *changed* - version: SVC-1-2 *changed* + /tsconfig.json +/lib.decorators.legacy.d.ts + version: Text-1 containingProjects: 1 - /src/tsconfig.json *default* + /tsconfig.json diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport1.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport1.js index 900b099397c48..be2e7368e4696 100644 --- a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport1.js +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport1.js @@ -1,15 +1,6 @@ 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 - -//// [/src/a.ts] +//// [/a.ts] const abc = 10; const def = 20; export interface testInterface { @@ -17,7 +8,7 @@ export interface testInterface { def: number; } -//// [/src/b.ts] +//// [/b.ts] import * as test from "./a"; function foo(abc: test.testInterface, def: test.testInterface) { @@ -26,11 +17,20 @@ function foo(abc: test.testInterface, def: test.testInterface) { } -//// [/src/folder/c.ts] +//// [/folder/c.ts] + + +//// [/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 -//// [/src/tsconfig.json] -{ "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.ts"] } +//// [/tsconfig.json] +{ "files": ["/folder/c.ts", "/a.ts", "/b.ts"] } Info seq [hh:mm:ss:mss] request: @@ -38,56 +38,56 @@ Info seq [hh:mm:ss:mss] request: "seq": 0, "type": "request", "arguments": { - "file": "/src/folder/c.ts" + "file": "/folder/c.ts" }, "command": "open" } -Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /src/folder/c.ts ProjectRootPath: undefined:: Result: /src/tsconfig.json -Info seq [hh:mm:ss:mss] Creating configuration project /src/tsconfig.json -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/tsconfig.json 2000 undefined Project: /src/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file Info seq [hh:mm:ss:mss] event: { "seq": 0, "type": "event", "event": "projectLoadingStart", "body": { - "projectName": "/src/tsconfig.json", - "reason": "Creating possible configured project for /src/folder/c.ts to open" + "projectName": "/tsconfig.json", + "reason": "Creating possible configured project for /folder/c.ts to open" } } -Info seq [hh:mm:ss:mss] Config: /src/tsconfig.json : { +Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { "rootNames": [ - "/src/folder/c.ts", - "/src/a.ts", - "/src/b.ts" + "/folder/c.ts", + "/a.ts", + "/b.ts" ], "options": { - "configFilePath": "/src/tsconfig.json" + "configFilePath": "/tsconfig.json" } } -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/b.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /src/tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json 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] Finishing updateGraphWorker: Project: /src/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (6) /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 - /src/folder/c.ts SVC-1-0 "" - /src/a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /src/b.ts Text-1 "import * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + /folder/c.ts SVC-1-0 "" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /b.ts Text-1 "import * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" - ../lib.d.ts + 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' + 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' folder/c.ts Part of 'files' list in tsconfig.json a.ts @@ -103,7 +103,7 @@ Info seq [hh:mm:ss:mss] event: "type": "event", "event": "projectLoadingFinish", "body": { - "projectName": "/src/tsconfig.json" + "projectName": "/tsconfig.json" } } Info seq [hh:mm:ss:mss] event: @@ -112,63 +112,74 @@ Info seq [hh:mm:ss:mss] event: "type": "event", "event": "configFileDiag", "body": { - "triggerFile": "/src/folder/c.ts", - "configFile": "/src/tsconfig.json", + "triggerFile": "/folder/c.ts", + "configFile": "/tsconfig.json", "diagnostics": [] } } -Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (6) Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] Open files: -Info seq [hh:mm:ss:mss] FileName: /src/folder/c.ts ProjectRootPath: undefined -Info seq [hh:mm:ss:mss] Projects: /src/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "open", + "request_seq": 0, + "success": true, + "performanceData": { + "updateGraphDurationMs": * + } + } After Request watchedFiles:: +/a.ts: *new* + {"pollingInterval":500} +/b.ts: *new* + {"pollingInterval":500} /lib.d.ts: *new* {"pollingInterval":500} /lib.decorators.d.ts: *new* {"pollingInterval":500} /lib.decorators.legacy.d.ts: *new* {"pollingInterval":500} -/src/a.ts: *new* - {"pollingInterval":500} -/src/b.ts: *new* - {"pollingInterval":500} -/src/tsconfig.json: *new* +/tsconfig.json: *new* {"pollingInterval":2000} Projects:: -/src/tsconfig.json (Configured) *new* +/tsconfig.json (Configured) *new* projectStateVersion: 1 projectProgramVersion: 1 ScriptInfos:: -/lib.d.ts *new* +/a.ts *new* version: Text-1 containingProjects: 1 - /src/tsconfig.json -/lib.decorators.d.ts *new* + /tsconfig.json +/b.ts *new* version: Text-1 containingProjects: 1 - /src/tsconfig.json -/lib.decorators.legacy.d.ts *new* - version: Text-1 + /tsconfig.json +/folder/c.ts (Open) *new* + version: SVC-1-0 containingProjects: 1 - /src/tsconfig.json -/src/a.ts *new* + /tsconfig.json *default* +/lib.d.ts *new* version: Text-1 containingProjects: 1 - /src/tsconfig.json -/src/b.ts *new* + /tsconfig.json +/lib.decorators.d.ts *new* version: Text-1 containingProjects: 1 - /src/tsconfig.json -/src/folder/c.ts (Open) *new* - version: SVC-1-0 + /tsconfig.json +/lib.decorators.legacy.d.ts *new* + version: Text-1 containingProjects: 1 - /src/tsconfig.json *default* + /tsconfig.json Info seq [hh:mm:ss:mss] request: { @@ -216,7 +227,7 @@ Info seq [hh:mm:ss:mss] request: "seq": 2, "type": "request", "arguments": { - "file": "/src/folder/c.ts", + "file": "/folder/c.ts", "pastedText": [ "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" ], @@ -233,7 +244,7 @@ Info seq [hh:mm:ss:mss] request: } ], "copiedFrom": { - "file": "/src/b.ts", + "file": "/b.ts", "spans": [ { "start": { @@ -250,16 +261,16 @@ Info seq [hh:mm:ss:mss] request: }, "command": "getPasteEdits" } -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /src/tsconfig.json -Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /src/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) Info seq [hh:mm:ss:mss] Files (6) /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 - /src/folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - /src/a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /src/b.ts Text-1 "import * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" + /folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /b.ts Text-1 "import * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] response: @@ -275,7 +286,7 @@ Info seq [hh:mm:ss:mss] response: "body": { "edits": [ { - "fileName": "/src/folder/c.ts", + "fileName": "/folder/c.ts", "textChanges": [ { "start": { @@ -307,33 +318,33 @@ Info seq [hh:mm:ss:mss] response: } After Request Projects:: -/src/tsconfig.json (Configured) *changed* +/tsconfig.json (Configured) *changed* projectStateVersion: 3 *changed* projectProgramVersion: 1 dirty: true *changed* ScriptInfos:: -/lib.d.ts +/a.ts version: Text-1 containingProjects: 1 - /src/tsconfig.json -/lib.decorators.d.ts + /tsconfig.json +/b.ts version: Text-1 containingProjects: 1 - /src/tsconfig.json -/lib.decorators.legacy.d.ts - version: Text-1 + /tsconfig.json +/folder/c.ts (Open) *changed* + version: SVC-1-2 *changed* containingProjects: 1 - /src/tsconfig.json -/src/a.ts + /tsconfig.json *default* +/lib.d.ts version: Text-1 containingProjects: 1 - /src/tsconfig.json -/src/b.ts + /tsconfig.json +/lib.decorators.d.ts version: Text-1 containingProjects: 1 - /src/tsconfig.json -/src/folder/c.ts (Open) *changed* - version: SVC-1-2 *changed* + /tsconfig.json +/lib.decorators.legacy.d.ts + version: Text-1 containingProjects: 1 - /src/tsconfig.json *default* + /tsconfig.json diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport2.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport2.js index 7722c0ecd06dd..86b6ff1e1be37 100644 --- a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport2.js +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport2.js @@ -1,15 +1,6 @@ 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 - -//// [/src/a.ts] +//// [/a.ts] const abc = 10; const def = 20; export interface testInterface { @@ -17,8 +8,8 @@ export interface testInterface { def: number; } -//// [/src/b.ts] -import type * as test from "./a"; +//// [/b.mts] +import test from "./a.js"; function foo(abc: test.testInterface, def: test.testInterface) { console.log(abc); @@ -26,17 +17,20 @@ function foo(abc: test.testInterface, def: test.testInterface) { } -//// [/src/folder/c.ts] -import type * as test from "../a"; - -function foo(abc: test.abc, def: test.def) { -console.log(abc); -} - +//// [/folder/c.ts] + + +//// [/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 //// [/tsconfig.json] -{ "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.ts"] } +{ "compilerOptions": { "module": "nodenext" }, "files": ["/folder/c.ts", "/a.ts", "/b.mts"] } Info seq [hh:mm:ss:mss] request: @@ -44,11 +38,11 @@ Info seq [hh:mm:ss:mss] request: "seq": 0, "type": "request", "arguments": { - "file": "/src/folder/c.ts" + "file": "/folder/c.ts" }, "command": "open" } -Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /src/folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file Info seq [hh:mm:ss:mss] event: @@ -58,49 +52,40 @@ Info seq [hh:mm:ss:mss] event: "event": "projectLoadingStart", "body": { "projectName": "/tsconfig.json", - "reason": "Creating possible configured project for /src/folder/c.ts to open" + "reason": "Creating possible configured project for /folder/c.ts to open" } } Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { "rootNames": [ - "/src/folder/c.ts", - "/src/a.ts", - "/src/b.ts" + "/folder/c.ts", + "/a.ts", + "/b.mts" ], "options": { + "module": 199, "configFilePath": "/tsconfig.json" } } -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/b.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.mts 500 undefined WatchType: Closed Script info Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json -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] FileWatcher:: Added:: WatchInfo: /lib.esnext.full.d.ts 500 undefined Project: /tsconfig.json WatchType: Missing file Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (6) - /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 - /src/a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /src/folder/c.ts SVC-1-0 "import type * as test from \"../a\";\n\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\n}\n\n" - /src/b.ts Text-1 "import type * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" +Info seq [hh:mm:ss:mss] Files (3) + /folder/c.ts SVC-1-0 "" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /b.mts Text-1 "import test from \"./a.js\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\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' - src/a.ts - Imported via "../a" from file 'src/folder/c.ts' + folder/c.ts Part of 'files' list in tsconfig.json - Imported via "./a" from file 'src/b.ts' - src/folder/c.ts + File is CommonJS module because 'package.json' was not found + a.ts Part of 'files' list in tsconfig.json - src/b.ts + Imported via "./a.js" from file 'b.mts' + File is CommonJS module because 'package.json' was not found + b.mts Part of 'files' list in tsconfig.json Info seq [hh:mm:ss:mss] ----------------------------------------------- @@ -119,29 +104,82 @@ Info seq [hh:mm:ss:mss] event: "type": "event", "event": "configFileDiag", "body": { - "triggerFile": "/src/folder/c.ts", + "triggerFile": "/folder/c.ts", "configFile": "/tsconfig.json", - "diagnostics": [] + "diagnostics": [ + { + "text": "File '/lib.esnext.full.d.ts' not found.\n The file is in the program because:\n Default library for target 'esnext'", + "code": 6053, + "category": "error" + }, + { + "text": "Cannot find global type 'Array'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'Boolean'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'Function'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'IArguments'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'Number'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'Object'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'RegExp'.", + "code": 2318, + "category": "error" + }, + { + "text": "Cannot find global type 'String'.", + "code": 2318, + "category": "error" + } + ] } } Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (6) +Info seq [hh:mm:ss:mss] Files (3) Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] Open files: -Info seq [hh:mm:ss:mss] FileName: /src/folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined Info seq [hh:mm:ss:mss] Projects: /tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "open", + "request_seq": 0, + "success": true, + "performanceData": { + "updateGraphDurationMs": * + } + } After Request watchedFiles:: -/lib.d.ts: *new* - {"pollingInterval":500} -/lib.decorators.d.ts: *new* +/a.ts: *new* {"pollingInterval":500} -/lib.decorators.legacy.d.ts: *new* +/b.mts: *new* {"pollingInterval":500} -/src/a.ts: *new* - {"pollingInterval":500} -/src/b.ts: *new* +/lib.esnext.full.d.ts: *new* {"pollingInterval":500} /tsconfig.json: *new* {"pollingInterval":2000} @@ -152,27 +190,15 @@ Projects:: projectProgramVersion: 1 ScriptInfos:: -/lib.d.ts *new* - version: Text-1 - containingProjects: 1 - /tsconfig.json -/lib.decorators.d.ts *new* - version: Text-1 - containingProjects: 1 - /tsconfig.json -/lib.decorators.legacy.d.ts *new* - version: Text-1 - containingProjects: 1 - /tsconfig.json -/src/a.ts *new* +/a.ts *new* version: Text-1 containingProjects: 1 /tsconfig.json -/src/b.ts *new* +/b.mts *new* version: Text-1 containingProjects: 1 /tsconfig.json -/src/folder/c.ts (Open) *new* +/folder/c.ts (Open) *new* version: SVC-1-0 containingProjects: 1 /tsconfig.json *default* @@ -223,24 +249,24 @@ Info seq [hh:mm:ss:mss] request: "seq": 2, "type": "request", "arguments": { - "file": "/src/folder/c.ts", + "file": "/folder/c.ts", "pastedText": [ "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" ], "pasteLocations": [ { "start": { - "line": 6, + "line": 1, "offset": 1 }, "end": { - "line": 6, + "line": 1, "offset": 1 } } ], "copiedFrom": { - "file": "/src/b.ts", + "file": "/b.mts", "spans": [ { "start": { @@ -260,13 +286,10 @@ Info seq [hh:mm:ss:mss] request: Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (6) - /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 - /src/a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /src/folder/c.ts SVC-1-1 "import type * as test from \"../a\";\n\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\n}\nfunction foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}\n" - /src/b.ts Text-1 "import type * as test from \"./a\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" +Info seq [hh:mm:ss:mss] Files (3) + /folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /b.mts Text-1 "import test from \"./a.js\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] response: @@ -282,15 +305,26 @@ Info seq [hh:mm:ss:mss] response: "body": { "edits": [ { - "fileName": "/src/folder/c.ts", + "fileName": "/folder/c.ts", "textChanges": [ { "start": { - "line": 6, + "line": 1, "offset": 1 }, "end": { - "line": 6, + "line": 1, + "offset": 1 + }, + "newText": "import test from \"../a\";\n\n" + }, + { + "start": { + "line": 1, + "offset": 1 + }, + "end": { + "line": 1, "offset": 1 }, "newText": "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" @@ -309,27 +343,15 @@ Projects:: dirty: true *changed* ScriptInfos:: -/lib.d.ts - version: Text-1 - containingProjects: 1 - /tsconfig.json -/lib.decorators.d.ts - version: Text-1 - containingProjects: 1 - /tsconfig.json -/lib.decorators.legacy.d.ts - version: Text-1 - containingProjects: 1 - /tsconfig.json -/src/a.ts +/a.ts version: Text-1 containingProjects: 1 /tsconfig.json -/src/b.ts +/b.mts version: Text-1 containingProjects: 1 /tsconfig.json -/src/folder/c.ts (Open) *changed* +/folder/c.ts (Open) *changed* version: SVC-1-2 *changed* containingProjects: 1 /tsconfig.json *default* diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport3.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport3.js index 6bf235b844d75..c2543f11e30f2 100644 --- a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport3.js +++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport3.js @@ -1,15 +1,6 @@ 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 - -//// [/src/a.ts] +//// [/a.ts] const abc = 10; const def = 20; export interface testInterface { @@ -17,8 +8,8 @@ export interface testInterface { def: number; } -//// [/src/b.mts] -import test from "./a.js"; +//// [/b.ts] +import test = require("./a"); function foo(abc: test.testInterface, def: test.testInterface) { console.log(abc); @@ -26,11 +17,20 @@ function foo(abc: test.testInterface, def: test.testInterface) { } -//// [/src/folder/c.ts] +//// [/folder/c.ts] + + +//// [/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 -//// [/src/tsconfig.json] -{ "compilerOptions": { "module": "nodenext" }, "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.mts"] } +//// [/tsconfig.json] +{ "compilerOptions": { "module": "commonjs" }, "files": ["/folder/c.ts", "/a.ts", "/b.ts"] } Info seq [hh:mm:ss:mss] request: @@ -38,54 +38,63 @@ Info seq [hh:mm:ss:mss] request: "seq": 0, "type": "request", "arguments": { - "file": "/src/folder/c.ts" + "file": "/folder/c.ts" }, "command": "open" } -Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /src/folder/c.ts ProjectRootPath: undefined:: Result: /src/tsconfig.json -Info seq [hh:mm:ss:mss] Creating configuration project /src/tsconfig.json -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/tsconfig.json 2000 undefined Project: /src/tsconfig.json WatchType: Config file +Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /folder/c.ts ProjectRootPath: undefined:: Result: /tsconfig.json +Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file Info seq [hh:mm:ss:mss] event: { "seq": 0, "type": "event", "event": "projectLoadingStart", "body": { - "projectName": "/src/tsconfig.json", - "reason": "Creating possible configured project for /src/folder/c.ts to open" + "projectName": "/tsconfig.json", + "reason": "Creating possible configured project for /folder/c.ts to open" } } -Info seq [hh:mm:ss:mss] Config: /src/tsconfig.json : { +Info seq [hh:mm:ss:mss] Config: /tsconfig.json : { "rootNames": [ - "/src/folder/c.ts", - "/src/a.ts", - "/src/b.mts" + "/folder/c.ts", + "/a.ts", + "/b.ts" ], "options": { - "module": 199, - "configFilePath": "/src/tsconfig.json" + "module": 1, + "configFilePath": "/tsconfig.json" } } -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/b.mts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /src/tsconfig.json -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.esnext.full.d.ts 500 undefined Project: /src/tsconfig.json WatchType: Missing file -Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /src/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (3) - /src/folder/c.ts SVC-1-0 "" - /src/a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /src/b.mts Text-1 "import test from \"./a.js\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /b.ts 500 undefined WatchType: Closed Script info +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +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] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + /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 + /folder/c.ts SVC-1-0 "" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /b.ts Text-1 "import test = require(\"./a\");\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\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' folder/c.ts Part of 'files' list in tsconfig.json - File is CommonJS module because 'package.json' was not found a.ts Part of 'files' list in tsconfig.json - Imported via "./a.js" from file 'b.mts' - File is CommonJS module because 'package.json' was not found - b.mts + Imported via "./a" from file 'b.ts' + b.ts Part of 'files' list in tsconfig.json Info seq [hh:mm:ss:mss] ----------------------------------------------- @@ -95,7 +104,7 @@ Info seq [hh:mm:ss:mss] event: "type": "event", "event": "projectLoadingFinish", "body": { - "projectName": "/src/tsconfig.json" + "projectName": "/tsconfig.json" } } Info seq [hh:mm:ss:mss] event: @@ -104,93 +113,74 @@ Info seq [hh:mm:ss:mss] event: "type": "event", "event": "configFileDiag", "body": { - "triggerFile": "/src/folder/c.ts", - "configFile": "/src/tsconfig.json", - "diagnostics": [ - { - "text": "File '/lib.esnext.full.d.ts' not found.\n The file is in the program because:\n Default library for target 'esnext'", - "code": 6053, - "category": "error" - }, - { - "text": "Cannot find global type 'Array'.", - "code": 2318, - "category": "error" - }, - { - "text": "Cannot find global type 'Boolean'.", - "code": 2318, - "category": "error" - }, - { - "text": "Cannot find global type 'Function'.", - "code": 2318, - "category": "error" - }, - { - "text": "Cannot find global type 'IArguments'.", - "code": 2318, - "category": "error" - }, - { - "text": "Cannot find global type 'Number'.", - "code": 2318, - "category": "error" - }, - { - "text": "Cannot find global type 'Object'.", - "code": 2318, - "category": "error" - }, - { - "text": "Cannot find global type 'RegExp'.", - "code": 2318, - "category": "error" - }, - { - "text": "Cannot find global type 'String'.", - "code": 2318, - "category": "error" - } - ] + "triggerFile": "/folder/c.ts", + "configFile": "/tsconfig.json", + "diagnostics": [] } } -Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (3) +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] Open files: -Info seq [hh:mm:ss:mss] FileName: /src/folder/c.ts ProjectRootPath: undefined -Info seq [hh:mm:ss:mss] Projects: /src/tsconfig.json +Info seq [hh:mm:ss:mss] FileName: /folder/c.ts ProjectRootPath: undefined +Info seq [hh:mm:ss:mss] Projects: /tsconfig.json +Info seq [hh:mm:ss:mss] response: + { + "seq": 0, + "type": "response", + "command": "open", + "request_seq": 0, + "success": true, + "performanceData": { + "updateGraphDurationMs": * + } + } After Request watchedFiles:: -/lib.esnext.full.d.ts: *new* +/a.ts: *new* + {"pollingInterval":500} +/b.ts: *new* + {"pollingInterval":500} +/lib.d.ts: *new* {"pollingInterval":500} -/src/a.ts: *new* +/lib.decorators.d.ts: *new* {"pollingInterval":500} -/src/b.mts: *new* +/lib.decorators.legacy.d.ts: *new* {"pollingInterval":500} -/src/tsconfig.json: *new* +/tsconfig.json: *new* {"pollingInterval":2000} Projects:: -/src/tsconfig.json (Configured) *new* +/tsconfig.json (Configured) *new* projectStateVersion: 1 projectProgramVersion: 1 ScriptInfos:: -/src/a.ts *new* +/a.ts *new* version: Text-1 containingProjects: 1 - /src/tsconfig.json -/src/b.mts *new* + /tsconfig.json +/b.ts *new* version: Text-1 containingProjects: 1 - /src/tsconfig.json -/src/folder/c.ts (Open) *new* + /tsconfig.json +/folder/c.ts (Open) *new* version: SVC-1-0 containingProjects: 1 - /src/tsconfig.json *default* + /tsconfig.json *default* +/lib.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.legacy.d.ts *new* + version: Text-1 + containingProjects: 1 + /tsconfig.json Info seq [hh:mm:ss:mss] request: { @@ -238,7 +228,7 @@ Info seq [hh:mm:ss:mss] request: "seq": 2, "type": "request", "arguments": { - "file": "/src/folder/c.ts", + "file": "/folder/c.ts", "pastedText": [ "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" ], @@ -255,7 +245,7 @@ Info seq [hh:mm:ss:mss] request: } ], "copiedFrom": { - "file": "/src/b.mts", + "file": "/b.ts", "spans": [ { "start": { @@ -272,13 +262,16 @@ Info seq [hh:mm:ss:mss] request: }, "command": "getPasteEdits" } -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /src/tsconfig.json -Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /src/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (3) - /src/folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - /src/a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /src/b.mts Text-1 "import test from \"./a.js\";\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" +Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json +Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms +Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured) +Info seq [hh:mm:ss:mss] Files (6) + /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 + /folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" + /a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" + /b.ts Text-1 "import test = require(\"./a\");\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" Info seq [hh:mm:ss:mss] ----------------------------------------------- Info seq [hh:mm:ss:mss] response: @@ -294,7 +287,7 @@ Info seq [hh:mm:ss:mss] response: "body": { "edits": [ { - "fileName": "/src/folder/c.ts", + "fileName": "/folder/c.ts", "textChanges": [ { "start": { @@ -305,7 +298,7 @@ Info seq [hh:mm:ss:mss] response: "line": 1, "offset": 1 }, - "newText": "import test from \"../a\";\n\n" + "newText": "import * as test from \"../a\";\n\n" }, { "start": { @@ -326,21 +319,33 @@ Info seq [hh:mm:ss:mss] response: } After Request Projects:: -/src/tsconfig.json (Configured) *changed* +/tsconfig.json (Configured) *changed* projectStateVersion: 3 *changed* projectProgramVersion: 1 dirty: true *changed* ScriptInfos:: -/src/a.ts +/a.ts version: Text-1 containingProjects: 1 - /src/tsconfig.json -/src/b.mts + /tsconfig.json +/b.ts version: Text-1 containingProjects: 1 - /src/tsconfig.json -/src/folder/c.ts (Open) *changed* + /tsconfig.json +/folder/c.ts (Open) *changed* version: SVC-1-2 *changed* containingProjects: 1 - /src/tsconfig.json *default* + /tsconfig.json *default* +/lib.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json +/lib.decorators.legacy.d.ts + version: Text-1 + containingProjects: 1 + /tsconfig.json diff --git a/tests/cases/fourslash/server/pasteEdits_defaultExport.ts b/tests/cases/fourslash/server/pasteEdits_defaultExport.ts index fd2bbd0f30a97..9d500d17efa79 100644 --- a/tests/cases/fourslash/server/pasteEdits_defaultExport.ts +++ b/tests/cases/fourslash/server/pasteEdits_defaultExport.ts @@ -1,34 +1,32 @@ /// -// @Filename: /src/folder/c.ts +// @Filename: /folder/c.ts //// [||] -//// -// @Filename: /src/a.ts +// @Filename: /a.ts //// export default function foo(name: string): void { //// console.log(name); //// } -// @Filename: /src/b.ts -//// import foo from "./a"; -//// [|foo("bar");|] +// @Filename: /b.ts +////import foo from "./a"; +////[|foo("bar");|] -// @Filename: /src/tsconfig.json -////{ "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.ts"] } +// @Filename: /tsconfig.json +////{ "files": ["/folder/c.ts", "/a.ts", "/b.ts"] } const range = test.ranges(); verify.pasteEdits({ args: { pastedText: [`foo("bar");`], pasteLocations: [range[0]], - copiedFrom: { file: "/src/b.ts", range: [range[1]] }, + copiedFrom: { file: "/b.ts", range: [range[1]] }, }, newFileContents: { - "/src/folder/c.ts": + "/folder/c.ts": `import foo from "../a"; -foo("bar"); -` +foo("bar");` } }); diff --git a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport1.ts b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport1.ts index bd063e9db73cc..bbd66060fbfc0 100644 --- a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport1.ts +++ b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport1.ts @@ -1,10 +1,10 @@ /// -// @Filename: /src/folder/c.ts +// @Filename: /folder/c.ts //// [||] -// @Filename: /src/a.ts +// @Filename: /a.ts //// const abc = 10; //// const def = 20; //// export interface testInterface { @@ -12,7 +12,7 @@ //// def: number; //// } -// @Filename: /src/b.ts +// @Filename: /b.ts //// import * as test from "./a"; //// //// [|function foo(abc: test.testInterface, def: test.testInterface) { @@ -21,8 +21,8 @@ //// }|] //// -// @Filename: /src/tsconfig.json -////{ "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.ts"] } +// @Filename: /tsconfig.json +////{ "files": ["/folder/c.ts", "/a.ts", "/b.ts"] } const range = test.ranges(); verify.pasteEdits({ @@ -32,10 +32,10 @@ console.log(abc); console.log(def); }`], pasteLocations: [range[0]], - copiedFrom: { file: "/src/b.ts", range: [range[1]] }, + copiedFrom: { file: "/b.ts", range: [range[1]] }, }, newFileContents: { - "/src/folder/c.ts": + "/folder/c.ts": `import * as test from "../a"; function foo(abc: test.abc, def: test.def) { diff --git a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport2.ts b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport2.ts index f8dc5461d22be..9b144e4bafe14 100644 --- a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport2.ts +++ b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport2.ts @@ -1,15 +1,10 @@ /// -// @Filename: /src/folder/c.ts -//// import type * as test from "../a"; -//// -//// function foo(abc: test.abc, def: test.def) { -//// console.log(abc); -//// } +// @Filename: /folder/c.ts //// [||] -//// -// @Filename: /src/a.ts + +// @Filename: /a.ts //// const abc = 10; //// const def = 20; //// export interface testInterface { @@ -17,8 +12,8 @@ //// def: number; //// } -// @Filename: /src/b.ts -//// import type * as test from "./a"; +// @Filename: /b.mts +//// import test from "./a.js"; //// //// [|function foo(abc: test.testInterface, def: test.testInterface) { //// console.log(abc); @@ -27,7 +22,7 @@ //// // @Filename: /tsconfig.json -////{ "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.ts"] } +////{ "compilerOptions": { "module": "nodenext" }, "files": ["/folder/c.ts", "/a.ts", "/b.mts"] } const range = test.ranges(); verify.pasteEdits({ @@ -37,20 +32,15 @@ console.log(abc); console.log(def); }`], pasteLocations: [range[0]], - copiedFrom: { file: "/src/b.ts", range: [range[1]] }, + copiedFrom: { file: "/b.mts", range: [range[1]] }, }, newFileContents: { - "/src/folder/c.ts": -`import type * as test from "../a"; + "/folder/c.ts": +`import test from "../a"; -function foo(abc: test.abc, def: test.def) { -console.log(abc); -} function foo(abc: test.abc, def: test.def) { console.log(abc); console.log(def); -} -` +}` } }); - diff --git a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport3.ts b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport3.ts index 4dc006c9fef5e..4d193d7289cac 100644 --- a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport3.ts +++ b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport3.ts @@ -1,10 +1,9 @@ /// -// @Filename: /src/folder/c.ts +// @Filename: /folder/c.ts //// [||] - -// @Filename: /src/a.ts +// @Filename: /a.ts //// const abc = 10; //// const def = 20; //// export interface testInterface { @@ -12,8 +11,8 @@ //// def: number; //// } -// @Filename: /src/b.mts -//// import test from "./a.js"; +// @Filename: /b.ts +//// import test = require("./a"); //// //// [|function foo(abc: test.testInterface, def: test.testInterface) { //// console.log(abc); @@ -21,8 +20,8 @@ //// }|] //// -// @Filename: /src/tsconfig.json -////{ "compilerOptions": { "module": "nodenext" }, "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.mts"] } +// @Filename: /tsconfig.json +////{ "compilerOptions": { "module": "commonjs" }, "files": ["/folder/c.ts", "/a.ts", "/b.ts"] } const range = test.ranges(); verify.pasteEdits({ @@ -32,11 +31,11 @@ console.log(abc); console.log(def); }`], pasteLocations: [range[0]], - copiedFrom: { file: "/src/b.mts", range: [range[1]] }, + copiedFrom: { file: "/b.ts", range: [range[1]] }, }, newFileContents: { - "/src/folder/c.ts": -`import test from "../a"; + "/folder/c.ts": +`import * as test from "../a"; function foo(abc: test.abc, def: test.def) { console.log(abc); @@ -44,3 +43,4 @@ console.log(def); }` } }); + diff --git a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport4.ts b/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport4.ts deleted file mode 100644 index a9cebf9ba1c17..0000000000000 --- a/tests/cases/fourslash/server/pasteEdits_externalModuleSymbolImport4.ts +++ /dev/null @@ -1,46 +0,0 @@ -/// - -// @Filename: /src/folder/c.ts -//// [||] - -// @Filename: /src/a.ts -//// const abc = 10; -//// const def = 20; -//// export interface testInterface { -//// abc: number; -//// def: number; -//// } - -// @Filename: /src/b.ts -//// import test = require("./a"); -//// -//// [|function foo(abc: test.testInterface, def: test.testInterface) { -//// console.log(abc); -//// console.log(def); -//// }|] -//// - -// @Filename: /src/tsconfig.json -////{ "compilerOptions": { "module": "commonjs" }, "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.ts"] } - -const range = test.ranges(); -verify.pasteEdits({ - args: { - pastedText: [`function foo(abc: test.abc, def: test.def) { -console.log(abc); -console.log(def); -}`], - pasteLocations: [range[0]], - copiedFrom: { file: "/src/b.ts", range: [range[1]] }, - }, - newFileContents: { - "/src/folder/c.ts": -`import * as test from "../a"; - -function foo(abc: test.abc, def: test.def) { -console.log(abc); -console.log(def); -}` - } -}); - From b23e6d841d121f93ae904b9f1b501218e2fdebaa Mon Sep 17 00:00:00 2001 From: navya9singh Date: Mon, 15 Jul 2024 12:21:50 -0700 Subject: [PATCH 12/15] removing baseline for deleted test --- .../pasteEdits_externalModuleSymbolImport4.js | 340 ------------------ 1 file changed, 340 deletions(-) delete mode 100644 tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport4.js diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport4.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport4.js deleted file mode 100644 index e3795dbabaaad..0000000000000 --- a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_externalModuleSymbolImport4.js +++ /dev/null @@ -1,340 +0,0 @@ -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 - -//// [/src/a.ts] -const abc = 10; -const def = 20; -export interface testInterface { - abc: number; - def: number; -} - -//// [/src/b.ts] -import test = require("./a"); - -function foo(abc: test.testInterface, def: test.testInterface) { - console.log(abc); - console.log(def); -} - - -//// [/src/folder/c.ts] - - -//// [/src/tsconfig.json] -{ "compilerOptions": { "module": "commonjs" }, "files": ["/src/folder/c.ts", "/src/a.ts", "/src/b.ts"] } - - -Info seq [hh:mm:ss:mss] request: - { - "seq": 0, - "type": "request", - "arguments": { - "file": "/src/folder/c.ts" - }, - "command": "open" - } -Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /src/folder/c.ts ProjectRootPath: undefined:: Result: /src/tsconfig.json -Info seq [hh:mm:ss:mss] Creating configuration project /src/tsconfig.json -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/tsconfig.json 2000 undefined Project: /src/tsconfig.json WatchType: Config file -Info seq [hh:mm:ss:mss] event: - { - "seq": 0, - "type": "event", - "event": "projectLoadingStart", - "body": { - "projectName": "/src/tsconfig.json", - "reason": "Creating possible configured project for /src/folder/c.ts to open" - } - } -Info seq [hh:mm:ss:mss] Config: /src/tsconfig.json : { - "rootNames": [ - "/src/folder/c.ts", - "/src/a.ts", - "/src/b.ts" - ], - "options": { - "module": 1, - "configFilePath": "/src/tsconfig.json" - } -} -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/a.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /src/b.ts 500 undefined WatchType: Closed Script info -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /src/tsconfig.json -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] Finishing updateGraphWorker: Project: /src/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (6) - /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 - /src/folder/c.ts SVC-1-0 "" - /src/a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /src/b.ts Text-1 "import test = require(\"./a\");\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\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' - folder/c.ts - Part of 'files' list in tsconfig.json - a.ts - Part of 'files' list in tsconfig.json - Imported via "./a" from file 'b.ts' - b.ts - Part of 'files' list in tsconfig.json - -Info seq [hh:mm:ss:mss] ----------------------------------------------- -Info seq [hh:mm:ss:mss] event: - { - "seq": 0, - "type": "event", - "event": "projectLoadingFinish", - "body": { - "projectName": "/src/tsconfig.json" - } - } -Info seq [hh:mm:ss:mss] event: - { - "seq": 0, - "type": "event", - "event": "configFileDiag", - "body": { - "triggerFile": "/src/folder/c.ts", - "configFile": "/src/tsconfig.json", - "diagnostics": [] - } - } -Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (6) - -Info seq [hh:mm:ss:mss] ----------------------------------------------- -Info seq [hh:mm:ss:mss] Open files: -Info seq [hh:mm:ss:mss] FileName: /src/folder/c.ts ProjectRootPath: undefined -Info seq [hh:mm:ss:mss] Projects: /src/tsconfig.json -After Request -watchedFiles:: -/lib.d.ts: *new* - {"pollingInterval":500} -/lib.decorators.d.ts: *new* - {"pollingInterval":500} -/lib.decorators.legacy.d.ts: *new* - {"pollingInterval":500} -/src/a.ts: *new* - {"pollingInterval":500} -/src/b.ts: *new* - {"pollingInterval":500} -/src/tsconfig.json: *new* - {"pollingInterval":2000} - -Projects:: -/src/tsconfig.json (Configured) *new* - projectStateVersion: 1 - projectProgramVersion: 1 - -ScriptInfos:: -/lib.d.ts *new* - version: Text-1 - containingProjects: 1 - /src/tsconfig.json -/lib.decorators.d.ts *new* - version: Text-1 - containingProjects: 1 - /src/tsconfig.json -/lib.decorators.legacy.d.ts *new* - version: Text-1 - containingProjects: 1 - /src/tsconfig.json -/src/a.ts *new* - version: Text-1 - containingProjects: 1 - /src/tsconfig.json -/src/b.ts *new* - version: Text-1 - containingProjects: 1 - /src/tsconfig.json -/src/folder/c.ts (Open) *new* - version: SVC-1-0 - containingProjects: 1 - /src/tsconfig.json *default* - -Info seq [hh:mm:ss:mss] request: - { - "seq": 1, - "type": "request", - "arguments": { - "formatOptions": { - "indentSize": 4, - "tabSize": 4, - "newLineCharacter": "\n", - "convertTabsToSpaces": true, - "indentStyle": 2, - "insertSpaceAfterConstructor": false, - "insertSpaceAfterCommaDelimiter": true, - "insertSpaceAfterSemicolonInForStatements": true, - "insertSpaceBeforeAndAfterBinaryOperators": true, - "insertSpaceAfterKeywordsInControlFlowStatements": true, - "insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, - "insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, - "insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, - "insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": true, - "insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false, - "insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false, - "insertSpaceBeforeFunctionParenthesis": false, - "placeOpenBraceOnNewLineForFunctions": false, - "placeOpenBraceOnNewLineForControlBlocks": false, - "semicolons": "ignore", - "trimTrailingWhitespace": true, - "indentSwitchCase": true - } - }, - "command": "configure" - } -Info seq [hh:mm:ss:mss] Format host information updated -Info seq [hh:mm:ss:mss] response: - { - "seq": 0, - "type": "response", - "command": "configure", - "request_seq": 1, - "success": true - } -Info seq [hh:mm:ss:mss] request: - { - "seq": 2, - "type": "request", - "arguments": { - "file": "/src/folder/c.ts", - "pastedText": [ - "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - ], - "pasteLocations": [ - { - "start": { - "line": 1, - "offset": 1 - }, - "end": { - "line": 1, - "offset": 1 - } - } - ], - "copiedFrom": { - "file": "/src/b.ts", - "spans": [ - { - "start": { - "line": 3, - "offset": 1 - }, - "end": { - "line": 6, - "offset": 2 - } - } - ] - } - }, - "command": "getPasteEdits" - } -Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /src/tsconfig.json -Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /src/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms -Info seq [hh:mm:ss:mss] Project '/src/tsconfig.json' (Configured) -Info seq [hh:mm:ss:mss] Files (6) - /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 - /src/folder/c.ts SVC-1-1 "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - /src/a.ts Text-1 "const abc = 10;\nconst def = 20;\nexport interface testInterface {\n abc: number;\n def: number;\n}" - /src/b.ts Text-1 "import test = require(\"./a\");\n\nfunction foo(abc: test.testInterface, def: test.testInterface) {\n console.log(abc);\n console.log(def);\n}\n" - -Info seq [hh:mm:ss:mss] ----------------------------------------------- -Info seq [hh:mm:ss:mss] response: - { - "seq": 0, - "type": "response", - "command": "getPasteEdits", - "request_seq": 2, - "success": true, - "performanceData": { - "updateGraphDurationMs": * - }, - "body": { - "edits": [ - { - "fileName": "/src/folder/c.ts", - "textChanges": [ - { - "start": { - "line": 1, - "offset": 1 - }, - "end": { - "line": 1, - "offset": 1 - }, - "newText": "import * as test from \"../a\";\n\n" - }, - { - "start": { - "line": 1, - "offset": 1 - }, - "end": { - "line": 1, - "offset": 1 - }, - "newText": "function foo(abc: test.abc, def: test.def) {\nconsole.log(abc);\nconsole.log(def);\n}" - } - ] - } - ], - "fixId": "providePostPasteEdits" - } - } -After Request -Projects:: -/src/tsconfig.json (Configured) *changed* - projectStateVersion: 3 *changed* - projectProgramVersion: 1 - dirty: true *changed* - -ScriptInfos:: -/lib.d.ts - version: Text-1 - containingProjects: 1 - /src/tsconfig.json -/lib.decorators.d.ts - version: Text-1 - containingProjects: 1 - /src/tsconfig.json -/lib.decorators.legacy.d.ts - version: Text-1 - containingProjects: 1 - /src/tsconfig.json -/src/a.ts - version: Text-1 - containingProjects: 1 - /src/tsconfig.json -/src/b.ts - version: Text-1 - containingProjects: 1 - /src/tsconfig.json -/src/folder/c.ts (Open) *changed* - version: SVC-1-2 *changed* - containingProjects: 1 - /src/tsconfig.json *default* From cb06e8f6aaa500b55e282c50b68d8707cdb5f355 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Thu, 18 Jul 2024 10:51:40 -0700 Subject: [PATCH 13/15] fixes --- src/services/refactors/moveToFile.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/services/refactors/moveToFile.ts b/src/services/refactors/moveToFile.ts index 98e6adad9095b..2de8fdfbc44be 100644 --- a/src/services/refactors/moveToFile.ts +++ b/src/services/refactors/moveToFile.ts @@ -19,6 +19,7 @@ import { contains, createFutureSourceFile, createModuleSpecifierResolutionHost, + createTextRangeFromNode, createTextRangeFromSpan, Debug, Declaration, @@ -962,9 +963,10 @@ function inferNewFileName(importsFromNewFile: Map, movedSymbols } function forEachReference(node: Node, checker: TypeChecker, enclosingRange: TextRange | undefined, onReference: (s: Symbol, isValidTypeOnlyUseSite: boolean) => void) { + const sourceFile = node.getSourceFile(); node.forEachChild(function cb(node) { if (isIdentifier(node) && !isDeclarationName(node)) { - if (enclosingRange && !rangeContainsRange(enclosingRange, { pos: node.getStart(), end: node.getEnd() })) { + if (enclosingRange && !rangeContainsRange(enclosingRange, createTextRangeFromNode(node, sourceFile))) { return; } const sym = checker.getSymbolAtLocation(node); From 2a432e4d5824a629c9cdc05ff00a0bea0670aa72 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Fri, 19 Jul 2024 17:08:47 -0700 Subject: [PATCH 14/15] addressing pr comments --- src/services/codefixes/importFixes.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index 0613cc49978a9..445fa2c1cbd6b 100644 --- a/src/services/codefixes/importFixes.ts +++ b/src/services/codefixes/importFixes.ts @@ -371,8 +371,18 @@ function createImportAdderWorker(sourceFile: SourceFile | FutureSourceFile, prog symbolName, errorIdentifierText: undefined, }; - if (referenceImport && isImportClause(referenceImport)) { - info = { ...info, fix: { ...info.fix, importKind: ImportKind.Default, addAsTypeOnly: isTypeOnlyImportDeclaration(referenceImport) ? AddAsTypeOnly.Required : AddAsTypeOnly.NotAllowed } }; + if (referenceImport && isValidTypeOnlyUseSite && isImportClause(referenceImport)) { + info = { + ...info, + fix: { + kind: ImportFixKind.AddNew, + importKind: isNamespaceImport(referenceImport) ? ImportKind.Namespace : ImportKind.Default, + addAsTypeOnly: isTypeOnlyImportDeclaration(referenceImport) ? AddAsTypeOnly.Allowed : AddAsTypeOnly.NotAllowed, + useRequire, + moduleSpecifierKind: undefined, + moduleSpecifier, + }, + }; } addImport(info); } From e3deb17228932d6c39cdddddd60ddce0b759fb7a Mon Sep 17 00:00:00 2001 From: navya9singh Date: Mon, 22 Jul 2024 16:20:03 -0700 Subject: [PATCH 15/15] addAsTypeOnly changes --- src/services/codefixes/importFixes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index 445fa2c1cbd6b..a05d4cc9375d3 100644 --- a/src/services/codefixes/importFixes.ts +++ b/src/services/codefixes/importFixes.ts @@ -377,7 +377,7 @@ function createImportAdderWorker(sourceFile: SourceFile | FutureSourceFile, prog fix: { kind: ImportFixKind.AddNew, importKind: isNamespaceImport(referenceImport) ? ImportKind.Namespace : ImportKind.Default, - addAsTypeOnly: isTypeOnlyImportDeclaration(referenceImport) ? AddAsTypeOnly.Allowed : AddAsTypeOnly.NotAllowed, + addAsTypeOnly: isTypeOnlyImportDeclaration(referenceImport) ? AddAsTypeOnly.Required : AddAsTypeOnly.Allowed, useRequire, moduleSpecifierKind: undefined, moduleSpecifier,