Skip to content

Commit af72f55

Browse files
committed
feat: insertNameOfCompletion command that is useful to bind when suggest widget is visible to insert name instead of insertText of TS completion. Useful with "tsEssentialPlugins.objectLiteralCompletions.keepOriginal": "remove"
1 parent a45ad97 commit af72f55

File tree

7 files changed

+31
-19
lines changed

7 files changed

+31
-19
lines changed

.vscode/settings.json

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,8 @@
66
}
77
},
88
"tsEssentialPlugins.suggestions.ignoreAutoImports": [
9-
"typescript-full"
10-
],
11-
"betterSnippets.customSnippets": [
12-
{
13-
"name": "SyntaxKind",
14-
"body": "ts.SyntaxKind",
15-
"when": {}
16-
},
17-
{
18-
"name": "logKind",
19-
"body": "console.log(ts.SyntaxKind[${1:node}!.kind])",
20-
"when": {
21-
"locations": [
22-
"lineStart"
23-
],
24-
}
25-
}
9+
"typescript-full",
10+
"@volar/language-service/*"
2611
],
2712
"githubPullRequests.ignoredPullRequestBranches": [
2813
"develop"

package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@
5050
"command": "goToNodeBySyntaxKindWithinSelection",
5151
"title": "Go to Node by Syntax Kind Within Selection",
5252
"category": "TS Essentials"
53+
},
54+
{
55+
"command": "insertNameOfCompletion",
56+
"title": "Insert Name of Completion",
57+
"category": "TS Essentials"
5358
}
5459
],
5560
"keybindings": [

src/specialCommands.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,4 +237,12 @@ export default () => {
237237
})
238238
await vscode.commands.executeCommand(preview ? 'acceptRenameInputWithPreview' : 'acceptRenameInput')
239239
})
240+
241+
registerExtensionCommand('insertNameOfCompletion', async () => {
242+
const editor = vscode.window.activeTextEditor
243+
if (!editor) return
244+
const result = await sendCommand<RequestResponseTypes['getLastResolvedCompletion']>('getLastResolvedCompletion')
245+
if (!result) return
246+
await editor.insertSnippet(new vscode.SnippetString().appendText(result.name))
247+
})
240248
}

typescript/src/completionEntryDetails.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import { PrevCompletionMap, PrevCompletionsAdditionalData } from './completionsAtPosition'
2+
import { RequestResponseTypes } from './ipcTypes'
23
import namespaceAutoImports from './namespaceAutoImports'
34
import { GetConfig } from './types'
45

6+
export const lastResolvedCompletion = {
7+
value: undefined as undefined | RequestResponseTypes['getLastResolvedCompletion'],
8+
}
9+
510
export default function completionEntryDetails(
611
inputArgs: Parameters<ts.LanguageService['getCompletionEntryDetails']>,
712
languageService: ts.LanguageService,
@@ -10,6 +15,7 @@ export default function completionEntryDetails(
1015
prevCompletionsAdittionalData: PrevCompletionsAdditionalData,
1116
): ts.CompletionEntryDetails | undefined {
1217
const [fileName, position, entryName, formatOptions, source, preferences, data] = inputArgs
18+
lastResolvedCompletion.value = { name: entryName }
1319
const program = languageService.getProgram()
1420
const sourceFile = program?.getSourceFile(fileName)
1521
if (!program || !sourceFile) return

typescript/src/ipcTypes.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ export const triggerCharacterCommands = [
1515
'acceptRenameWithParams',
1616
'getFullMethodSnippet',
1717
'getExtendedCodeActionEdits',
18+
'getLastResolvedCompletion',
1819
] as const
1920

20-
export type TriggerCharacterCommand = (typeof triggerCharacterCommands)[number]
21+
export type TriggerCharacterCommand = typeof triggerCharacterCommands[number]
2122

2223
export type NodeAtPositionResponse = {
2324
kindName: string
@@ -79,6 +80,9 @@ export type RequestResponseTypes = {
7980
getFixAllEdits: ts.TextChange[]
8081
getFullMethodSnippet: string[] | 'ambiguous' | undefined
8182
getExtendedCodeActionEdits: ApplyExtendedCodeActionResult
83+
getLastResolvedCompletion: {
84+
name: string
85+
}
8286
}
8387

8488
// INPUT

typescript/src/specialCommands/handle.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { overrideRequestPreferences } from '../decorateProxy'
55
import { NodeAtPositionResponse, RequestOptionsTypes, RequestResponseTypes, TriggerCharacterCommand, triggerCharacterCommands } from '../ipcTypes'
66
import { GetConfig } from '../types'
77
import { findChildContainingExactPosition, findChildContainingPosition, getNodePath } from '../utils'
8+
import { lastResolvedCompletion } from '../completionEntryDetails'
89
import getEmmetCompletions from './emmet'
910
import objectIntoArrayConverters from './objectIntoArrayConverters'
1011

@@ -260,6 +261,9 @@ export default (
260261
nodesByKind: collectedNodes,
261262
} satisfies RequestResponseTypes['filterBySyntaxKind']
262263
}
264+
if (specialCommand === 'getLastResolvedCompletion') {
265+
return lastResolvedCompletion.value
266+
}
263267

264268
return null
265269
}

vscode-framework.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const pipeline = promisify(stream.pipeline)
1515
/** @type {(keyof Config)[]} */
1616
const languageOveridableSettings = [
1717
'removeUselessFunctionProps.enable',
18-
'removeOrMarkGlobalLibCompletions.action',
18+
'globalLibCompletions.action',
1919
'disableUselessHighlighting',
2020
'suggestions.keywordsInsertText',
2121
'caseSensitiveCompletions',

0 commit comments

Comments
 (0)