diff --git a/package.json b/package.json index 36629f30..d034f3d4 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "javascript", "plugin", "webstorm", - "TypeScript Hero" + "typescript hero" ], "activationEvents": [ "onLanguage:javascript", diff --git a/typescript/src/completionsAtPosition.ts b/typescript/src/completionsAtPosition.ts index 8fe18575..2461b303 100644 --- a/typescript/src/completionsAtPosition.ts +++ b/typescript/src/completionsAtPosition.ts @@ -228,7 +228,7 @@ export const getCompletionsAtPosition = ( // prevent vscode-builtin wrong insertText with methods snippets enabled if (!isGoodPositionBuiltinMethodCompletion(ts, sourceFile, position)) { - prior.entries = prior.entries.map(item => ({ ...item, insertText: item.insertText ?? item.name, isSnippet: true })) + prior.entries = prior.entries.map(item => ({ ...item, insertText: (item.insertText ?? item.name).replace(/\$/g, '\\$'), isSnippet: true })) } if (c('correctSorting.enable')) prior.entries = prior.entries.map((entry, index) => ({ ...entry, sortText: `${entry.sortText ?? ''}${index}` })) diff --git a/typescript/src/dummyLanguageService.ts b/typescript/src/dummyLanguageService.ts index 2c2f3311..60adf3bf 100644 --- a/typescript/src/dummyLanguageService.ts +++ b/typescript/src/dummyLanguageService.ts @@ -15,6 +15,12 @@ export const createLanguageService = (files: Record) => { }, getCurrentDirectory: () => '', getDefaultLibFileName: () => require.resolve('typescript/lib/lib.esnext.full.d.ts'), + fileExists(path) { + return path in files + }, + readFile(path) { + return files[path]! + }, }) return { languageService, diff --git a/typescript/src/isGoodPositionMethodCompletion.ts b/typescript/src/isGoodPositionMethodCompletion.ts index 4991a6c6..620590ec 100644 --- a/typescript/src/isGoodPositionMethodCompletion.ts +++ b/typescript/src/isGoodPositionMethodCompletion.ts @@ -2,13 +2,17 @@ import type tslib from 'typescript/lib/tsserverlibrary' import { findChildContainingPosition, findChildContainingPositionMaxDepth } from './utils' export const isGoodPositionBuiltinMethodCompletion = (ts: typeof tslib, sourceFile: tslib.SourceFile, position: number) => { - const importClauseCandidate = findChildContainingPositionMaxDepth(ts, sourceFile, position, 2) - console.log(sourceFile.getFullText().slice(0, position)) - if (importClauseCandidate?.kind === 266) return false - const currentNode = findChildContainingPosition(ts, sourceFile, position) - // const obj = { method() {}, arrow: () => {} } - // type A = typeof obj["|"] - if (currentNode && ts.isStringLiteralLike(currentNode)) return false + const importClauseCandidate = findChildContainingPositionMaxDepth(ts, sourceFile, position, 3) + if (importClauseCandidate && ts.isImportClause(importClauseCandidate)) return false + let currentNode = findChildContainingPosition(ts, sourceFile, position) + if (currentNode) { + // const obj = { method() {}, arrow: () => {} } + // type A = typeof obj["|"] + if (ts.isStringLiteralLike(currentNode)) return false + if (ts.isIdentifier(currentNode)) currentNode = currentNode.parent + if (ts.isShorthandPropertyAssignment(currentNode)) currentNode = currentNode.parent + if (ts.isObjectBindingPattern(currentNode) || ts.isObjectLiteralExpression(currentNode)) return false + } return true }