Skip to content

Commit d35d719

Browse files
committed
don't insert before non-header
1 parent 45d9eb5 commit d35d719

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed

src/services/textChanges.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ namespace ts.textChanges {
384384
}
385385
}
386386

387-
public insertNodeBefore(sourceFile: SourceFile, before: Node, newNode: Node, blankLineBetween = false, options = {}): void {
387+
public insertNodeBefore(sourceFile: SourceFile, before: Node, newNode: Node, blankLineBetween = false, options: ConfigurableStartEnd = {}): void {
388388
this.insertNodeAt(sourceFile, getAdjustedStartPosition(sourceFile, before, options), newNode, this.getOptionsForInsertNodeBefore(before, newNode, blankLineBetween));
389389
}
390390

src/services/utilities.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1913,9 +1913,10 @@ namespace ts {
19131913
for (const newImport of sortedNewImports) {
19141914
const insertionIndex = OrganizeImports.getImportDeclarationInsertionIndex(existingImportStatements, newImport);
19151915
if (insertionIndex === 0) {
1916-
changes.insertNodeBefore(sourceFile, existingImportStatements[0], newImport, /*blankLineBetween*/ false, {
1917-
leadingTriviaOption: textChanges.LeadingTriviaOption.Exclude,
1918-
});
1916+
// If the first import is top-of-file, insert after the leading comment which is likely the header.
1917+
const options = existingImportStatements[0] === sourceFile.statements[0] ?
1918+
{ leadingTriviaOption: textChanges.LeadingTriviaOption.Exclude } : {};
1919+
changes.insertNodeBefore(sourceFile, existingImportStatements[0], newImport, /*blankLineBetween*/ false, options);
19191920
}
19201921
else {
19211922
const prevImport = existingImportStatements[insertionIndex - 1];
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
// @Filename: /a.ts
4+
////export const foo = 0;
5+
6+
// @Filename: /b.ts
7+
////export const bar = 0;
8+
9+
// @Filename: /c.ts
10+
/////*--------------------
11+
//// * Copyright Header
12+
//// *--------------------*/
13+
////
14+
////const afterHeader = 1;
15+
////
16+
////// non-header comment
17+
////import { bar } from "./b";
18+
////foo;
19+
20+
goTo.file("/c.ts");
21+
verify.importFixAtPosition([
22+
`/*--------------------
23+
* Copyright Header
24+
*--------------------*/
25+
26+
const afterHeader = 1;
27+
28+
import { foo } from "./a";
29+
// non-header comment
30+
import { bar } from "./b";
31+
foo;`,
32+
]);

0 commit comments

Comments
 (0)