From 16332a67ed9c32f496f8d37526b24c35fa94a016 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Thu, 23 Jan 2025 10:38:48 -0800 Subject: [PATCH 1/7] adding check for imports in preparePasteEdits --- src/services/preparePasteEdits.ts | 13 +++++++++++++ .../fourslash/preparePasteEdits_returnFalse.ts | 3 +++ 2 files changed, 16 insertions(+) diff --git a/src/services/preparePasteEdits.ts b/src/services/preparePasteEdits.ts index 9d3879fe5428c..480426fa66788 100644 --- a/src/services/preparePasteEdits.ts +++ b/src/services/preparePasteEdits.ts @@ -2,7 +2,14 @@ import { findAncestor, forEachChild, getTokenAtPosition, + isBindingElement, isIdentifier, + isImportClause, + isImportDeclaration, + isImportEqualsDeclaration, + isImportSpecifier, + isNamedImports, + isNamespaceImport, rangeContainsPosition, rangeContainsRange, SourceFile, @@ -25,6 +32,12 @@ export function preparePasteEdits( ancestorNode => rangeContainsRange(ancestorNode, range), ); if (!enclosingNode) return; + if ( + isImportSpecifier(enclosingNode) || isImportClause(enclosingNode) || isNamespaceImport(enclosingNode) || isImportEqualsDeclaration(enclosingNode) + || isBindingElement(enclosingNode) || isImportDeclaration(enclosingNode) || isNamedImports(enclosingNode) + ) { + return; + } forEachChild(enclosingNode, function checkNameResolution(node) { if (shouldProvidePasteEdits) return; if (isIdentifier(node) && rangeContainsPosition(range, node.getStart(sourceFile))) { diff --git a/tests/cases/fourslash/preparePasteEdits_returnFalse.ts b/tests/cases/fourslash/preparePasteEdits_returnFalse.ts index 6c79c1e4c834c..a10ee5fa87c3a 100644 --- a/tests/cases/fourslash/preparePasteEdits_returnFalse.ts +++ b/tests/cases/fourslash/preparePasteEdits_returnFalse.ts @@ -1,11 +1,14 @@ /// // @Filename: /file1.ts +//// import [|{abc}|] from "./file2"; //// [|const a = 1;|] //// [|function foo() { //// console.log("testing");}|] //// [|//This is a comment|] +// @Filename: /file2.ts +//// export const abc = 1; verify.preparePasteEdits({ copiedFromFile: "/file1.ts", copiedTextRange: test.ranges(), From f98c142b00f2adc2237d5a86373f4cb5a00d16e6 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Thu, 23 Jan 2025 10:44:26 -0800 Subject: [PATCH 2/7] fixing test --- tests/cases/fourslash/preparePasteEdits_returnFalse.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/cases/fourslash/preparePasteEdits_returnFalse.ts b/tests/cases/fourslash/preparePasteEdits_returnFalse.ts index a10ee5fa87c3a..61af94064fe05 100644 --- a/tests/cases/fourslash/preparePasteEdits_returnFalse.ts +++ b/tests/cases/fourslash/preparePasteEdits_returnFalse.ts @@ -1,7 +1,7 @@ /// // @Filename: /file1.ts -//// import [|{abc}|] from "./file2"; +//// [|import {abc} from "./file2";|] //// [|const a = 1;|] //// [|function foo() { //// console.log("testing");}|] From 9658e0a74579a95653082335a3238a13bd8aecf2 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Thu, 23 Jan 2025 10:46:59 -0800 Subject: [PATCH 3/7] removing binding element check --- src/services/preparePasteEdits.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/preparePasteEdits.ts b/src/services/preparePasteEdits.ts index 480426fa66788..4b080bbfbd6d1 100644 --- a/src/services/preparePasteEdits.ts +++ b/src/services/preparePasteEdits.ts @@ -33,8 +33,8 @@ export function preparePasteEdits( ); if (!enclosingNode) return; if ( - isImportSpecifier(enclosingNode) || isImportClause(enclosingNode) || isNamespaceImport(enclosingNode) || isImportEqualsDeclaration(enclosingNode) - || isBindingElement(enclosingNode) || isImportDeclaration(enclosingNode) || isNamedImports(enclosingNode) + isImportSpecifier(enclosingNode) || isImportClause(enclosingNode) || isNamespaceImport(enclosingNode) + || isImportEqualsDeclaration(enclosingNode) || isImportDeclaration(enclosingNode) || isNamedImports(enclosingNode) ) { return; } From 7bbb51fea71f78eebf7d262b00662f24e08c94e1 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Thu, 23 Jan 2025 11:01:35 -0800 Subject: [PATCH 4/7] removing import --- src/services/preparePasteEdits.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/services/preparePasteEdits.ts b/src/services/preparePasteEdits.ts index 4b080bbfbd6d1..cc413539f6b80 100644 --- a/src/services/preparePasteEdits.ts +++ b/src/services/preparePasteEdits.ts @@ -2,7 +2,6 @@ import { findAncestor, forEachChild, getTokenAtPosition, - isBindingElement, isIdentifier, isImportClause, isImportDeclaration, From 8aa667394bd2b033b09dedb22a2a3fa750ad8750 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Mon, 27 Jan 2025 12:45:16 -0800 Subject: [PATCH 5/7] adding tests and export check --- src/services/preparePasteEdits.ts | 9 ++++++-- .../preparePasteEdits_returnFalse.ts | 1 - ...steEdits_returnFalseForImportAndExports.ts | 21 +++++++++++++++++++ ...eEdits_returnFalseForImportsAndExports2.ts | 14 +++++++++++++ 4 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 tests/cases/fourslash/preparePasteEdits_returnFalseForImportAndExports.ts create mode 100644 tests/cases/fourslash/preparePasteEdits_returnFalseForImportsAndExports2.ts diff --git a/src/services/preparePasteEdits.ts b/src/services/preparePasteEdits.ts index cc413539f6b80..21d2ad10e0be7 100644 --- a/src/services/preparePasteEdits.ts +++ b/src/services/preparePasteEdits.ts @@ -2,11 +2,15 @@ import { findAncestor, forEachChild, getTokenAtPosition, + isExportAssignment, + isExportDeclaration, + isExportSpecifier, isIdentifier, isImportClause, isImportDeclaration, isImportEqualsDeclaration, isImportSpecifier, + isNamedExports, isNamedImports, isNamespaceImport, rangeContainsPosition, @@ -32,8 +36,9 @@ export function preparePasteEdits( ); if (!enclosingNode) return; if ( - isImportSpecifier(enclosingNode) || isImportClause(enclosingNode) || isNamespaceImport(enclosingNode) - || isImportEqualsDeclaration(enclosingNode) || isImportDeclaration(enclosingNode) || isNamedImports(enclosingNode) + isImportSpecifier(enclosingNode) || isImportClause(enclosingNode) || isNamespaceImport(enclosingNode) || isImportEqualsDeclaration(enclosingNode) + || isImportDeclaration(enclosingNode) || isNamedImports(enclosingNode) || isExportSpecifier(enclosingNode) || isNamedExports(enclosingNode) + || isExportAssignment(enclosingNode) || isExportDeclaration(enclosingNode) ) { return; } diff --git a/tests/cases/fourslash/preparePasteEdits_returnFalse.ts b/tests/cases/fourslash/preparePasteEdits_returnFalse.ts index 61af94064fe05..f1b94b40b9d4d 100644 --- a/tests/cases/fourslash/preparePasteEdits_returnFalse.ts +++ b/tests/cases/fourslash/preparePasteEdits_returnFalse.ts @@ -1,7 +1,6 @@ /// // @Filename: /file1.ts -//// [|import {abc} from "./file2";|] //// [|const a = 1;|] //// [|function foo() { //// console.log("testing");}|] diff --git a/tests/cases/fourslash/preparePasteEdits_returnFalseForImportAndExports.ts b/tests/cases/fourslash/preparePasteEdits_returnFalseForImportAndExports.ts new file mode 100644 index 0000000000000..547a4612b1393 --- /dev/null +++ b/tests/cases/fourslash/preparePasteEdits_returnFalseForImportAndExports.ts @@ -0,0 +1,21 @@ +/// + +// @Filename: /file1.ts +//// import {[|abc|]} from "[|./file2|]"; +//// import [|{q}|] from [|"./file3"|]; +//// [|import * as a from "./file2";|] +//// +//// const b = 1; +//// const c = 2; +//// [|export {[|b|], c} from "./file1";|] + +// @Filename: /file2.ts +//// export const abc = 1; + +// @Filename: /file3.ts +//// export const q = 1; +verify.preparePasteEdits({ + copiedFromFile: "/file1.ts", + copiedTextRange: test.ranges(), + providePasteEdits: false, +}) diff --git a/tests/cases/fourslash/preparePasteEdits_returnFalseForImportsAndExports2.ts b/tests/cases/fourslash/preparePasteEdits_returnFalseForImportsAndExports2.ts new file mode 100644 index 0000000000000..c4280f788e0d5 --- /dev/null +++ b/tests/cases/fourslash/preparePasteEdits_returnFalseForImportsAndExports2.ts @@ -0,0 +1,14 @@ +/// + +// @allowJs: true +// @module: commonjs + +// @Filename: /file1.ts +//// [|import [|t|] = require("./file2");|] +//// function add(a: number, b: number): number { +//// return a + b; +//// } +//// [|export = add;|] + +// @Filename: /file2.ts +//// export const t = 1; \ No newline at end of file From 8a67b21b854f641b7ea435640fdc9f6931f80ef1 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Mon, 27 Jan 2025 12:47:32 -0800 Subject: [PATCH 6/7] fixing test --- .../preparePasteEdits_returnFalseForImportsAndExports2.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/cases/fourslash/preparePasteEdits_returnFalseForImportsAndExports2.ts b/tests/cases/fourslash/preparePasteEdits_returnFalseForImportsAndExports2.ts index c4280f788e0d5..dacf3c6d96590 100644 --- a/tests/cases/fourslash/preparePasteEdits_returnFalseForImportsAndExports2.ts +++ b/tests/cases/fourslash/preparePasteEdits_returnFalseForImportsAndExports2.ts @@ -11,4 +11,10 @@ //// [|export = add;|] // @Filename: /file2.ts -//// export const t = 1; \ No newline at end of file +//// export const t = 1; + +verify.preparePasteEdits({ + copiedFromFile: "/file1.ts", + copiedTextRange: test.ranges(), + providePasteEdits: false, +}) \ No newline at end of file From 54ea615922ac1832b53cc6098865b587b783f2a9 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Mon, 27 Jan 2025 12:49:07 -0800 Subject: [PATCH 7/7] not needed --- tests/cases/fourslash/preparePasteEdits_returnFalse.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/cases/fourslash/preparePasteEdits_returnFalse.ts b/tests/cases/fourslash/preparePasteEdits_returnFalse.ts index f1b94b40b9d4d..6c79c1e4c834c 100644 --- a/tests/cases/fourslash/preparePasteEdits_returnFalse.ts +++ b/tests/cases/fourslash/preparePasteEdits_returnFalse.ts @@ -6,8 +6,6 @@ //// console.log("testing");}|] //// [|//This is a comment|] -// @Filename: /file2.ts -//// export const abc = 1; verify.preparePasteEdits({ copiedFromFile: "/file1.ts", copiedTextRange: test.ranges(),