diff --git a/src/vs/editor/browser/standalone/standaloneLanguages.ts b/src/vs/editor/browser/standalone/standaloneLanguages.ts index 688d49ba25c..9bd1213b925 100644 --- a/src/vs/editor/browser/standalone/standaloneLanguages.ts +++ b/src/vs/editor/browser/standalone/standaloneLanguages.ts @@ -397,7 +397,8 @@ class SuggestAdapter { detail: item.detail, documentation: item.documentation, sortText: item.sortText, - filterText: item.filterText + filterText: item.filterText, + snippetType: 'internal' }; } diff --git a/src/vs/editor/common/modes.ts b/src/vs/editor/common/modes.ts index 14ba3a2df64..a895c46e696 100644 --- a/src/vs/editor/common/modes.ts +++ b/src/vs/editor/common/modes.ts @@ -169,6 +169,8 @@ export type SuggestionType = 'method' | 'reference' | 'customcolor'; +export type SnippetType = 'internal' | 'textmate'; + /** * @internal */ @@ -185,7 +187,7 @@ export interface ISuggestion { overwriteAfter?: number; additionalTextEdits?: editorCommon.ISingleEditOperation[]; command?: Command; - isTMSnippet?: boolean; + snippetType?: SnippetType; _extensionId?: string; } diff --git a/src/vs/editor/common/modes/snippetsRegistry.ts b/src/vs/editor/common/modes/snippetsRegistry.ts index 10809d4f837..f05f11d7012 100644 --- a/src/vs/editor/common/modes/snippetsRegistry.ts +++ b/src/vs/editor/common/modes/snippetsRegistry.ts @@ -107,7 +107,7 @@ class SnippetsRegistry implements ISnippetsRegistry { documentation: s.description, insertText: s.codeSnippet, noAutoAccept: true, - isTMSnippet: true, + snippetType: 'textmate', overwriteBefore }); diff --git a/src/vs/editor/contrib/snippet/common/snippet.ts b/src/vs/editor/contrib/snippet/common/snippet.ts index ee25c003b84..d0fedb2e7ce 100644 --- a/src/vs/editor/contrib/snippet/common/snippet.ts +++ b/src/vs/editor/contrib/snippet/common/snippet.ts @@ -43,6 +43,12 @@ export class CodeSnippet implements ICodeSnippet { return snippet; } + static plain(template: string): CodeSnippet { + const snippet = new CodeSnippet(); + snippet.lines = template.split(/\r\n|\n|\r/); + return snippet; + } + static fromEmmet(template: string): CodeSnippet { return EmmetSnippetParser.parse(template); } diff --git a/src/vs/editor/contrib/suggest/browser/suggestController.ts b/src/vs/editor/contrib/suggest/browser/suggestController.ts index f607f00aadf..7a08d618266 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestController.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestController.ts @@ -76,6 +76,16 @@ export class SuggestController implements IEditorContribution { } } + private static _codeSnippetForSuggestion({suggestion}: ICompletionItem): CodeSnippet { + if (suggestion.snippetType === 'textmate') { + return CodeSnippet.fromTextmate(suggestion.insertText); + } else if (suggestion.snippetType === 'internal') { + return CodeSnippet.fromInternal(suggestion.insertText); + } else { + return CodeSnippet.plain(suggestion.insertText); + } + } + private onDidSelectItem(item: ICompletionItem): void { if (item) { const {suggestion, position} = item; @@ -87,9 +97,7 @@ export class SuggestController implements IEditorContribution { this.editor.pushUndoStop(); } - const snippet = suggestion.isTMSnippet - ? CodeSnippet.fromTextmate(suggestion.insertText) - : CodeSnippet.fromInternal(suggestion.insertText); + const snippet = SuggestController._codeSnippetForSuggestion(item); SnippetController.get(this.editor).run( snippet, diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 2e5f97c1a6a..22afa03af07 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -4334,6 +4334,8 @@ declare module monaco.languages { provideHover(model: editor.IReadOnlyModel, position: Position, token: CancellationToken): Hover | Thenable; } + export type SnippetType = 'internal' | 'textmate'; + /** * Interface used to quick fix typing errors while accesing member fields. */ diff --git a/src/vs/workbench/api/node/extHostLanguageFeatures.ts b/src/vs/workbench/api/node/extHostLanguageFeatures.ts index 944f1564299..4254164050d 100644 --- a/src/vs/workbench/api/node/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/node/extHostLanguageFeatures.ts @@ -479,9 +479,8 @@ class SuggestAdapter { suggestion.overwriteAfter = 0; } - if (this._extensionId) { - suggestion._extensionId = this._extensionId; - } + suggestion._extensionId = this._extensionId; + suggestion.snippetType = 'internal'; // store suggestion result.suggestions.push(suggestion);