|
4 | 4 | *--------------------------------------------------------------------------------------------*/ |
5 | 5 |
|
6 | 6 | import { URI, UriComponents } from 'vs/base/common/uri'; |
7 | | -import { mixin } from 'vs/base/common/objects'; |
| 7 | +import { equals, mixin } from 'vs/base/common/objects'; |
8 | 8 | import type * as vscode from 'vscode'; |
9 | 9 | import * as typeConvert from 'vs/workbench/api/common/extHostTypeConverters'; |
10 | 10 | import { Range, Disposable, CompletionList, SnippetString, CodeActionKind, SymbolInformation, DocumentSymbol, SemanticTokensEdits, SemanticTokens, SemanticTokensEdit, Location, InlineCompletionTriggerKind, InternalDataTransferItem, CodeActionTriggerKind } from 'vs/workbench/api/common/extHostTypes'; |
@@ -1033,25 +1033,39 @@ class CompletionsAdapter { |
1033 | 1033 | return undefined; |
1034 | 1034 | } |
1035 | 1035 |
|
| 1036 | + const dto1 = this._convertCompletionItem(item, id); |
| 1037 | + |
1036 | 1038 | const resolvedItem = await this._provider.resolveCompletionItem!(item, token); |
1037 | 1039 |
|
1038 | 1040 | if (!resolvedItem) { |
1039 | 1041 | return undefined; |
1040 | 1042 | } |
1041 | 1043 |
|
1042 | | - const enforcedResolvedItem = { |
1043 | | - ...item, |
1044 | | - documentation: resolvedItem.documentation, |
1045 | | - detail: resolvedItem.detail, |
1046 | | - additionalTextEdits: resolvedItem.additionalTextEdits |
1047 | | - }; |
1048 | | - |
1049 | 1044 | if (CompletionsAdapter._insertTextIdent(item.insertText) !== CompletionsAdapter._insertTextIdent(resolvedItem.insertText)) { |
1050 | 1045 | this._apiDeprecation.report('CompletionItem.insertText', this._extension, 'extension MAY NOT change \'insertText\' of a CompletionItem during resolve'); |
1051 | | - enforcedResolvedItem.insertText = resolvedItem.insertText; |
1052 | 1046 | } |
1053 | 1047 |
|
1054 | | - return this._convertCompletionItem(enforcedResolvedItem, id); |
| 1048 | + if (!equals(item.command, resolvedItem.command)) { |
| 1049 | + this._apiDeprecation.report('CompletionItem.command', this._extension, 'extension MAY NOT change \'command\' of a CompletionItem during resolve'); |
| 1050 | + } |
| 1051 | + |
| 1052 | + const dto2 = this._convertCompletionItem(resolvedItem, id); |
| 1053 | + |
| 1054 | + return { |
| 1055 | + ...dto1, |
| 1056 | + [extHostProtocol.ISuggestDataDtoField.documentation]: dto2[extHostProtocol.ISuggestDataDtoField.documentation], |
| 1057 | + [extHostProtocol.ISuggestDataDtoField.detail]: dto2[extHostProtocol.ISuggestDataDtoField.detail], |
| 1058 | + [extHostProtocol.ISuggestDataDtoField.additionalTextEdits]: dto2[extHostProtocol.ISuggestDataDtoField.additionalTextEdits], |
| 1059 | + |
| 1060 | + // (fishy) async insertText |
| 1061 | + [extHostProtocol.ISuggestDataDtoField.insertText]: dto2[extHostProtocol.ISuggestDataDtoField.insertText], |
| 1062 | + [extHostProtocol.ISuggestDataDtoField.insertTextRules]: dto2[extHostProtocol.ISuggestDataDtoField.insertTextRules], |
| 1063 | + |
| 1064 | + // (fishy) async command |
| 1065 | + [extHostProtocol.ISuggestDataDtoField.commandIdent]: dto2[extHostProtocol.ISuggestDataDtoField.commandIdent], |
| 1066 | + [extHostProtocol.ISuggestDataDtoField.commandId]: dto2[extHostProtocol.ISuggestDataDtoField.commandId], |
| 1067 | + [extHostProtocol.ISuggestDataDtoField.commandArguments]: dto2[extHostProtocol.ISuggestDataDtoField.commandArguments], |
| 1068 | + }; |
1055 | 1069 | } |
1056 | 1070 |
|
1057 | 1071 | private static _insertTextIdent(insertText: string | vscode.SnippetString | undefined) { |
|
0 commit comments