|
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