11import { parseIgnoreSpec , findIndexOfAutoImportSpec } from './adjustAutoImports'
22import { GetConfig } from './types'
33import { getChangesTracker } from './utils'
4+ import { camelCase } from 'change-case'
45
56export 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