|
1 | 1 | import * as vscode from 'vscode'
|
2 | 2 | import { getActiveRegularEditor } from '@zardoy/vscode-utils'
|
3 |
| -import { getExtensionCommandId, registerExtensionCommand, VSCodeQuickPickItem } from 'vscode-framework' |
| 3 | +import { getExtensionCommandId, getExtensionSetting, registerExtensionCommand, VSCodeQuickPickItem } from 'vscode-framework' |
4 | 4 | import { showQuickPick } from '@zardoy/vscode-utils/build/quickPick'
|
5 | 5 | import _ from 'lodash'
|
6 | 6 | import { compact } from '@zardoy/utils'
|
| 7 | +import { offsetPosition } from '@zardoy/vscode-utils/build/position' |
7 | 8 | import { RequestOptionsTypes, RequestResponseTypes } from '../typescript/src/ipcTypes'
|
8 | 9 | import { sendCommand } from './sendCommand'
|
9 | 10 | import { tsRangeToVscode, tsRangeToVscodeSelection } from './util'
|
| 11 | +import { onCompletionAcceptedOverride } from './onCompletionAccepted' |
10 | 12 |
|
11 | 13 | export default () => {
|
12 | 14 | registerExtensionCommand('removeFunctionArgumentsTypesInSelection', async () => {
|
@@ -241,8 +243,37 @@ export default () => {
|
241 | 243 | registerExtensionCommand('insertNameOfCompletion', async () => {
|
242 | 244 | const editor = vscode.window.activeTextEditor
|
243 | 245 | 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)) |
| 246 | + if (!getExtensionSetting('experimental.enableInsertNameOfSuggestionFix')) { |
| 247 | + const result = await sendCommand<RequestResponseTypes['getLastResolvedCompletion']>('getLastResolvedCompletion') |
| 248 | + if (!result) return |
| 249 | + await editor.insertSnippet(new vscode.SnippetString().appendText(result.name)) |
| 250 | + return |
| 251 | + } |
| 252 | + |
| 253 | + onCompletionAcceptedOverride.value = () => {} |
| 254 | + const { ranges, text } = await new Promise<{ text: string; ranges: vscode.Range[] }>(resolve => { |
| 255 | + vscode.workspace.onDidChangeTextDocument(({ document, contentChanges }) => { |
| 256 | + if (document !== editor.document || contentChanges.length === 0) return |
| 257 | + const ranges = contentChanges.map( |
| 258 | + change => new vscode.Range(change.range.start, offsetPosition(document, change.range.start, change.text.length)), |
| 259 | + ) |
| 260 | + resolve({ ranges, text: contentChanges[0]!.text }) |
| 261 | + }) |
| 262 | + void vscode.commands.executeCommand('acceptSelectedSuggestion') |
| 263 | + }) |
| 264 | + const needle = ['(', ': '].find(needle => text.includes(needle)) |
| 265 | + if (!needle) return |
| 266 | + const cleanedText = text.slice(0, text.indexOf(needle)) |
| 267 | + await editor.edit( |
| 268 | + e => { |
| 269 | + for (const range of ranges) { |
| 270 | + e.replace(range, cleanedText) |
| 271 | + } |
| 272 | + }, |
| 273 | + { |
| 274 | + undoStopBefore: false, |
| 275 | + undoStopAfter: false, |
| 276 | + }, |
| 277 | + ) |
247 | 278 | })
|
248 | 279 | }
|
0 commit comments