diff --git a/src/services/preparePasteEdits.ts b/src/services/preparePasteEdits.ts
index 9d3879fe5428c..21d2ad10e0be7 100644
--- a/src/services/preparePasteEdits.ts
+++ b/src/services/preparePasteEdits.ts
@@ -2,7 +2,17 @@ import {
findAncestor,
forEachChild,
getTokenAtPosition,
+ isExportAssignment,
+ isExportDeclaration,
+ isExportSpecifier,
isIdentifier,
+ isImportClause,
+ isImportDeclaration,
+ isImportEqualsDeclaration,
+ isImportSpecifier,
+ isNamedExports,
+ isNamedImports,
+ isNamespaceImport,
rangeContainsPosition,
rangeContainsRange,
SourceFile,
@@ -25,6 +35,13 @@ export function preparePasteEdits(
ancestorNode => rangeContainsRange(ancestorNode, range),
);
if (!enclosingNode) return;
+ if (
+ isImportSpecifier(enclosingNode) || isImportClause(enclosingNode) || isNamespaceImport(enclosingNode) || isImportEqualsDeclaration(enclosingNode)
+ || isImportDeclaration(enclosingNode) || isNamedImports(enclosingNode) || isExportSpecifier(enclosingNode) || isNamedExports(enclosingNode)
+ || isExportAssignment(enclosingNode) || isExportDeclaration(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_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..dacf3c6d96590
--- /dev/null
+++ b/tests/cases/fourslash/preparePasteEdits_returnFalseForImportsAndExports2.ts
@@ -0,0 +1,20 @@
+///
+
+// @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;
+
+verify.preparePasteEdits({
+ copiedFromFile: "/file1.ts",
+ copiedTextRange: test.ranges(),
+ providePasteEdits: false,
+})
\ No newline at end of file