add proposed api for CompletionItemInsertTextRule, #57093

This commit is contained in:
Johannes Rieken
2018-10-17 15:09:44 +02:00
parent 349c18db22
commit 078b1415e4
10 changed files with 70 additions and 22 deletions

View File

@@ -731,6 +731,7 @@ export function createApiFactory(
CommentThreadCollapsibleState: extHostTypes.CommentThreadCollapsibleState,
CompletionItem: extHostTypes.CompletionItem,
CompletionItemKind: extHostTypes.CompletionItemKind,
CompletionItemInsertTextRule: extension.enableProposedApi ? extHostTypes.CompletionItemInsertTextRule : null,
CompletionList: extHostTypes.CompletionList,
CompletionTriggerKind: extHostTypes.CompletionTriggerKind,
ConfigurationTarget: extHostTypes.ConfigurationTarget,

View File

@@ -377,7 +377,7 @@ export class ExtHostApiCommands {
};
return this._commands.executeCommand<modes.CompletionList>('_executeCompletionItemProvider', args).then(result => {
if (result) {
const items = result.suggestions.map(suggestion => typeConverters.Suggest.to(suggestion));
const items = result.suggestions.map(suggestion => typeConverters.CompletionItem.to(suggestion));
return new types.CompletionList(items, result.incomplete);
}
return undefined;

View File

@@ -671,6 +671,7 @@ class SuggestAdapter {
//
range: undefined,
insertText: undefined,
insertTextRules: typeConvert.CompletionItemInsertTextRule.from(item.insertTextRules),
additionalTextEdits: item.additionalTextEdits && item.additionalTextEdits.map(typeConvert.TextEdit.from),
command: this._commands.toInternal(item.command),
commitCharacters: item.commitCharacters,
@@ -683,19 +684,16 @@ class SuggestAdapter {
// 'insertText'-logic
if (item.textEdit) {
result.insertText = item.textEdit.newText;
result.insertTextRules = modes.CompletionItemInsertTextRule.AdjustWhitespace;
} else if (typeof item.insertText === 'string') {
result.insertText = item.insertText;
result.insertTextRules = modes.CompletionItemInsertTextRule.AdjustWhitespace;
} else if (item.insertText instanceof SnippetString) {
result.insertText = item.insertText.value;
result.insertTextRules = modes.CompletionItemInsertTextRule.AdjustWhitespace | modes.CompletionItemInsertTextRule.InsertAsSnippet;
result.insertTextRules += modes.CompletionItemInsertTextRule.InsertAsSnippet;
} else {
result.insertText = item.label;
result.insertTextRules = modes.CompletionItemInsertTextRule.AdjustWhitespace;
}
// 'overwrite[Before|After]'-logic

View File

@@ -541,7 +541,26 @@ export const CompletionItemKind = {
}
};
export namespace Suggest {
export namespace CompletionItemInsertTextRule {
export function from(rule: types.CompletionItemInsertTextRule): modes.CompletionItemInsertTextRule {
let result = 0;
if ((rule & types.CompletionItemInsertTextRule.KeepWhitespace)) {
result += modes.CompletionItemInsertTextRule.KeepWhitespace;
}
return result;
}
export function to(rule: modes.CompletionItemInsertTextRule): types.CompletionItemInsertTextRule {
let result = 0;
if ((rule & modes.CompletionItemInsertTextRule.KeepWhitespace)) {
result += types.CompletionItemInsertTextRule.KeepWhitespace;
}
return result;
}
}
export namespace CompletionItem {
export function to(suggestion: modes.CompletionItem): types.CompletionItem {
const result = new types.CompletionItem(suggestion.label);
@@ -554,7 +573,7 @@ export namespace Suggest {
result.preselect = suggestion.preselect;
result.commitCharacters = suggestion.commitCharacters;
result.range = Range.to(suggestion.range);
result.insertTextRules = CompletionItemInsertTextRule.to(suggestion.insertTextRules);
// 'inserText'-logic
if (suggestion.insertTextRules & modes.CompletionItemInsertTextRule.InsertAsSnippet) {
result.insertText = new types.SnippetString(suggestion.insertText);
@@ -562,7 +581,6 @@ export namespace Suggest {
result.insertText = suggestion.insertText;
result.textEdit = new types.TextEdit(result.range, result.insertText);
}
// TODO additionalEdits, command
return result;

View File

@@ -1157,6 +1157,10 @@ export enum CompletionItemKind {
TypeParameter = 24
}
export enum CompletionItemInsertTextRule {
KeepWhitespace = 0b1
}
export class CompletionItem implements vscode.CompletionItem {
label: string;
@@ -1167,6 +1171,7 @@ export class CompletionItem implements vscode.CompletionItem {
filterText: string;
preselect: boolean;
insertText: string | SnippetString;
insertTextRules: CompletionItemInsertTextRule;
range: Range;
commitCharacters: string[];
textEdit: TextEdit;