Skip to content

Commit 7ed2c15

Browse files
committed
fix(insert-name-of-completion): insert while with correct range by default
1 parent cc2dd24 commit 7ed2c15

File tree

4 files changed

+25
-4
lines changed

4 files changed

+25
-4
lines changed

src/specialCommands.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,13 +240,18 @@ export default () => {
240240
await vscode.commands.executeCommand(preview ? 'acceptRenameInputWithPreview' : 'acceptRenameInput')
241241
})
242242

243-
registerExtensionCommand('insertNameOfCompletion', async () => {
243+
registerExtensionCommand('insertNameOfCompletion', async (_, { insertMode } = {}) => {
244244
const editor = vscode.window.activeTextEditor
245245
if (!editor) return
246246
if (!getExtensionSetting('experimental.enableInsertNameOfSuggestionFix')) {
247247
const result = await sendCommand<RequestResponseTypes['getLastResolvedCompletion']>('getLastResolvedCompletion')
248248
if (!result) return
249-
await editor.insertSnippet(new vscode.SnippetString().appendText(result.name))
249+
const position = editor.selection.active
250+
const range = result.range ? tsRangeToVscode(editor.document, result.range) : editor.document.getWordRangeAtPosition(position)
251+
await editor.insertSnippet(
252+
new vscode.SnippetString().appendText(result.name),
253+
(insertMode || vscode.workspace.getConfiguration().get('editor.suggest.insertMode')) === 'replace' ? range : range?.with(undefined, position),
254+
)
250255
return
251256
}
252257

typescript/src/completionEntryDetails.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export default function completionEntryDetails(
1616
{ enableMethodCompletion, completionsSymbolMap }: PrevCompletionsAdditionalData,
1717
): ts.CompletionEntryDetails | undefined {
1818
const [fileName, position, entryName, formatOptions, source, preferences, data] = inputArgs
19-
lastResolvedCompletion.value = { name: entryName }
19+
lastResolvedCompletion.value = { name: entryName, range: prevCompletionsMap[entryName]?.range }
2020
const program = languageService.getProgram()
2121
const sourceFile = program?.getSourceFile(fileName)
2222
if (!program || !sourceFile) return

typescript/src/completionsAtPosition.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export type PrevCompletionMap = Record<
4040
documentationOverride?: string | ts.SymbolDisplayPart[]
4141
detailPrepend?: string
4242
documentationAppend?: string
43+
range?: [number, number]
4344
// textChanges?: ts.TextChange[]
4445
}
4546
>
@@ -48,7 +49,7 @@ export type PrevCompletionsAdditionalData = {
4849
completionsSymbolMap: Map</*entryName*/ string, Array<{ symbol: ts.Symbol; source?: string }>>
4950
}
5051

51-
type GetCompletionAtPositionReturnType = {
52+
export type GetCompletionAtPositionReturnType = {
5253
completions: ts.CompletionInfo
5354
/** Let default getCompletionEntryDetails to know original name or let add documentation from here */
5455
prevCompletionsMap: PrevCompletionMap
@@ -267,6 +268,13 @@ export const getCompletionsAtPosition = (
267268
prior.entries = prior.entries.filter(({ name, kind }) => kind === ts.ScriptElementKind.warning || !name.startsWith('__'))
268269
}
269270
}
271+
if (isVueFile && exactNode && ts.isArrayLiteralExpression(ts.isIdentifier(exactNode) ? exactNode.parent : exactNode)) {
272+
const type = languageService
273+
.getProgram()!
274+
.getTypeChecker()!
275+
.getTypeOfSymbol(prior.entries.find(e => e.name === 'Logo')?.symbol!)
276+
console.log(type)
277+
}
270278
// #endregion
271279

272280
addSourceDefinition(prior.entries)
@@ -382,6 +390,13 @@ export const getCompletionsAtPosition = (
382390
}
383391
}
384392

393+
for (const entry of prior.entries) {
394+
const { replacementSpan } = entry
395+
if (!replacementSpan) continue
396+
prevCompletionsMap[entry.name] ??= {}
397+
prevCompletionsMap[entry.name]!.range = [replacementSpan.start, ts.textSpanEnd(replacementSpan)]
398+
}
399+
385400
// Otherwise may crash Volar
386401
prior.entries = prior.entries.map(entry => ({
387402
...entry,

typescript/src/ipcTypes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export type RequestResponseTypes = {
8080
getExtendedCodeActionEdits: ApplyExtendedCodeActionResult
8181
getLastResolvedCompletion: {
8282
name: string
83+
range?: TsRange
8384
}
8485
}
8586

0 commit comments

Comments
 (0)