提交 349c18db 编写于 作者: J Johannes Rieken

add CompletionItemInsertTextRules on modes.ts so that we can have that in vscode.d.ts, #57093

上级 cceb2691
......@@ -357,6 +357,19 @@ export let completionKindFromLegacyString = (function () {
};
})();
export enum CompletionItemInsertTextRule {
/**
* `insertText` is a snippet.
*/
InsertAsSnippet = 0b01,
/**
* Adjust whitespace/indentation of multiline insert texts to
* match the current line indentation.
*/
AdjustWhitespace = 0b10
}
/**
* A completion item represents a text snippet that is
* proposed to complete text that is being typed.
......@@ -407,9 +420,10 @@ export interface CompletionItem {
*/
insertText: string;
/**
* The insert test is a snippet
* Addition rules (as bitmask) that should be applied when inserting
* this completion.
*/
insertTextIsSnippet?: boolean;
insertTextRules?: CompletionItemInsertTextRule;
/**
* A range of text that should be replaced by this completion item.
*
......@@ -436,8 +450,6 @@ export interface CompletionItem {
* A command that should be run upon acceptance of this item.
*/
command?: Command;
/**@internal*/
noWhitespaceAdjust?: boolean;
/**@internal*/
_labelLow?: string;
......
......@@ -14,7 +14,7 @@ import { EditOperation } from 'vs/editor/common/core/editOperation';
import { Range } from 'vs/editor/common/core/range';
import { IEditorContribution, ScrollType, Handler } from 'vs/editor/common/editorCommon';
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
import { CompletionItem, CompletionItemProvider } from 'vs/editor/common/modes';
import { CompletionItem, CompletionItemProvider, CompletionItemInsertTextRule } from 'vs/editor/common/modes';
import { SnippetController2 } from 'vs/editor/contrib/snippet/snippetController2';
import { SnippetParser } from 'vs/editor/contrib/snippet/snippetParser';
import { SuggestMemories } from 'vs/editor/contrib/suggest/suggestMemory';
......@@ -180,7 +180,7 @@ export class SuggestController implements IEditorContribution {
&& this._model.state === State.Auto
&& !item.suggestion.command
&& !item.suggestion.additionalTextEdits
&& !item.suggestion.insertTextIsSnippet
&& !(item.suggestion.insertTextRules & CompletionItemInsertTextRule.InsertAsSnippet)
&& endColumn - startColumn === item.suggestion.insertText.length
) {
const oldText = this._editor.getModel().getValueInRange({
......@@ -239,7 +239,7 @@ export class SuggestController implements IEditorContribution {
this._memory.getValue().memorize(this._editor.getModel(), this._editor.getPosition(), event.item);
let { insertText } = suggestion;
if (!suggestion.insertTextIsSnippet) {
if (!(suggestion.insertTextRules & CompletionItemInsertTextRule.InsertAsSnippet)) {
insertText = SnippetParser.escape(insertText);
}
......@@ -251,7 +251,7 @@ export class SuggestController implements IEditorContribution {
overwriteBefore + columnDelta,
overwriteAfter,
false, false,
!suggestion.noWhitespaceAdjust
Boolean(suggestion.insertTextRules & CompletionItemInsertTextRule.AdjustWhitespace)
);
if (undoStops) {
......@@ -315,7 +315,7 @@ export class SuggestController implements IEditorContribution {
};
const makesTextEdit = (item: ISuggestionItem): boolean => {
if (item.suggestion.insertTextIsSnippet || item.suggestion.additionalTextEdits) {
if (item.suggestion.insertTextRules & CompletionItemInsertTextRule.InsertAsSnippet || item.suggestion.additionalTextEdits) {
// snippet, other editor -> makes edit
return true;
}
......
......@@ -534,6 +534,7 @@ export function createMonacoLanguagesAPI(): typeof monaco.languages {
// enums
DocumentHighlightKind: modes.DocumentHighlightKind,
CompletionItemKind: modes.CompletionItemKind,
CompletionItemInsertTextRule: modes.CompletionItemInsertTextRule,
SymbolKind: modes.SymbolKind,
IndentAction: IndentAction,
CompletionTriggerKind: modes.CompletionTriggerKind,
......
......@@ -4700,6 +4700,18 @@ declare namespace monaco.languages {
Snippet = 25
}
export enum CompletionItemInsertTextRule {
/**
* `insertText` is a snippet.
*/
InsertAsSnippet = 1,
/**
* Adjust whitespace/indentation of multiline insert texts to
* match the current line indentation.
*/
AdjustWhitespace = 2
}
/**
* A completion item represents a text snippet that is
* proposed to complete text that is being typed.
......@@ -4750,9 +4762,10 @@ declare namespace monaco.languages {
*/
insertText: string;
/**
* The insert test is a snippet
* Addition rules (as bitmask) that should be applied when inserting
* this completion.
*/
insertTextIsSnippet?: boolean;
insertTextRules?: CompletionItemInsertTextRule;
/**
* A range of text that should be replaced by this completion item.
*
......
......@@ -683,19 +683,19 @@ class SuggestAdapter {
// 'insertText'-logic
if (item.textEdit) {
result.insertText = item.textEdit.newText;
result.insertTextIsSnippet = false;
result.insertTextRules = modes.CompletionItemInsertTextRule.AdjustWhitespace;
} else if (typeof item.insertText === 'string') {
result.insertText = item.insertText;
result.insertTextIsSnippet = false;
result.insertTextRules = modes.CompletionItemInsertTextRule.AdjustWhitespace;
} else if (item.insertText instanceof SnippetString) {
result.insertText = item.insertText.value;
result.insertTextIsSnippet = true;
result.insertTextRules = modes.CompletionItemInsertTextRule.AdjustWhitespace | modes.CompletionItemInsertTextRule.InsertAsSnippet;
} else {
result.insertText = item.label;
result.insertTextIsSnippet = false;
result.insertTextRules = modes.CompletionItemInsertTextRule.AdjustWhitespace;
}
// 'overwrite[Before|After]'-logic
......
......@@ -556,7 +556,7 @@ export namespace Suggest {
result.range = Range.to(suggestion.range);
// 'inserText'-logic
if (suggestion.insertTextIsSnippet) {
if (suggestion.insertTextRules & modes.CompletionItemInsertTextRule.InsertAsSnippet) {
result.insertText = new types.SnippetString(suggestion.insertText);
} else {
result.insertText = suggestion.insertText;
......
......@@ -10,7 +10,7 @@ import { compare } from 'vs/base/common/strings';
import { Position } from 'vs/editor/common/core/position';
import { IRange, Range } from 'vs/editor/common/core/range';
import { ITextModel } from 'vs/editor/common/model';
import { CompletionItem, CompletionItemKind, CompletionItemProvider, CompletionList, LanguageId } from 'vs/editor/common/modes';
import { CompletionItem, CompletionItemKind, CompletionItemProvider, CompletionList, LanguageId, CompletionItemInsertTextRule } from 'vs/editor/common/modes';
import { IModeService } from 'vs/editor/common/services/modeService';
import { SnippetParser } from 'vs/editor/contrib/snippet/snippetParser';
import { localize } from 'vs/nls';
......@@ -26,7 +26,7 @@ export class SnippetCompletion implements CompletionItem {
range: IRange;
sortText: string;
kind: CompletionItemKind;
insertTextIsSnippet: true;
insertTextRules: CompletionItemInsertTextRule;
constructor(
readonly snippet: Snippet,
......@@ -38,7 +38,7 @@ export class SnippetCompletion implements CompletionItem {
this.range = range;
this.sortText = `${snippet.snippetSource === SnippetSource.Extension ? 'z' : 'a'}-${snippet.prefix}`;
this.kind = CompletionItemKind.Snippet;
this.insertTextIsSnippet = true;
this.insertTextRules = CompletionItemInsertTextRule.InsertAsSnippet | CompletionItemInsertTextRule.AdjustWhitespace;
}
resolve(): this {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册