Skip to content

Commit 37e80f9

Browse files
committed
namespace auto import fixes
1 parent 774572b commit 37e80f9

File tree

4 files changed

+26
-16
lines changed

4 files changed

+26
-16
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@
142142
"@zardoy/utils": "^0.0.9",
143143
"@zardoy/vscode-utils": "^0.0.47",
144144
"chai": "^4.3.6",
145+
"change-case": "^4.1.2",
145146
"chokidar": "^3.5.3",
146147
"chokidar-cli": "^3.0.0",
147148
"delay": "^5.0.0",

pnpm-lock.yaml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

typescript/src/codeFixes.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,8 @@ export default (proxy: ts.LanguageService, languageService: ts.LanguageService,
222222
formatOptions,
223223
diagnostic.start!,
224224
firstFix.symbolName,
225+
undefined,
226+
true,
225227
)
226228
if (namespaceImportAction) {
227229
fixes = []

typescript/src/namespaceAutoImports.ts

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { parseIgnoreSpec, findIndexOfAutoImportSpec } from './adjustAutoImports'
22
import { GetConfig } from './types'
33
import { getChangesTracker } from './utils'
4+
import { camelCase } from 'change-case'
45

56
export default (
67
c: GetConfig,
@@ -11,6 +12,7 @@ export default (
1112
position: number,
1213
symbolName: string,
1314
entryDetailsPrior?: ts.CompletionEntryDetails,
15+
skipCreatingImport = false,
1416
) => {
1517
const changeToNamespaceImport = Object.entries(c('autoImport.changeToNamespaceImport')).map(([key, value]) => {
1618
return [parseIgnoreSpec(key), value] as const
@@ -36,7 +38,7 @@ export default (
3638
}
3739

3840
const { module } = changeToNamespaceImport[indexOfAutoImportSpec]![0]
39-
const { namespace = module, addImport = true, useDefaultImport } = changeToNamespaceImport[indexOfAutoImportSpec]![1]
41+
const { namespace = camelCase(module), addImport = true, useDefaultImport } = changeToNamespaceImport[indexOfAutoImportSpec]![1]
4042
const textChanges = [
4143
{
4244
newText: `${namespace}.`,
@@ -47,19 +49,22 @@ export default (
4749
},
4850
] as ts.TextChange[]
4951
if (!addImport) return { textChanges, description: `Change to '${namespace}.${symbolName}'` }
50-
const { factory } = ts
51-
const namespaceIdentifier = factory.createIdentifier(namespace)
52-
const importDeclaration = factory.createImportDeclaration(
53-
/*modifiers*/ undefined,
54-
useDefaultImport
55-
? factory.createImportClause(false, namespaceIdentifier, undefined)
56-
: factory.createImportClause(false, undefined, factory.createNamespaceImport(namespaceIdentifier)),
57-
factory.createStringLiteral(importPath, preferences.quotePreference === 'single'),
58-
)
59-
const changeTracker = getChangesTracker(formatOptions)
60-
// todo respect sorting?
61-
changeTracker.insertNodeAtTopOfFile(sourceFile as any, importDeclaration as any, true)
62-
const changes = changeTracker.getChanges()
63-
const { textChanges: importTextChanges } = changes[0]!
64-
return { textChanges: [...importTextChanges, ...textChanges], description: `+ ${importTextChanges[0]!.newText}`, namespace, useDefaultImport }
52+
if (!skipCreatingImport) {
53+
const { factory } = ts
54+
const namespaceIdentifier = factory.createIdentifier(namespace)
55+
const importDeclaration = factory.createImportDeclaration(
56+
/*modifiers*/ undefined,
57+
useDefaultImport
58+
? factory.createImportClause(false, namespaceIdentifier, undefined)
59+
: factory.createImportClause(false, undefined, factory.createNamespaceImport(namespaceIdentifier)),
60+
factory.createStringLiteral(importPath, preferences.quotePreference === 'single'),
61+
)
62+
const changeTracker = getChangesTracker(formatOptions)
63+
// todo respect sorting?
64+
changeTracker.insertNodeAtTopOfFile(sourceFile as any, importDeclaration as any, true)
65+
const changes = changeTracker.getChanges()
66+
const { textChanges: importTextChanges } = changes[0]!
67+
textChanges.unshift(...importTextChanges)
68+
}
69+
return { textChanges, description: `Add namespace import from '${importPath}'`, namespace, useDefaultImport }
6570
}

0 commit comments

Comments
 (0)