diff --git a/README.md b/README.md index 8a2fbe9..00df7af 100644 --- a/README.md +++ b/README.md @@ -75,9 +75,11 @@ Then add this plugin in `tsconfig.json`. ### paths (required) +Value: `string[]` + Specify directory in relative path to the project's root (`tsconfig.json`'s dir). All `.ts` or `.js` files in the directories can be Namespace Imported with auto-completion. -example: +Example: ```json "options": { @@ -87,9 +89,11 @@ example: ### ignoreNamedExport +Value: `boolean` + If true, named export from files in `paths` won't be shown in auto-completion. -example: +Example: ```json "options": { @@ -97,3 +101,20 @@ example: "ignoreNamedExport": true } ``` + +### nameTransform + +Value: `"upperCamelCase" | "lowerCamelCase"` + +Transform import name. If not set, the filename will be used as an import name. + +Example: + +```json +"options": { + "paths": ["src/logics"], + "nameTransform": "lowerCamelCase" +} +``` + +Then `SomeLogic.ts` will be imported like `import * as someLogic from "./SomeLogic"`. diff --git a/package-lock.json b/package-lock.json index 68dba5a..08ccb9a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,11 @@ "integrity": "sha512-4K/gXy6hrYBYqioEaYHdRNrFVEtpXpr4VS3E5HzZO8RNCNSSnuJMYg6RIkIpjoSHJWa9INC7h9GEdP9MzkZQzw==", "dev": true }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + }, "prettier": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", diff --git a/package.json b/package.json index 4ee7e90..09194a9 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ }, "homepage": "https://github.com/Monchi/typescript-plugin-namespace-import#readme", "dependencies": { + "camelcase": "^6.2.0", "typescript": "^4.3.5" }, "devDependencies": { diff --git a/src/index.ts b/src/index.ts index d29a18a..0175af8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -38,7 +38,7 @@ function init() { return getCompletionEntryDetails(fileName, position, name, options, source, preferences, data); } - return namespaceImportPlugin.getCompletionEntryDetails(name, fileName, data.modulePath, info.project); + return namespaceImportPlugin.getCompletionEntryDetails(name, fileName, data.modulePath, info); }; const getCodeFixesAtPosition = info.languageService.getCodeFixesAtPosition; diff --git a/src/lib/import.ts b/src/lib/import.ts index 77bd354..988cfcd 100644 --- a/src/lib/import.ts +++ b/src/lib/import.ts @@ -1,16 +1,18 @@ import ts, { CodeFixAction, ScriptElementKind } from 'typescript/lib/tsserverlibrary'; import * as path from 'path'; +import camelCase from 'camelcase'; export type PluginOptions = { paths: readonly string[]; ignoreNamedExport?: boolean; + nameTransform?: 'upperCamelCase' | 'lowerCamelCase'; }; export function getCompletionEntries(info: ts.server.PluginCreateInfo): ts.CompletionEntry[] { const modulePaths = getModulePathsToImport(info.config.options, info.project); return modulePaths.map((modulePath) => { - const name = getFileNameWithoutExt(modulePath); + const name = transformImportName(getFileNameWithoutExt(modulePath), info.config.options); return { name: name, kind: ts.ScriptElementKind.alias, @@ -46,9 +48,9 @@ export function getCompletionEntryDetails( name: string, selfPath: string, modulePath: string, - project: ts.server.Project, + info: ts.server.PluginCreateInfo, ): ts.CompletionEntryDetails { - const action: CodeFixAction = getCodeFixActionFromPath(name, selfPath, modulePath, project); + const action: CodeFixAction = getCodeFixActionFromPath(name, selfPath, modulePath, info.project); return { name: name, kind: ScriptElementKind.alias, @@ -139,3 +141,11 @@ function getCodeFixActionFromPath( commands: [], }; } + +function transformImportName(name: string, options: PluginOptions) { + if (options.nameTransform) { + return camelCase(name, { pascalCase: options.nameTransform === 'upperCamelCase' }); + } else { + return name; + } +}
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: