diff --git a/src/vs/editor/common/modes/snippetsRegistry.ts b/src/vs/editor/common/modes/snippetsRegistry.ts index f05f11d7012144ce916f922d54c130ee6ee6f044..9aaf64e18ffa2f9f1f1f27dbc6e78c2d2a2df65e 100644 --- a/src/vs/editor/common/modes/snippetsRegistry.ts +++ b/src/vs/editor/common/modes/snippetsRegistry.ts @@ -6,7 +6,7 @@ import { localize } from 'vs/nls'; import * as strings from 'vs/base/common/strings'; -import { IReadOnlyModel, IPosition } from 'vs/editor/common/editorCommon'; +import { ITokenizedModel, IPosition } from 'vs/editor/common/editorCommon'; import { ISuggestion } from 'vs/editor/common/modes'; import { Registry } from 'vs/platform/platform'; @@ -29,7 +29,7 @@ export interface ISnippetsRegistry { /** * Get all snippet completions for the given position */ - getSnippetCompletions(model: IReadOnlyModel, position: IPosition): ISuggestion[]; + getSnippetCompletions(model: ITokenizedModel, position: IPosition): ISuggestion[]; } @@ -69,8 +69,8 @@ class SnippetsRegistry implements ISnippetsRegistry { } } - public getSnippetCompletions(model: IReadOnlyModel, position: IPosition): ISuggestion[] { - const modeId = model.getModeId(); + public getSnippetCompletions(model: ITokenizedModel, position: IPosition): ISuggestion[] { + const modeId = model.getModeIdAtPosition(position.lineNumber, position.column); if (!this._snippets[modeId]) { return; } diff --git a/src/vs/editor/contrib/suggest/common/suggest.ts b/src/vs/editor/contrib/suggest/common/suggest.ts index e428d68bafacd99dd97ae51825e44cfcec1252df..1019068eee4d54fdd4333deb49b9092fcbf6470b 100644 --- a/src/vs/editor/contrib/suggest/common/suggest.ts +++ b/src/vs/editor/contrib/suggest/common/suggest.ts @@ -10,7 +10,7 @@ import { compare } from 'vs/base/common/strings'; import { assign } from 'vs/base/common/objects'; import { onUnexpectedError } from 'vs/base/common/errors'; import { TPromise } from 'vs/base/common/winjs.base'; -import { IReadOnlyModel, IPosition } from 'vs/editor/common/editorCommon'; +import { IModel, IPosition } from 'vs/editor/common/editorCommon'; import { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions'; import { ISuggestResult, ISuggestSupport, ISuggestion, SuggestRegistry } from 'vs/editor/common/modes'; import { ISnippetsRegistry, Extensions } from 'vs/editor/common/modes/snippetsRegistry'; @@ -42,7 +42,7 @@ export const snippetSuggestSupport: ISuggestSupport = { triggerCharacters: [], - provideCompletionItems(model: IReadOnlyModel, position: Position): ISuggestResult { + provideCompletionItems(model: IModel, position: Position): ISuggestResult { const suggestions = Registry.as(Extensions.Snippets).getSnippetCompletions(model, position); if (suggestions) { return { suggestions }; @@ -50,7 +50,7 @@ export const snippetSuggestSupport: ISuggestSupport = { } }; -export function provideSuggestionItems(model: IReadOnlyModel, position: Position, snippetConfig: SnippetConfig = 'bottom', onlyFrom?: ISuggestSupport[]): TPromise { +export function provideSuggestionItems(model: IModel, position: Position, snippetConfig: SnippetConfig = 'bottom', onlyFrom?: ISuggestSupport[]): TPromise { const allSuggestions: ISuggestionItem[] = []; const acceptSuggestion = createSuggesionFilter(snippetConfig); @@ -132,7 +132,7 @@ function fixOverwriteBeforeAfter(suggestion: ISuggestion, container: ISuggestRes } } -function createSuggestionResolver(provider: ISuggestSupport, suggestion: ISuggestion, model: IReadOnlyModel, position: Position): () => TPromise { +function createSuggestionResolver(provider: ISuggestSupport, suggestion: ISuggestion, model: IModel, position: Position): () => TPromise { return () => { if (typeof provider.resolveCompletionItem === 'function') { return asWinJsPromise(token => provider.resolveCompletionItem(model, position, suggestion, token)) diff --git a/src/vs/editor/contrib/suggest/electron-browser/snippetCompletion.ts b/src/vs/editor/contrib/suggest/electron-browser/snippetCompletion.ts index 6f0ccc3b2de48228f10798f55236dbc3de94eff1..247f143457e30273d994ace966e3aca43871e1fb 100644 --- a/src/vs/editor/contrib/suggest/electron-browser/snippetCompletion.ts +++ b/src/vs/editor/contrib/suggest/electron-browser/snippetCompletion.ts @@ -36,8 +36,11 @@ class ShowSnippetsActions extends EditorAction { return; } + const {lineNumber, column} = editor.getPosition(); + const modeId = editor.getModel().getModeIdAtPosition(lineNumber, column); + const picks: ISnippetPick[] = []; - Registry.as(Extensions.Snippets).visitSnippets(editor.getModel().getModeId(), snippet => { + Registry.as(Extensions.Snippets).visitSnippets(modeId, snippet => { picks.push({ label: snippet.prefix, detail: snippet.description,