diff --git a/src/services/pasteEdits.ts b/src/services/pasteEdits.ts
index d3c84b118aa8e..3fffc8c5a1403 100644
--- a/src/services/pasteEdits.ts
+++ b/src/services/pasteEdits.ts
@@ -5,6 +5,7 @@ import {
fileShouldUseJavaScriptRequire,
findAncestor,
findIndex,
+ findTokenOnLeftOfPosition,
forEachChild,
formatting,
getNewLineOrDefaultFromHost,
@@ -50,11 +51,16 @@ export function pasteEditsProvider(
return { edits: changes, fixId };
}
+interface CopiedFromInfo {
+ file: SourceFile;
+ range: TextRange[];
+}
+
function pasteEdits(
targetFile: SourceFile,
pastedText: string[],
pasteLocations: TextRange[],
- copiedFrom: { file: SourceFile; range: TextRange[]; } | undefined,
+ copiedFrom: CopiedFromInfo | undefined,
host: LanguageServiceHost,
preferences: UserPreferences,
formatContext: formatting.FormatContext,
@@ -93,11 +99,13 @@ function pasteEdits(
}
statements.push(...statementsInSourceFile.slice(startNodeIndex, endNodeIndex === -1 ? statementsInSourceFile.length : endNodeIndex + 1));
});
- const usage = getUsageInfo(copiedFrom.file, statements, originalProgram!.getTypeChecker(), getExistingLocals(updatedFile, statements, originalProgram!.getTypeChecker()), { pos: copiedFrom.range[0].pos, end: copiedFrom.range[copiedFrom.range.length - 1].end });
- Debug.assertIsDefined(originalProgram);
+ Debug.assertIsDefined(originalProgram, "no original program found");
+ const originalProgramTypeChecker = originalProgram.getTypeChecker();
+ const usageInfoRange = getUsageInfoRangeForPasteEdits(copiedFrom);
+ const usage = getUsageInfo(copiedFrom.file, statements, originalProgramTypeChecker, getExistingLocals(updatedFile, statements, originalProgramTypeChecker), usageInfoRange);
const useEsModuleSyntax = !fileShouldUseJavaScriptRequire(targetFile.fileName, originalProgram, host, !!copiedFrom.file.commonJsModuleIndicator);
addExportsInOldFile(copiedFrom.file, usage.targetFileImportsFromOldFile, changes, useEsModuleSyntax);
- addTargetFileImports(copiedFrom.file, usage.oldImportsNeededByTargetFile, usage.targetFileImportsFromOldFile, originalProgram.getTypeChecker(), updatedProgram, importAdder);
+ addTargetFileImports(copiedFrom.file, usage.oldImportsNeededByTargetFile, usage.targetFileImportsFromOldFile, originalProgramTypeChecker, updatedProgram, importAdder);
}
else {
const context: CodeFixContextBase = {
@@ -167,3 +175,18 @@ function pasteEdits(
);
});
}
+
+/**
+ * Adjusts the range for `getUsageInfo` to correctly include identifiers at the edges of the copied text.
+ */
+function getUsageInfoRangeForPasteEdits({ file: sourceFile, range }: CopiedFromInfo) {
+ const pos = range[0].pos;
+ const end = range[range.length - 1].end;
+ const startToken = getTokenAtPosition(sourceFile, pos);
+ const endToken = findTokenOnLeftOfPosition(sourceFile, pos) ?? getTokenAtPosition(sourceFile, end);
+ // Since the range is only used to check identifiers, we do not need to adjust range when the tokens at the edges are not identifiers.
+ return {
+ pos: isIdentifier(startToken) && pos <= startToken.getStart(sourceFile) ? startToken.getFullStart() : pos,
+ end: isIdentifier(endToken) && end === endToken.getEnd() ? textChanges.getAdjustedEndPosition(sourceFile, endToken, {}) : end,
+ };
+}
diff --git a/src/services/textChanges.ts b/src/services/textChanges.ts
index 196f5389555b6..cca568d1c872b 100644
--- a/src/services/textChanges.ts
+++ b/src/services/textChanges.ts
@@ -352,7 +352,7 @@ function getAdjustedRange(sourceFile: SourceFile, startNode: Node, endNode: Node
return { pos: getAdjustedStartPosition(sourceFile, startNode, options), end: getAdjustedEndPosition(sourceFile, endNode, options) };
}
-function getAdjustedStartPosition(sourceFile: SourceFile, node: Node, options: ConfigurableStartEnd, hasTrailingComment = false) {
+function getAdjustedStartPosition(sourceFile: SourceFile, node: Node, options: ConfigurableStartEnd, hasTrailingComment = false): number {
const { leadingTriviaOption } = options;
if (leadingTriviaOption === LeadingTriviaOption.Exclude) {
return node.getStart(sourceFile);
@@ -436,7 +436,8 @@ function getEndPositionOfMultilineTrailingComment(sourceFile: SourceFile, node:
return undefined;
}
-function getAdjustedEndPosition(sourceFile: SourceFile, node: Node, options: ConfigurableEnd): number {
+/** @internal */
+export function getAdjustedEndPosition(sourceFile: SourceFile, node: Node, options: ConfigurableEnd): number {
const { end } = node;
const { trailingTriviaOption } = options;
if (trailingTriviaOption === TrailingTriviaOption.Exclude) {
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection0.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection0.js
new file mode 100644
index 0000000000000..4a14f70dca8c4
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection0.js
@@ -0,0 +1,317 @@
+Info seq [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/a.ts]
+function foo() { }
+const x = foo()
+
+foo()
+x
+
+//// [/home/src/workspaces/project/folder/target.ts]
+
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{ "files": ["a.ts", "folder/target.ts"] }
+
+
+Info seq [hh:mm:ss:mss] request:
+ {
+ "seq": 0,
+ "type": "request",
+ "arguments": {
+ "file": "/home/src/workspaces/project/folder/target.ts"
+ },
+ "command": "open"
+ }
+Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+ "/home/src/workspaces/project/a.ts",
+ "/home/src/workspaces/project/folder/target.ts"
+ ],
+ "options": {
+ "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "projectLoadingStart",
+ "body": {
+ "projectName": "/home/src/workspaces/project/tsconfig.json",
+ "reason": "Creating possible configured project for /home/src/workspaces/project/folder/target.ts to open"
+ }
+ }
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/a.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\nconst x = foo()\n\nfoo()\nx"
+ /home/src/workspaces/project/folder/target.ts SVC-1-0 ""
+
+
+ ../../tslibs/TS/Lib/lib.d.ts
+ Default library for target 'es5'
+ ../../tslibs/TS/Lib/lib.decorators.d.ts
+ Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+ ../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+ a.ts
+ Part of 'files' list in tsconfig.json
+ folder/target.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": "/home/src/workspaces/project/tsconfig.json"
+ }
+ }
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "configFileDiag",
+ "body": {
+ "triggerFile": "/home/src/workspaces/project/folder/target.ts",
+ "configFile": "/home/src/workspaces/project/tsconfig.json",
+ "diagnostics": []
+ }
+ }
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+
+Info seq [hh:mm:ss:mss] -----------------------------------------------
+Info seq [hh:mm:ss:mss] Open files:
+Info seq [hh:mm:ss:mss] FileName: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined
+Info seq [hh:mm:ss:mss] Projects: /home/src/workspaces/project/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::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/a.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/tsconfig.json: *new*
+ {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+ {}
+/home/src/workspaces/node_modules/@types: *new*
+ {}
+/home/src/workspaces/project/node_modules: *new*
+ {}
+/home/src/workspaces/project/node_modules/@types: *new*
+ {}
+
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+ projectStateVersion: 1
+ projectProgramVersion: 1
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *new*
+ version: SVC-1-0
+ containingProjects: 1
+ /home/src/workspaces/project/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": "/home/src/workspaces/project/folder/target.ts",
+ "pastedText": [
+ ""
+ ],
+ "pasteLocations": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ }
+ }
+ ],
+ "copiedFrom": {
+ "file": "/home/src/workspaces/project/a.ts",
+ "spans": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ }
+ }
+ ]
+ }
+ },
+ "command": "getPasteEdits"
+ }
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\nconst x = foo()\n\nfoo()\nx"
+ /home/src/workspaces/project/folder/target.ts SVC-1-1 ""
+
+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": [],
+ "fixId": "providePostPasteEdits"
+ }
+ }
+After Request
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+ projectStateVersion: 3 *changed*
+ projectProgramVersion: 1
+ dirty: true *changed*
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *changed*
+ version: SVC-1-2 *changed*
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json *default*
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection1.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection1.js
new file mode 100644
index 0000000000000..40e467f44ba61
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection1.js
@@ -0,0 +1,361 @@
+Info seq [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/a.ts]
+function foo() { }
+const x = foo()
+
+foo()
+x
+
+//// [/home/src/workspaces/project/folder/target.ts]
+
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{ "files": ["a.ts", "folder/target.ts"] }
+
+
+Info seq [hh:mm:ss:mss] request:
+ {
+ "seq": 0,
+ "type": "request",
+ "arguments": {
+ "file": "/home/src/workspaces/project/folder/target.ts"
+ },
+ "command": "open"
+ }
+Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+ "/home/src/workspaces/project/a.ts",
+ "/home/src/workspaces/project/folder/target.ts"
+ ],
+ "options": {
+ "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "projectLoadingStart",
+ "body": {
+ "projectName": "/home/src/workspaces/project/tsconfig.json",
+ "reason": "Creating possible configured project for /home/src/workspaces/project/folder/target.ts to open"
+ }
+ }
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/a.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\nconst x = foo()\n\nfoo()\nx"
+ /home/src/workspaces/project/folder/target.ts SVC-1-0 ""
+
+
+ ../../tslibs/TS/Lib/lib.d.ts
+ Default library for target 'es5'
+ ../../tslibs/TS/Lib/lib.decorators.d.ts
+ Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+ ../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+ a.ts
+ Part of 'files' list in tsconfig.json
+ folder/target.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": "/home/src/workspaces/project/tsconfig.json"
+ }
+ }
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "configFileDiag",
+ "body": {
+ "triggerFile": "/home/src/workspaces/project/folder/target.ts",
+ "configFile": "/home/src/workspaces/project/tsconfig.json",
+ "diagnostics": []
+ }
+ }
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+
+Info seq [hh:mm:ss:mss] -----------------------------------------------
+Info seq [hh:mm:ss:mss] Open files:
+Info seq [hh:mm:ss:mss] FileName: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined
+Info seq [hh:mm:ss:mss] Projects: /home/src/workspaces/project/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::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/a.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/tsconfig.json: *new*
+ {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+ {}
+/home/src/workspaces/node_modules/@types: *new*
+ {}
+/home/src/workspaces/project/node_modules: *new*
+ {}
+/home/src/workspaces/project/node_modules/@types: *new*
+ {}
+
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+ projectStateVersion: 1
+ projectProgramVersion: 1
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *new*
+ version: SVC-1-0
+ containingProjects: 1
+ /home/src/workspaces/project/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": "/home/src/workspaces/project/folder/target.ts",
+ "pastedText": [
+ "foo()"
+ ],
+ "pasteLocations": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ }
+ }
+ ],
+ "copiedFrom": {
+ "file": "/home/src/workspaces/project/a.ts",
+ "spans": [
+ {
+ "start": {
+ "line": 4,
+ "offset": 1
+ },
+ "end": {
+ "line": 4,
+ "offset": 6
+ }
+ }
+ ]
+ }
+ },
+ "command": "getPasteEdits"
+ }
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\nconst x = foo()\n\nfoo()\nx"
+ /home/src/workspaces/project/folder/target.ts SVC-1-1 "foo()"
+
+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": "/home/src/workspaces/project/a.ts",
+ "textChanges": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ },
+ "newText": "export "
+ }
+ ]
+ },
+ {
+ "fileName": "/home/src/workspaces/project/folder/target.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()"
+ }
+ ]
+ }
+ ],
+ "fixId": "providePostPasteEdits"
+ }
+ }
+After Request
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+ projectStateVersion: 3 *changed*
+ projectProgramVersion: 1
+ dirty: true *changed*
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *changed*
+ version: SVC-1-2 *changed*
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json *default*
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection2.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection2.js
new file mode 100644
index 0000000000000..f2fb7a3ef0bff
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection2.js
@@ -0,0 +1,360 @@
+Info seq [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/a.ts]
+function foo() { }
+
+// comment
+foo()
+
+//// [/home/src/workspaces/project/folder/target.ts]
+
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{ "files": ["a.ts", "folder/target.ts"] }
+
+
+Info seq [hh:mm:ss:mss] request:
+ {
+ "seq": 0,
+ "type": "request",
+ "arguments": {
+ "file": "/home/src/workspaces/project/folder/target.ts"
+ },
+ "command": "open"
+ }
+Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+ "/home/src/workspaces/project/a.ts",
+ "/home/src/workspaces/project/folder/target.ts"
+ ],
+ "options": {
+ "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "projectLoadingStart",
+ "body": {
+ "projectName": "/home/src/workspaces/project/tsconfig.json",
+ "reason": "Creating possible configured project for /home/src/workspaces/project/folder/target.ts to open"
+ }
+ }
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/a.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\n\n// comment\nfoo()"
+ /home/src/workspaces/project/folder/target.ts SVC-1-0 ""
+
+
+ ../../tslibs/TS/Lib/lib.d.ts
+ Default library for target 'es5'
+ ../../tslibs/TS/Lib/lib.decorators.d.ts
+ Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+ ../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+ a.ts
+ Part of 'files' list in tsconfig.json
+ folder/target.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": "/home/src/workspaces/project/tsconfig.json"
+ }
+ }
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "configFileDiag",
+ "body": {
+ "triggerFile": "/home/src/workspaces/project/folder/target.ts",
+ "configFile": "/home/src/workspaces/project/tsconfig.json",
+ "diagnostics": []
+ }
+ }
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+
+Info seq [hh:mm:ss:mss] -----------------------------------------------
+Info seq [hh:mm:ss:mss] Open files:
+Info seq [hh:mm:ss:mss] FileName: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined
+Info seq [hh:mm:ss:mss] Projects: /home/src/workspaces/project/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::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/a.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/tsconfig.json: *new*
+ {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+ {}
+/home/src/workspaces/node_modules/@types: *new*
+ {}
+/home/src/workspaces/project/node_modules: *new*
+ {}
+/home/src/workspaces/project/node_modules/@types: *new*
+ {}
+
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+ projectStateVersion: 1
+ projectProgramVersion: 1
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *new*
+ version: SVC-1-0
+ containingProjects: 1
+ /home/src/workspaces/project/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": "/home/src/workspaces/project/folder/target.ts",
+ "pastedText": [
+ "foo()"
+ ],
+ "pasteLocations": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ }
+ }
+ ],
+ "copiedFrom": {
+ "file": "/home/src/workspaces/project/a.ts",
+ "spans": [
+ {
+ "start": {
+ "line": 4,
+ "offset": 1
+ },
+ "end": {
+ "line": 4,
+ "offset": 6
+ }
+ }
+ ]
+ }
+ },
+ "command": "getPasteEdits"
+ }
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\n\n// comment\nfoo()"
+ /home/src/workspaces/project/folder/target.ts SVC-1-1 "foo()"
+
+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": "/home/src/workspaces/project/a.ts",
+ "textChanges": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ },
+ "newText": "export "
+ }
+ ]
+ },
+ {
+ "fileName": "/home/src/workspaces/project/folder/target.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()"
+ }
+ ]
+ }
+ ],
+ "fixId": "providePostPasteEdits"
+ }
+ }
+After Request
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+ projectStateVersion: 3 *changed*
+ projectProgramVersion: 1
+ dirty: true *changed*
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *changed*
+ version: SVC-1-2 *changed*
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json *default*
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection3.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection3.js
new file mode 100644
index 0000000000000..654d91f5b0f40
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection3.js
@@ -0,0 +1,360 @@
+Info seq [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/a.ts]
+function foo() { }
+
+/* comment */
+foo()
+
+//// [/home/src/workspaces/project/folder/target.ts]
+
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{ "files": ["a.ts", "folder/target.ts"] }
+
+
+Info seq [hh:mm:ss:mss] request:
+ {
+ "seq": 0,
+ "type": "request",
+ "arguments": {
+ "file": "/home/src/workspaces/project/folder/target.ts"
+ },
+ "command": "open"
+ }
+Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+ "/home/src/workspaces/project/a.ts",
+ "/home/src/workspaces/project/folder/target.ts"
+ ],
+ "options": {
+ "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "projectLoadingStart",
+ "body": {
+ "projectName": "/home/src/workspaces/project/tsconfig.json",
+ "reason": "Creating possible configured project for /home/src/workspaces/project/folder/target.ts to open"
+ }
+ }
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/a.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\n\n/* comment */\nfoo()"
+ /home/src/workspaces/project/folder/target.ts SVC-1-0 ""
+
+
+ ../../tslibs/TS/Lib/lib.d.ts
+ Default library for target 'es5'
+ ../../tslibs/TS/Lib/lib.decorators.d.ts
+ Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+ ../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+ a.ts
+ Part of 'files' list in tsconfig.json
+ folder/target.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": "/home/src/workspaces/project/tsconfig.json"
+ }
+ }
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "configFileDiag",
+ "body": {
+ "triggerFile": "/home/src/workspaces/project/folder/target.ts",
+ "configFile": "/home/src/workspaces/project/tsconfig.json",
+ "diagnostics": []
+ }
+ }
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+
+Info seq [hh:mm:ss:mss] -----------------------------------------------
+Info seq [hh:mm:ss:mss] Open files:
+Info seq [hh:mm:ss:mss] FileName: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined
+Info seq [hh:mm:ss:mss] Projects: /home/src/workspaces/project/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::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/a.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/tsconfig.json: *new*
+ {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+ {}
+/home/src/workspaces/node_modules/@types: *new*
+ {}
+/home/src/workspaces/project/node_modules: *new*
+ {}
+/home/src/workspaces/project/node_modules/@types: *new*
+ {}
+
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+ projectStateVersion: 1
+ projectProgramVersion: 1
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *new*
+ version: SVC-1-0
+ containingProjects: 1
+ /home/src/workspaces/project/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": "/home/src/workspaces/project/folder/target.ts",
+ "pastedText": [
+ "foo()"
+ ],
+ "pasteLocations": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ }
+ }
+ ],
+ "copiedFrom": {
+ "file": "/home/src/workspaces/project/a.ts",
+ "spans": [
+ {
+ "start": {
+ "line": 4,
+ "offset": 1
+ },
+ "end": {
+ "line": 4,
+ "offset": 6
+ }
+ }
+ ]
+ }
+ },
+ "command": "getPasteEdits"
+ }
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\n\n/* comment */\nfoo()"
+ /home/src/workspaces/project/folder/target.ts SVC-1-1 "foo()"
+
+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": "/home/src/workspaces/project/a.ts",
+ "textChanges": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ },
+ "newText": "export "
+ }
+ ]
+ },
+ {
+ "fileName": "/home/src/workspaces/project/folder/target.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()"
+ }
+ ]
+ }
+ ],
+ "fixId": "providePostPasteEdits"
+ }
+ }
+After Request
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+ projectStateVersion: 3 *changed*
+ projectProgramVersion: 1
+ dirty: true *changed*
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *changed*
+ version: SVC-1-2 *changed*
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json *default*
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection4.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection4.js
new file mode 100644
index 0000000000000..486c454f23563
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection4.js
@@ -0,0 +1,363 @@
+Info seq [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/a.ts]
+function foo() { }
+
+/*
+ comment
+ more comment
+*/
+foo()
+
+//// [/home/src/workspaces/project/folder/target.ts]
+
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{ "files": ["a.ts", "folder/target.ts"] }
+
+
+Info seq [hh:mm:ss:mss] request:
+ {
+ "seq": 0,
+ "type": "request",
+ "arguments": {
+ "file": "/home/src/workspaces/project/folder/target.ts"
+ },
+ "command": "open"
+ }
+Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+ "/home/src/workspaces/project/a.ts",
+ "/home/src/workspaces/project/folder/target.ts"
+ ],
+ "options": {
+ "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "projectLoadingStart",
+ "body": {
+ "projectName": "/home/src/workspaces/project/tsconfig.json",
+ "reason": "Creating possible configured project for /home/src/workspaces/project/folder/target.ts to open"
+ }
+ }
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/a.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\n\n/*\n comment\n more comment\n*/\nfoo()"
+ /home/src/workspaces/project/folder/target.ts SVC-1-0 ""
+
+
+ ../../tslibs/TS/Lib/lib.d.ts
+ Default library for target 'es5'
+ ../../tslibs/TS/Lib/lib.decorators.d.ts
+ Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+ ../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+ a.ts
+ Part of 'files' list in tsconfig.json
+ folder/target.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": "/home/src/workspaces/project/tsconfig.json"
+ }
+ }
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "configFileDiag",
+ "body": {
+ "triggerFile": "/home/src/workspaces/project/folder/target.ts",
+ "configFile": "/home/src/workspaces/project/tsconfig.json",
+ "diagnostics": []
+ }
+ }
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+
+Info seq [hh:mm:ss:mss] -----------------------------------------------
+Info seq [hh:mm:ss:mss] Open files:
+Info seq [hh:mm:ss:mss] FileName: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined
+Info seq [hh:mm:ss:mss] Projects: /home/src/workspaces/project/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::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/a.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/tsconfig.json: *new*
+ {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+ {}
+/home/src/workspaces/node_modules/@types: *new*
+ {}
+/home/src/workspaces/project/node_modules: *new*
+ {}
+/home/src/workspaces/project/node_modules/@types: *new*
+ {}
+
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+ projectStateVersion: 1
+ projectProgramVersion: 1
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *new*
+ version: SVC-1-0
+ containingProjects: 1
+ /home/src/workspaces/project/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": "/home/src/workspaces/project/folder/target.ts",
+ "pastedText": [
+ " comment\n more comment\n*/\nfoo()"
+ ],
+ "pasteLocations": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ }
+ }
+ ],
+ "copiedFrom": {
+ "file": "/home/src/workspaces/project/a.ts",
+ "spans": [
+ {
+ "start": {
+ "line": 4,
+ "offset": 1
+ },
+ "end": {
+ "line": 7,
+ "offset": 6
+ }
+ }
+ ]
+ }
+ },
+ "command": "getPasteEdits"
+ }
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\n\n/*\n comment\n more comment\n*/\nfoo()"
+ /home/src/workspaces/project/folder/target.ts SVC-1-1 " comment\n more comment\n*/\nfoo()"
+
+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": "/home/src/workspaces/project/a.ts",
+ "textChanges": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ },
+ "newText": "export "
+ }
+ ]
+ },
+ {
+ "fileName": "/home/src/workspaces/project/folder/target.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": " comment\n more comment\n*/\nfoo()"
+ }
+ ]
+ }
+ ],
+ "fixId": "providePostPasteEdits"
+ }
+ }
+After Request
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+ projectStateVersion: 3 *changed*
+ projectProgramVersion: 1
+ dirty: true *changed*
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *changed*
+ version: SVC-1-2 *changed*
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json *default*
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection5.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection5.js
new file mode 100644
index 0000000000000..0973168714713
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection5.js
@@ -0,0 +1,360 @@
+Info seq [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/a.ts]
+function foo() { }
+
+// comment
+foo()
+
+//// [/home/src/workspaces/project/folder/target.ts]
+
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{ "files": ["a.ts", "folder/target.ts"] }
+
+
+Info seq [hh:mm:ss:mss] request:
+ {
+ "seq": 0,
+ "type": "request",
+ "arguments": {
+ "file": "/home/src/workspaces/project/folder/target.ts"
+ },
+ "command": "open"
+ }
+Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+ "/home/src/workspaces/project/a.ts",
+ "/home/src/workspaces/project/folder/target.ts"
+ ],
+ "options": {
+ "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "projectLoadingStart",
+ "body": {
+ "projectName": "/home/src/workspaces/project/tsconfig.json",
+ "reason": "Creating possible configured project for /home/src/workspaces/project/folder/target.ts to open"
+ }
+ }
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/a.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\n\n// comment\nfoo()"
+ /home/src/workspaces/project/folder/target.ts SVC-1-0 ""
+
+
+ ../../tslibs/TS/Lib/lib.d.ts
+ Default library for target 'es5'
+ ../../tslibs/TS/Lib/lib.decorators.d.ts
+ Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+ ../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+ a.ts
+ Part of 'files' list in tsconfig.json
+ folder/target.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": "/home/src/workspaces/project/tsconfig.json"
+ }
+ }
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "configFileDiag",
+ "body": {
+ "triggerFile": "/home/src/workspaces/project/folder/target.ts",
+ "configFile": "/home/src/workspaces/project/tsconfig.json",
+ "diagnostics": []
+ }
+ }
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+
+Info seq [hh:mm:ss:mss] -----------------------------------------------
+Info seq [hh:mm:ss:mss] Open files:
+Info seq [hh:mm:ss:mss] FileName: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined
+Info seq [hh:mm:ss:mss] Projects: /home/src/workspaces/project/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::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/a.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/tsconfig.json: *new*
+ {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+ {}
+/home/src/workspaces/node_modules/@types: *new*
+ {}
+/home/src/workspaces/project/node_modules: *new*
+ {}
+/home/src/workspaces/project/node_modules/@types: *new*
+ {}
+
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+ projectStateVersion: 1
+ projectProgramVersion: 1
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *new*
+ version: SVC-1-0
+ containingProjects: 1
+ /home/src/workspaces/project/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": "/home/src/workspaces/project/folder/target.ts",
+ "pastedText": [
+ "// comment\nfoo()"
+ ],
+ "pasteLocations": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ }
+ }
+ ],
+ "copiedFrom": {
+ "file": "/home/src/workspaces/project/a.ts",
+ "spans": [
+ {
+ "start": {
+ "line": 3,
+ "offset": 1
+ },
+ "end": {
+ "line": 4,
+ "offset": 6
+ }
+ }
+ ]
+ }
+ },
+ "command": "getPasteEdits"
+ }
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\n\n// comment\nfoo()"
+ /home/src/workspaces/project/folder/target.ts SVC-1-1 "// comment\nfoo()"
+
+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": "/home/src/workspaces/project/a.ts",
+ "textChanges": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ },
+ "newText": "export "
+ }
+ ]
+ },
+ {
+ "fileName": "/home/src/workspaces/project/folder/target.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": "// comment\nfoo()"
+ }
+ ]
+ }
+ ],
+ "fixId": "providePostPasteEdits"
+ }
+ }
+After Request
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+ projectStateVersion: 3 *changed*
+ projectProgramVersion: 1
+ dirty: true *changed*
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *changed*
+ version: SVC-1-2 *changed*
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json *default*
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection6.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection6.js
new file mode 100644
index 0000000000000..c7ef87ebe9484
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection6.js
@@ -0,0 +1,374 @@
+Info seq [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/a.ts]
+function foo() { }
+const x = foo()
+
+// comment
+foo()
+/* another comment */
+x
+
+//// [/home/src/workspaces/project/folder/target.ts]
+
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{ "files": ["a.ts", "folder/target.ts"] }
+
+
+Info seq [hh:mm:ss:mss] request:
+ {
+ "seq": 0,
+ "type": "request",
+ "arguments": {
+ "file": "/home/src/workspaces/project/folder/target.ts"
+ },
+ "command": "open"
+ }
+Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+ "/home/src/workspaces/project/a.ts",
+ "/home/src/workspaces/project/folder/target.ts"
+ ],
+ "options": {
+ "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "projectLoadingStart",
+ "body": {
+ "projectName": "/home/src/workspaces/project/tsconfig.json",
+ "reason": "Creating possible configured project for /home/src/workspaces/project/folder/target.ts to open"
+ }
+ }
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/a.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\nconst x = foo()\n\n// comment\nfoo()\n/* another comment */\nx"
+ /home/src/workspaces/project/folder/target.ts SVC-1-0 ""
+
+
+ ../../tslibs/TS/Lib/lib.d.ts
+ Default library for target 'es5'
+ ../../tslibs/TS/Lib/lib.decorators.d.ts
+ Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+ ../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+ a.ts
+ Part of 'files' list in tsconfig.json
+ folder/target.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": "/home/src/workspaces/project/tsconfig.json"
+ }
+ }
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "configFileDiag",
+ "body": {
+ "triggerFile": "/home/src/workspaces/project/folder/target.ts",
+ "configFile": "/home/src/workspaces/project/tsconfig.json",
+ "diagnostics": []
+ }
+ }
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+
+Info seq [hh:mm:ss:mss] -----------------------------------------------
+Info seq [hh:mm:ss:mss] Open files:
+Info seq [hh:mm:ss:mss] FileName: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined
+Info seq [hh:mm:ss:mss] Projects: /home/src/workspaces/project/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::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/a.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/tsconfig.json: *new*
+ {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+ {}
+/home/src/workspaces/node_modules/@types: *new*
+ {}
+/home/src/workspaces/project/node_modules: *new*
+ {}
+/home/src/workspaces/project/node_modules/@types: *new*
+ {}
+
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+ projectStateVersion: 1
+ projectProgramVersion: 1
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *new*
+ version: SVC-1-0
+ containingProjects: 1
+ /home/src/workspaces/project/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": "/home/src/workspaces/project/folder/target.ts",
+ "pastedText": [
+ "foo()\n/* another comment */\nx"
+ ],
+ "pasteLocations": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ }
+ }
+ ],
+ "copiedFrom": {
+ "file": "/home/src/workspaces/project/a.ts",
+ "spans": [
+ {
+ "start": {
+ "line": 5,
+ "offset": 1
+ },
+ "end": {
+ "line": 7,
+ "offset": 2
+ }
+ }
+ ]
+ }
+ },
+ "command": "getPasteEdits"
+ }
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\nconst x = foo()\n\n// comment\nfoo()\n/* another comment */\nx"
+ /home/src/workspaces/project/folder/target.ts SVC-1-1 "foo()\n/* another comment */\nx"
+
+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": "/home/src/workspaces/project/a.ts",
+ "textChanges": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ },
+ "newText": "export "
+ },
+ {
+ "start": {
+ "line": 2,
+ "offset": 1
+ },
+ "end": {
+ "line": 2,
+ "offset": 1
+ },
+ "newText": "export "
+ }
+ ]
+ },
+ {
+ "fileName": "/home/src/workspaces/project/folder/target.ts",
+ "textChanges": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ },
+ "newText": "import { foo, x } from \"../a\"\n\n"
+ },
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ },
+ "newText": "foo()\n/* another comment */\nx"
+ }
+ ]
+ }
+ ],
+ "fixId": "providePostPasteEdits"
+ }
+ }
+After Request
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+ projectStateVersion: 3 *changed*
+ projectProgramVersion: 1
+ dirty: true *changed*
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *changed*
+ version: SVC-1-2 *changed*
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json *default*
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection7.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection7.js
new file mode 100644
index 0000000000000..0cbcb672121d1
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection7.js
@@ -0,0 +1,363 @@
+Info seq [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/a.ts]
+function foo() { }
+const x = foo()
+
+// comment
+foo
+/* another comment */
+x
+
+//// [/home/src/workspaces/project/folder/target.ts]
+
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{ "files": ["a.ts", "folder/target.ts"] }
+
+
+Info seq [hh:mm:ss:mss] request:
+ {
+ "seq": 0,
+ "type": "request",
+ "arguments": {
+ "file": "/home/src/workspaces/project/folder/target.ts"
+ },
+ "command": "open"
+ }
+Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+ "/home/src/workspaces/project/a.ts",
+ "/home/src/workspaces/project/folder/target.ts"
+ ],
+ "options": {
+ "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "projectLoadingStart",
+ "body": {
+ "projectName": "/home/src/workspaces/project/tsconfig.json",
+ "reason": "Creating possible configured project for /home/src/workspaces/project/folder/target.ts to open"
+ }
+ }
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/a.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\nconst x = foo()\n\n// comment\nfoo\n/* another comment */\nx"
+ /home/src/workspaces/project/folder/target.ts SVC-1-0 ""
+
+
+ ../../tslibs/TS/Lib/lib.d.ts
+ Default library for target 'es5'
+ ../../tslibs/TS/Lib/lib.decorators.d.ts
+ Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+ ../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+ a.ts
+ Part of 'files' list in tsconfig.json
+ folder/target.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": "/home/src/workspaces/project/tsconfig.json"
+ }
+ }
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "configFileDiag",
+ "body": {
+ "triggerFile": "/home/src/workspaces/project/folder/target.ts",
+ "configFile": "/home/src/workspaces/project/tsconfig.json",
+ "diagnostics": []
+ }
+ }
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+
+Info seq [hh:mm:ss:mss] -----------------------------------------------
+Info seq [hh:mm:ss:mss] Open files:
+Info seq [hh:mm:ss:mss] FileName: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined
+Info seq [hh:mm:ss:mss] Projects: /home/src/workspaces/project/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::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/a.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/tsconfig.json: *new*
+ {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+ {}
+/home/src/workspaces/node_modules/@types: *new*
+ {}
+/home/src/workspaces/project/node_modules: *new*
+ {}
+/home/src/workspaces/project/node_modules/@types: *new*
+ {}
+
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+ projectStateVersion: 1
+ projectProgramVersion: 1
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *new*
+ version: SVC-1-0
+ containingProjects: 1
+ /home/src/workspaces/project/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": "/home/src/workspaces/project/folder/target.ts",
+ "pastedText": [
+ "foo\n/* another comment */"
+ ],
+ "pasteLocations": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ }
+ }
+ ],
+ "copiedFrom": {
+ "file": "/home/src/workspaces/project/a.ts",
+ "spans": [
+ {
+ "start": {
+ "line": 5,
+ "offset": 1
+ },
+ "end": {
+ "line": 6,
+ "offset": 22
+ }
+ }
+ ]
+ }
+ },
+ "command": "getPasteEdits"
+ }
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\nconst x = foo()\n\n// comment\nfoo\n/* another comment */\nx"
+ /home/src/workspaces/project/folder/target.ts SVC-1-1 "foo\n/* another comment */"
+
+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": "/home/src/workspaces/project/a.ts",
+ "textChanges": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ },
+ "newText": "export "
+ }
+ ]
+ },
+ {
+ "fileName": "/home/src/workspaces/project/folder/target.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\n/* another comment */"
+ }
+ ]
+ }
+ ],
+ "fixId": "providePostPasteEdits"
+ }
+ }
+After Request
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+ projectStateVersion: 3 *changed*
+ projectProgramVersion: 1
+ dirty: true *changed*
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *changed*
+ version: SVC-1-2 *changed*
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json *default*
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection8.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection8.js
new file mode 100644
index 0000000000000..78726e80feb76
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection8.js
@@ -0,0 +1,363 @@
+Info seq [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/a.ts]
+function foo() { }
+const aaaa = foo()
+
+// comment
+foo
+/* another comment */
+aaaa
+
+//// [/home/src/workspaces/project/folder/target.ts]
+
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{ "files": ["a.ts", "folder/target.ts"] }
+
+
+Info seq [hh:mm:ss:mss] request:
+ {
+ "seq": 0,
+ "type": "request",
+ "arguments": {
+ "file": "/home/src/workspaces/project/folder/target.ts"
+ },
+ "command": "open"
+ }
+Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+ "/home/src/workspaces/project/a.ts",
+ "/home/src/workspaces/project/folder/target.ts"
+ ],
+ "options": {
+ "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "projectLoadingStart",
+ "body": {
+ "projectName": "/home/src/workspaces/project/tsconfig.json",
+ "reason": "Creating possible configured project for /home/src/workspaces/project/folder/target.ts to open"
+ }
+ }
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/a.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\nconst aaaa = foo()\n\n// comment\nfoo\n/* another comment */\naaaa"
+ /home/src/workspaces/project/folder/target.ts SVC-1-0 ""
+
+
+ ../../tslibs/TS/Lib/lib.d.ts
+ Default library for target 'es5'
+ ../../tslibs/TS/Lib/lib.decorators.d.ts
+ Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+ ../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+ a.ts
+ Part of 'files' list in tsconfig.json
+ folder/target.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": "/home/src/workspaces/project/tsconfig.json"
+ }
+ }
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "configFileDiag",
+ "body": {
+ "triggerFile": "/home/src/workspaces/project/folder/target.ts",
+ "configFile": "/home/src/workspaces/project/tsconfig.json",
+ "diagnostics": []
+ }
+ }
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+
+Info seq [hh:mm:ss:mss] -----------------------------------------------
+Info seq [hh:mm:ss:mss] Open files:
+Info seq [hh:mm:ss:mss] FileName: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined
+Info seq [hh:mm:ss:mss] Projects: /home/src/workspaces/project/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::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/a.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/tsconfig.json: *new*
+ {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+ {}
+/home/src/workspaces/node_modules/@types: *new*
+ {}
+/home/src/workspaces/project/node_modules: *new*
+ {}
+/home/src/workspaces/project/node_modules/@types: *new*
+ {}
+
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+ projectStateVersion: 1
+ projectProgramVersion: 1
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *new*
+ version: SVC-1-0
+ containingProjects: 1
+ /home/src/workspaces/project/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": "/home/src/workspaces/project/folder/target.ts",
+ "pastedText": [
+ "foo\n/* another comment */\na"
+ ],
+ "pasteLocations": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ }
+ }
+ ],
+ "copiedFrom": {
+ "file": "/home/src/workspaces/project/a.ts",
+ "spans": [
+ {
+ "start": {
+ "line": 5,
+ "offset": 1
+ },
+ "end": {
+ "line": 7,
+ "offset": 2
+ }
+ }
+ ]
+ }
+ },
+ "command": "getPasteEdits"
+ }
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\nconst aaaa = foo()\n\n// comment\nfoo\n/* another comment */\naaaa"
+ /home/src/workspaces/project/folder/target.ts SVC-1-1 "foo\n/* another comment */\na"
+
+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": "/home/src/workspaces/project/a.ts",
+ "textChanges": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ },
+ "newText": "export "
+ }
+ ]
+ },
+ {
+ "fileName": "/home/src/workspaces/project/folder/target.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\n/* another comment */\na"
+ }
+ ]
+ }
+ ],
+ "fixId": "providePostPasteEdits"
+ }
+ }
+After Request
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+ projectStateVersion: 3 *changed*
+ projectProgramVersion: 1
+ dirty: true *changed*
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *changed*
+ version: SVC-1-2 *changed*
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json *default*
diff --git a/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection9.js b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection9.js
new file mode 100644
index 0000000000000..bc48dcb20e8e8
--- /dev/null
+++ b/tests/baselines/reference/tsserver/fourslashServer/pasteEdits_rangeSelection9.js
@@ -0,0 +1,361 @@
+Info seq [hh:mm:ss:mss] currentDirectory:: /home/src/Vscode/Projects/bin useCaseSensitiveFileNames:: false
+Info seq [hh:mm:ss:mss] libs Location:: /home/src/tslibs/TS/Lib
+Info seq [hh:mm:ss:mss] globalTypingsCacheLocation:: /home/src/Library/Caches/typescript
+Info seq [hh:mm:ss:mss] Provided types map file "/home/src/tslibs/TS/Lib/typesMap.json" doesn't exist
+//// [/home/src/tslibs/TS/Lib/lib.d.ts]
+lib.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.d.ts]
+lib.decorators.d.ts-Text
+
+//// [/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts]
+lib.decorators.legacy.d.ts-Text
+
+//// [/home/src/workspaces/project/a.ts]
+function foo() { }
+
+// comment
+foo
+/* another comment */
+
+//// [/home/src/workspaces/project/folder/target.ts]
+
+
+//// [/home/src/workspaces/project/tsconfig.json]
+{ "files": ["a.ts", "folder/target.ts"] }
+
+
+Info seq [hh:mm:ss:mss] request:
+ {
+ "seq": 0,
+ "type": "request",
+ "arguments": {
+ "file": "/home/src/workspaces/project/folder/target.ts"
+ },
+ "command": "open"
+ }
+Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined:: Result: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Creating ConfiguredProject: /home/src/workspaces/project/tsconfig.json, currentDirectory: /home/src/workspaces/project
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/tsconfig.json 2000 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Config file
+Info seq [hh:mm:ss:mss] Config: /home/src/workspaces/project/tsconfig.json : {
+ "rootNames": [
+ "/home/src/workspaces/project/a.ts",
+ "/home/src/workspaces/project/folder/target.ts"
+ ],
+ "options": {
+ "configFilePath": "/home/src/workspaces/project/tsconfig.json"
+ }
+}
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "projectLoadingStart",
+ "body": {
+ "projectName": "/home/src/workspaces/project/tsconfig.json",
+ "reason": "Creating possible configured project for /home/src/workspaces/project/folder/target.ts to open"
+ }
+ }
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/workspaces/project/a.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Failed Lookup Locations
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/project/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/workspaces/node_modules/@types 1 undefined Project: /home/src/workspaces/project/tsconfig.json WatchType: Type roots
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\n\n// comment\nfoo\n/* another comment */"
+ /home/src/workspaces/project/folder/target.ts SVC-1-0 ""
+
+
+ ../../tslibs/TS/Lib/lib.d.ts
+ Default library for target 'es5'
+ ../../tslibs/TS/Lib/lib.decorators.d.ts
+ Library referenced via 'decorators' from file '../../tslibs/TS/Lib/lib.d.ts'
+ ../../tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ Library referenced via 'decorators.legacy' from file '../../tslibs/TS/Lib/lib.d.ts'
+ a.ts
+ Part of 'files' list in tsconfig.json
+ folder/target.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": "/home/src/workspaces/project/tsconfig.json"
+ }
+ }
+Info seq [hh:mm:ss:mss] event:
+ {
+ "seq": 0,
+ "type": "event",
+ "event": "configFileDiag",
+ "body": {
+ "triggerFile": "/home/src/workspaces/project/folder/target.ts",
+ "configFile": "/home/src/workspaces/project/tsconfig.json",
+ "diagnostics": []
+ }
+ }
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+
+Info seq [hh:mm:ss:mss] -----------------------------------------------
+Info seq [hh:mm:ss:mss] Open files:
+Info seq [hh:mm:ss:mss] FileName: /home/src/workspaces/project/folder/target.ts ProjectRootPath: undefined
+Info seq [hh:mm:ss:mss] Projects: /home/src/workspaces/project/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::
+/home/src/tslibs/TS/Lib/lib.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/a.ts: *new*
+ {"pollingInterval":500}
+/home/src/workspaces/project/tsconfig.json: *new*
+ {"pollingInterval":2000}
+
+watchedDirectoriesRecursive::
+/home/src/workspaces/node_modules: *new*
+ {}
+/home/src/workspaces/node_modules/@types: *new*
+ {}
+/home/src/workspaces/project/node_modules: *new*
+ {}
+/home/src/workspaces/project/node_modules/@types: *new*
+ {}
+
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *new*
+ projectStateVersion: 1
+ projectProgramVersion: 1
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts *new*
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *new*
+ version: SVC-1-0
+ containingProjects: 1
+ /home/src/workspaces/project/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": "/home/src/workspaces/project/folder/target.ts",
+ "pastedText": [
+ "foo"
+ ],
+ "pasteLocations": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ }
+ }
+ ],
+ "copiedFrom": {
+ "file": "/home/src/workspaces/project/a.ts",
+ "spans": [
+ {
+ "start": {
+ "line": 4,
+ "offset": 1
+ },
+ "end": {
+ "line": 4,
+ "offset": 4
+ }
+ }
+ ]
+ }
+ },
+ "command": "getPasteEdits"
+ }
+Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json
+Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /home/src/workspaces/project/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms
+Info seq [hh:mm:ss:mss] Project '/home/src/workspaces/project/tsconfig.json' (Configured)
+Info seq [hh:mm:ss:mss] Files (5)
+ /home/src/tslibs/TS/Lib/lib.d.ts Text-1 lib.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
+ /home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
+ /home/src/workspaces/project/a.ts Text-1 "function foo() { }\n\n// comment\nfoo\n/* another comment */"
+ /home/src/workspaces/project/folder/target.ts SVC-1-1 "foo"
+
+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": "/home/src/workspaces/project/a.ts",
+ "textChanges": [
+ {
+ "start": {
+ "line": 1,
+ "offset": 1
+ },
+ "end": {
+ "line": 1,
+ "offset": 1
+ },
+ "newText": "export "
+ }
+ ]
+ },
+ {
+ "fileName": "/home/src/workspaces/project/folder/target.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"
+ }
+ ]
+ }
+ ],
+ "fixId": "providePostPasteEdits"
+ }
+ }
+After Request
+Projects::
+/home/src/workspaces/project/tsconfig.json (Configured) *changed*
+ projectStateVersion: 3 *changed*
+ projectProgramVersion: 1
+ dirty: true *changed*
+ autoImportProviderHost: false
+
+ScriptInfos::
+/home/src/tslibs/TS/Lib/lib.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/tslibs/TS/Lib/lib.decorators.legacy.d.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/a.ts
+ version: Text-1
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json
+/home/src/workspaces/project/folder/target.ts (Open) *changed*
+ version: SVC-1-2 *changed*
+ containingProjects: 1
+ /home/src/workspaces/project/tsconfig.json *default*
diff --git a/tests/cases/fourslash/server/pasteEdits_rangeSelection0.ts b/tests/cases/fourslash/server/pasteEdits_rangeSelection0.ts
new file mode 100644
index 0000000000000..5ab90a9b480d2
--- /dev/null
+++ b/tests/cases/fourslash/server/pasteEdits_rangeSelection0.ts
@@ -0,0 +1,23 @@
+///
+// @Filename: /home/src/workspaces/project/folder/target.ts
+////[||]
+
+// @Filename: /home/src/workspaces/project/a.ts
+//// [||]function foo() { }
+//// const x = foo()
+////
+//// foo()
+//// x
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+////{ "files": ["a.ts", "folder/target.ts"] }
+
+const ranges = test.ranges();
+verify.pasteEdits({
+ args: {
+ pastedText: [``],
+ pasteLocations: [ranges[0]],
+ copiedFrom: { file: "/home/src/workspaces/project/a.ts", range: [ranges[1]] },
+ },
+ newFileContents: {}
+});
diff --git a/tests/cases/fourslash/server/pasteEdits_rangeSelection1.ts b/tests/cases/fourslash/server/pasteEdits_rangeSelection1.ts
new file mode 100644
index 0000000000000..f9276c236dadb
--- /dev/null
+++ b/tests/cases/fourslash/server/pasteEdits_rangeSelection1.ts
@@ -0,0 +1,34 @@
+///
+// @Filename: /home/src/workspaces/project/folder/target.ts
+////[||]
+
+// @Filename: /home/src/workspaces/project/a.ts
+//// function foo() { }
+//// const x = foo()
+////
+//// [|foo()|]
+//// x
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+////{ "files": ["a.ts", "folder/target.ts"] }
+
+const ranges = test.ranges();
+verify.pasteEdits({
+ args: {
+ pastedText: [`foo()`],
+ pasteLocations: [ranges[0]],
+ copiedFrom: { file: "/home/src/workspaces/project/a.ts", range: [ranges[1]] },
+ },
+ newFileContents: {
+ "/home/src/workspaces/project/folder/target.ts":
+`import { foo } from "../a";
+
+foo()`,
+ "/home/src/workspaces/project/a.ts":
+`export function foo() { }
+const x = foo()
+
+foo()
+x`,
+ }
+});
diff --git a/tests/cases/fourslash/server/pasteEdits_rangeSelection2.ts b/tests/cases/fourslash/server/pasteEdits_rangeSelection2.ts
new file mode 100644
index 0000000000000..4f6992b1f1868
--- /dev/null
+++ b/tests/cases/fourslash/server/pasteEdits_rangeSelection2.ts
@@ -0,0 +1,32 @@
+///
+// @Filename: /home/src/workspaces/project/folder/target.ts
+////[||]
+
+// @Filename: /home/src/workspaces/project/a.ts
+//// function foo() { }
+////
+//// // comment
+//// [|foo()|]
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+////{ "files": ["a.ts", "folder/target.ts"] }
+
+const ranges = test.ranges();
+verify.pasteEdits({
+ args: {
+ pastedText: [`foo()`],
+ pasteLocations: [ranges[0]],
+ copiedFrom: { file: "/home/src/workspaces/project/a.ts", range: [ranges[1]] },
+ },
+ newFileContents: {
+ "/home/src/workspaces/project/folder/target.ts":
+`import { foo } from "../a";
+
+foo()`,
+ "/home/src/workspaces/project/a.ts":
+`export function foo() { }
+
+// comment
+foo()`,
+ }
+});
diff --git a/tests/cases/fourslash/server/pasteEdits_rangeSelection3.ts b/tests/cases/fourslash/server/pasteEdits_rangeSelection3.ts
new file mode 100644
index 0000000000000..d9cd323acdab1
--- /dev/null
+++ b/tests/cases/fourslash/server/pasteEdits_rangeSelection3.ts
@@ -0,0 +1,32 @@
+///
+// @Filename: /home/src/workspaces/project/folder/target.ts
+////[||]
+
+// @Filename: /home/src/workspaces/project/a.ts
+//// function foo() { }
+////
+//// /* comment */
+//// [|foo()|]
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+////{ "files": ["a.ts", "folder/target.ts"] }
+
+const ranges = test.ranges();
+verify.pasteEdits({
+ args: {
+ pastedText: [`foo()`],
+ pasteLocations: [ranges[0]],
+ copiedFrom: { file: "/home/src/workspaces/project/a.ts", range: [ranges[1]] },
+ },
+ newFileContents: {
+ "/home/src/workspaces/project/folder/target.ts":
+`import { foo } from "../a";
+
+foo()`,
+ "/home/src/workspaces/project/a.ts":
+`export function foo() { }
+
+/* comment */
+foo()`,
+ }
+});
diff --git a/tests/cases/fourslash/server/pasteEdits_rangeSelection4.ts b/tests/cases/fourslash/server/pasteEdits_rangeSelection4.ts
new file mode 100644
index 0000000000000..56c6d6ce60c0c
--- /dev/null
+++ b/tests/cases/fourslash/server/pasteEdits_rangeSelection4.ts
@@ -0,0 +1,44 @@
+///
+// @Filename: /home/src/workspaces/project/folder/target.ts
+////[||]
+
+// @Filename: /home/src/workspaces/project/a.ts
+//// function foo() { }
+////
+//// /*
+//// [| comment
+//// more comment
+//// */
+//// foo()|]
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+////{ "files": ["a.ts", "folder/target.ts"] }
+
+const ranges = test.ranges();
+verify.pasteEdits({
+ args: {
+ pastedText: [` comment
+ more comment
+*/
+foo()`],
+ pasteLocations: [ranges[0]],
+ copiedFrom: { file: "/home/src/workspaces/project/a.ts", range: [ranges[1]] },
+ },
+ newFileContents: {
+ "/home/src/workspaces/project/folder/target.ts":
+`import { foo } from "../a"
+
+ comment
+ more comment
+*/
+foo()`,
+ "/home/src/workspaces/project/a.ts":
+`export function foo() { }
+
+/*
+ comment
+ more comment
+*/
+foo()`,
+ }
+});
diff --git a/tests/cases/fourslash/server/pasteEdits_rangeSelection5.ts b/tests/cases/fourslash/server/pasteEdits_rangeSelection5.ts
new file mode 100644
index 0000000000000..df881e68744c8
--- /dev/null
+++ b/tests/cases/fourslash/server/pasteEdits_rangeSelection5.ts
@@ -0,0 +1,34 @@
+///
+// @Filename: /home/src/workspaces/project/folder/target.ts
+////[||]
+
+// @Filename: /home/src/workspaces/project/a.ts
+//// function foo() { }
+////
+//// [|// comment
+//// foo()|]
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+////{ "files": ["a.ts", "folder/target.ts"] }
+
+const ranges = test.ranges();
+verify.pasteEdits({
+ args: {
+ pastedText: [`// comment
+foo()`],
+ pasteLocations: [ranges[0]],
+ copiedFrom: { file: "/home/src/workspaces/project/a.ts", range: [ranges[1]] },
+ },
+ newFileContents: {
+ "/home/src/workspaces/project/folder/target.ts":
+`import { foo } from "../a";
+
+// comment
+foo()`,
+ "/home/src/workspaces/project/a.ts":
+`export function foo() { }
+
+// comment
+foo()`,
+ }
+});
diff --git a/tests/cases/fourslash/server/pasteEdits_rangeSelection6.ts b/tests/cases/fourslash/server/pasteEdits_rangeSelection6.ts
new file mode 100644
index 0000000000000..607e98f052ff6
--- /dev/null
+++ b/tests/cases/fourslash/server/pasteEdits_rangeSelection6.ts
@@ -0,0 +1,42 @@
+///
+// @Filename: /home/src/workspaces/project/folder/target.ts
+////[||]
+
+// @Filename: /home/src/workspaces/project/a.ts
+//// function foo() { }
+//// const x = foo()
+////
+//// // comment
+//// [|foo()
+//// /* another comment */
+//// x|]
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+////{ "files": ["a.ts", "folder/target.ts"] }
+
+const ranges = test.ranges();
+verify.pasteEdits({
+ args: {
+ pastedText: [`foo()
+/* another comment */
+x`],
+ pasteLocations: [ranges[0]],
+ copiedFrom: { file: "/home/src/workspaces/project/a.ts", range: [ranges[1]] },
+ },
+ newFileContents: {
+ "/home/src/workspaces/project/folder/target.ts":
+`import { foo, x } from "../a"
+
+foo()
+/* another comment */
+x`,
+ "/home/src/workspaces/project/a.ts":
+`export function foo() { }
+export const x = foo()
+
+// comment
+foo()
+/* another comment */
+x`,
+ }
+});
diff --git a/tests/cases/fourslash/server/pasteEdits_rangeSelection7.ts b/tests/cases/fourslash/server/pasteEdits_rangeSelection7.ts
new file mode 100644
index 0000000000000..cf8deea6bcc22
--- /dev/null
+++ b/tests/cases/fourslash/server/pasteEdits_rangeSelection7.ts
@@ -0,0 +1,40 @@
+///
+// @Filename: /home/src/workspaces/project/folder/target.ts
+////[||]
+
+// @Filename: /home/src/workspaces/project/a.ts
+//// function foo() { }
+//// const x = foo()
+////
+//// // comment
+//// [|foo
+//// /* another comment */|]
+//// x
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+////{ "files": ["a.ts", "folder/target.ts"] }
+
+const ranges = test.ranges();
+verify.pasteEdits({
+ args: {
+ pastedText: [`foo
+/* another comment */`],
+ pasteLocations: [ranges[0]],
+ copiedFrom: { file: "/home/src/workspaces/project/a.ts", range: [ranges[1]] },
+ },
+ newFileContents: {
+ "/home/src/workspaces/project/folder/target.ts":
+`import { foo } from "../a";
+
+foo
+/* another comment */`,
+ "/home/src/workspaces/project/a.ts":
+`export function foo() { }
+const x = foo()
+
+// comment
+foo
+/* another comment */
+x`,
+ }
+});
diff --git a/tests/cases/fourslash/server/pasteEdits_rangeSelection8.ts b/tests/cases/fourslash/server/pasteEdits_rangeSelection8.ts
new file mode 100644
index 0000000000000..13a54c2f854f7
--- /dev/null
+++ b/tests/cases/fourslash/server/pasteEdits_rangeSelection8.ts
@@ -0,0 +1,42 @@
+///
+// @Filename: /home/src/workspaces/project/folder/target.ts
+////[||]
+
+// @Filename: /home/src/workspaces/project/a.ts
+//// function foo() { }
+//// const aaaa = foo()
+////
+//// // comment
+//// [|foo
+//// /* another comment */
+//// a|]aaa
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+////{ "files": ["a.ts", "folder/target.ts"] }
+
+const ranges = test.ranges();
+verify.pasteEdits({
+ args: {
+ pastedText: [`foo
+/* another comment */
+a`],
+ pasteLocations: [ranges[0]],
+ copiedFrom: { file: "/home/src/workspaces/project/a.ts", range: [ranges[1]] },
+ },
+ newFileContents: {
+ "/home/src/workspaces/project/folder/target.ts":
+`import { foo } from "../a"
+
+foo
+/* another comment */
+a`,
+ "/home/src/workspaces/project/a.ts":
+`export function foo() { }
+const aaaa = foo()
+
+// comment
+foo
+/* another comment */
+aaaa`,
+ }
+});
diff --git a/tests/cases/fourslash/server/pasteEdits_rangeSelection9.ts b/tests/cases/fourslash/server/pasteEdits_rangeSelection9.ts
new file mode 100644
index 0000000000000..872746f4ba141
--- /dev/null
+++ b/tests/cases/fourslash/server/pasteEdits_rangeSelection9.ts
@@ -0,0 +1,34 @@
+///
+// @Filename: /home/src/workspaces/project/folder/target.ts
+////[||]
+
+// @Filename: /home/src/workspaces/project/a.ts
+//// function foo() { }
+////
+//// // comment
+//// [|foo|]
+//// /* another comment */
+
+// @Filename: /home/src/workspaces/project/tsconfig.json
+////{ "files": ["a.ts", "folder/target.ts"] }
+
+const ranges = test.ranges();
+verify.pasteEdits({
+ args: {
+ pastedText: [`foo`],
+ pasteLocations: [ranges[0]],
+ copiedFrom: { file: "/home/src/workspaces/project/a.ts", range: [ranges[1]] },
+ },
+ newFileContents: {
+ "/home/src/workspaces/project/folder/target.ts":
+`import { foo } from "../a";
+
+foo`,
+ "/home/src/workspaces/project/a.ts":
+`export function foo() { }
+
+// comment
+foo
+/* another comment */`,
+ }
+});