diff --git a/src/vs/editor/common/core/position.ts b/src/vs/editor/common/core/position.ts index 52d21eb7dee6074113df312da5172273f31d5976..7f5635725db233ca00271354181ce223ddb6bfa7 100644 --- a/src/vs/editor/common/core/position.ts +++ b/src/vs/editor/common/core/position.ts @@ -36,6 +36,30 @@ export class Position { this.column = column; } + /** + * Create a new postion from this position. + * + * @param newLineNumber new line number + * @param newColumn new column + */ + with(newLineNumber: number = this.lineNumber, newColumn: number = this.column): Position { + if (newLineNumber === this.lineNumber && newColumn === this.column) { + return this; + } else { + return new Position(newLineNumber, newColumn); + } + } + + /** + * Derive a new position from this position. + * + * @param deltaLineNumber line number delta + * @param deltaColumn column delta + */ + delta(deltaLineNumber: number = 0, deltaColumn: number = 0): Position { + return this.with(this.lineNumber + deltaLineNumber, this.column + deltaColumn); + } + /** * Test if this position equals other position */ diff --git a/src/vs/editor/common/modes.ts b/src/vs/editor/common/modes.ts index c3189538b19c95fa5ea9a197d07795df9cd5eb2a..7623d8614135f0b2f14cedc66e4d4c53081a9990 100644 --- a/src/vs/editor/common/modes.ts +++ b/src/vs/editor/common/modes.ts @@ -366,21 +366,20 @@ export let completionKindFromLegacyString = (function () { */ export interface CompletionItem { label: string; - insertText: string; - insertTextIsSnippet?: boolean; kind: CompletionKind; detail?: string; documentation?: string | IMarkdownString; - filterText?: string; sortText?: string; + filterText?: string; preselect?: boolean; + insertText: string; + insertTextIsSnippet?: boolean; + noWhitespaceAdjust?: boolean; + range?: IRange; noAutoAccept?: boolean; commitCharacters?: string[]; - overwriteBefore?: number; - overwriteAfter?: number; additionalTextEdits?: model.ISingleEditOperation[]; command?: Command; - noWhitespaceAdjust?: boolean; } /** diff --git a/src/vs/editor/common/services/editorSimpleWorker.ts b/src/vs/editor/common/services/editorSimpleWorker.ts index 369d2d69cabbc159a33ee86443f74be22f8ff9f0..2bcfc6f46f1dc72a9c1afa719e04fd6b5489c6d3 100644 --- a/src/vs/editor/common/services/editorSimpleWorker.ts +++ b/src/vs/editor/common/services/editorSimpleWorker.ts @@ -462,10 +462,10 @@ export abstract class BaseEditorSimpleWorker { if (model) { const suggestions: CompletionItem[] = []; const wordDefRegExp = new RegExp(wordDef, wordDefFlags); - const currentWord = model.getWordUntilPosition(position, wordDefRegExp).word; + const currentWord = model.getWordUntilPosition(position, wordDefRegExp); const seen: Record = Object.create(null); - seen[currentWord] = true; + seen[currentWord.word] = true; for ( let iter = model.createWordIterator(wordDefRegExp), e = iter.next(); @@ -486,7 +486,7 @@ export abstract class BaseEditorSimpleWorker { label: word, insertText: word, noAutoAccept: true, - overwriteBefore: currentWord.length + range: { startLineNumber: position.lineNumber, startColumn: currentWord.startColumn, endLineNumber: position.lineNumber, endColumn: currentWord.endColumn } }); } diff --git a/src/vs/editor/contrib/suggest/completionModel.ts b/src/vs/editor/contrib/suggest/completionModel.ts index c2ee1ecfe6131b9da818e20ed567743ffce38f21..f70015690bd0150656be2a0e6ca61a1825a5148d 100644 --- a/src/vs/editor/contrib/suggest/completionModel.ts +++ b/src/vs/editor/contrib/suggest/completionModel.ts @@ -175,7 +175,8 @@ export class CompletionModel { // 'word' is that remainder of the current line that we // filter and score against. In theory each suggestion uses a // different word, but in practice not - that's why we cache - const wordLen = suggestion.overwriteBefore + characterCountDelta - (item.position.column - this._column); + const overwriteBefore = item.position.column - suggestion.range.startColumn; + const wordLen = overwriteBefore + characterCountDelta - (item.position.column - this._column); if (word.length !== wordLen) { word = wordLen === 0 ? '' : leadingLineContent.slice(-wordLen); } @@ -198,7 +199,7 @@ export class CompletionModel { // if it matches we check with the label to compute highlights // and if that doesn't yield a result we have no highlights, // despite having the match - let match = scoreFn(word, suggestion.filterText, suggestion.overwriteBefore); + let match = scoreFn(word, suggestion.filterText, overwriteBefore); if (!match) { continue; } @@ -207,7 +208,7 @@ export class CompletionModel { } else { // by default match `word` against the `label` - let match = scoreFn(word, suggestion.label, suggestion.overwriteBefore); + let match = scoreFn(word, suggestion.label, overwriteBefore); if (match) { item.score = match[0]; item.matches = match[1]; diff --git a/src/vs/editor/contrib/suggest/suggest.ts b/src/vs/editor/contrib/suggest/suggest.ts index 55b9346e88cb0f6ff0efcffc2f4fa7fa2f41a1ed..895eace28587b0027ce7f724644313ce8fdc9cc7 100644 --- a/src/vs/editor/contrib/suggest/suggest.ts +++ b/src/vs/editor/contrib/suggest/suggest.ts @@ -16,6 +16,7 @@ import { Position, IPosition } from 'vs/editor/common/core/position'; import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { CancellationToken } from 'vs/base/common/cancellation'; +import { Range } from 'vs/editor/common/core/range'; export const Context = { Visible: new RawContextKey('suggestWidgetVisible', false), @@ -59,6 +60,9 @@ export function provideSuggestionItems( const allSuggestions: ISuggestionItem[] = []; const acceptSuggestion = createSuggesionFilter(snippetConfig); + const wordUntil = model.getWordUntilPosition(position); + const defaultRange = new Range(position.lineNumber, wordUntil.startColumn, position.lineNumber, wordUntil.endColumn); + position = position.clone(); // get provider groups, always add snippet suggestion provider @@ -90,7 +94,9 @@ export function provideSuggestionItems( for (let suggestion of container.suggestions) { if (acceptSuggestion(suggestion)) { - fixOverwriteBeforeAfter(suggestion, container); + if (!suggestion.range) { + suggestion.range = defaultRange; + } allSuggestions.push({ position, @@ -131,15 +137,6 @@ export function provideSuggestionItems( return result; } -function fixOverwriteBeforeAfter(suggestion: CompletionItem, container: CompletionList): void { - if (typeof suggestion.overwriteBefore !== 'number') { - suggestion.overwriteBefore = 0; - } - if (typeof suggestion.overwriteAfter !== 'number' || suggestion.overwriteAfter < 0) { - suggestion.overwriteAfter = 0; - } -} - function createSuggestionResolver(provider: CompletionItemProvider, suggestion: CompletionItem, model: ITextModel, position: Position): (token: CancellationToken) => Promise { return (token) => { if (typeof provider.resolveCompletionItem === 'function') { diff --git a/src/vs/editor/contrib/suggest/suggestController.ts b/src/vs/editor/contrib/suggest/suggestController.ts index d32e8f499591429ad84911d0777c4a9c9f902069..70bff9237e46f167069380445d1c4f922edfc098 100644 --- a/src/vs/editor/contrib/suggest/suggestController.ts +++ b/src/vs/editor/contrib/suggest/suggestController.ts @@ -165,7 +165,7 @@ export class SuggestController implements IEditorContribution { this._toDispose.push(this._widget.onDidFocus(({ item }) => { const position = this._editor.getPosition(); - const startColumn = item.position.column - item.suggestion.overwriteBefore; + const startColumn = item.suggestion.range.startColumn; const endColumn = position.column; let value = true; if ( @@ -236,10 +236,13 @@ export class SuggestController implements IEditorContribution { insertText = SnippetParser.escape(insertText); } + const overwriteBefore = position.column - suggestion.range.startColumn; + const overwriteAfter = suggestion.range.endColumn - position.column; + SnippetController2.get(this._editor).insert( insertText, - suggestion.overwriteBefore + columnDelta, - suggestion.overwriteAfter, + overwriteBefore + columnDelta, + overwriteAfter, false, false, !suggestion.noWhitespaceAdjust ); @@ -310,7 +313,7 @@ export class SuggestController implements IEditorContribution { return true; } const position = this._editor.getPosition(); - const startColumn = item.position.column - item.suggestion.overwriteBefore; + const startColumn = item.suggestion.range.startColumn; const endColumn = position.column; if (endColumn - startColumn !== item.suggestion.insertText.length) { // unequal lengths -> makes edit diff --git a/src/vs/editor/contrib/suggest/test/completionModel.test.ts b/src/vs/editor/contrib/suggest/test/completionModel.test.ts index 01b9fddf7060ea2ad9fee9c7cab684a35edd7e56..ad958fffdb97b3a8067fdd9709ae9ca3456f34df 100644 --- a/src/vs/editor/contrib/suggest/test/completionModel.test.ts +++ b/src/vs/editor/contrib/suggest/test/completionModel.test.ts @@ -19,7 +19,7 @@ export function createSuggestItem(label: string, overwriteBefore: number, kind = suggestion: CompletionItem = { label, - overwriteBefore, + range: { startLineNumber: position.lineNumber, startColumn: position.column - overwriteBefore, endLineNumber: position.lineNumber, endColumn: position.column }, insertText: label, kind }; diff --git a/src/vs/editor/contrib/suggest/test/suggestModel.test.ts b/src/vs/editor/contrib/suggest/test/suggestModel.test.ts index b8db0150d1851b7ad73bb60c0dcd0ac1b44a98ac..a88232891a480607360d8e0a336f996c1608afd8 100644 --- a/src/vs/editor/contrib/suggest/test/suggestModel.test.ts +++ b/src/vs/editor/contrib/suggest/test/suggestModel.test.ts @@ -356,7 +356,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { label: 'foo.bar', kind: CompletionKind.Property, insertText: 'foo.bar', - overwriteBefore: pos.column - 1 + range: Range.fromPositions(pos.with(undefined, 1), pos) }] }; } @@ -371,7 +371,10 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { label: 'boom', kind: CompletionKind.Property, insertText: 'boom', - overwriteBefore: doc.getLineContent(pos.lineNumber)[pos.column - 2] === '.' ? 0 : pos.column - 1 + range: Range.fromPositions( + pos.delta(0, doc.getLineContent(pos.lineNumber)[pos.column - 2] === '.' ? 0 : -1), + pos + ) }] }; } @@ -465,7 +468,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { label: 'foo', kind: CompletionKind.Property, insertText: 'foo', - overwriteBefore: pos.column - 1 + range: Range.fromPositions(pos.with(undefined, 1), pos) }] }; } @@ -502,7 +505,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { label: 'foo;', kind: CompletionKind.Property, insertText: 'foo', - overwriteBefore: pos.column - 1 + range: Range.fromPositions(pos.with(undefined, 1), pos) }] }; } @@ -549,7 +552,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { label: 'foo.bar', kind: CompletionKind.Property, insertText: 'foo.bar', - overwriteBefore: pos.column - 1 + range: Range.fromPositions(pos.with(undefined, 1), pos) } ] }; @@ -578,12 +581,12 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { label: 'abc', kind: CompletionKind.Property, insertText: 'abc', - overwriteBefore: pos.column - 1 + range: Range.fromPositions(pos.with(undefined, 1), pos) }, { label: 'äbc', kind: CompletionKind.Property, insertText: 'äbc', - overwriteBefore: pos.column - 1 + range: Range.fromPositions(pos.with(undefined, 1), pos) }] }; } @@ -650,7 +653,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { label: 'bar', kind: CompletionKind.Property, insertText: 'bar', - overwriteBefore: 2, + range: Range.fromPositions(pos.delta(0, -2), pos), additionalTextEdits: [{ text: ', bar', range: { startLineNumber: 1, endLineNumber: 1, startColumn: 17, endColumn: 17 } diff --git a/src/vs/editor/standalone/browser/standaloneLanguages.ts b/src/vs/editor/standalone/browser/standaloneLanguages.ts index 890b30fb568fe813f8111ec95945b6f1cd0843b6..54d027547a4e8a813f7f5ee2b49c25a40dea41a8 100644 --- a/src/vs/editor/standalone/browser/standaloneLanguages.ts +++ b/src/vs/editor/standalone/browser/standaloneLanguages.ts @@ -759,11 +759,9 @@ class SuggestAdapter { // insert the text of the edit and create a dedicated // suggestion-container with overwrite[Before|After] - suggestion.overwriteBefore = position.column - editRange.startColumn; - suggestion.overwriteAfter = editRange.endColumn - position.column; + suggestion.range = editRange; } else { - suggestion.overwriteBefore = position.column - wordStartPos.column; - suggestion.overwriteAfter = 0; + suggestion.range = { startLineNumber: position.lineNumber, startColumn: wordStartPos.column, endLineNumber: position.lineNumber, endColumn: position.column }; } if (item.textEdit) { suggestion.insertText = item.textEdit.text; diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 4b1f9dc4a50ac802260b51ccda4f4138e73153c5..461484f266671153ad7b75378bf880c91654ce8a 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -468,6 +468,20 @@ declare namespace monaco { */ readonly column: number; constructor(lineNumber: number, column: number); + /** + * Create a new postion from this position. + * + * @param newLineNumber new line number + * @param newColumn new column + */ + with(newLineNumber?: number, newColumn?: number): Position; + /** + * Derive a new position from this position. + * + * @param deltaLineNumber line number delta + * @param deltaColumn column delta + */ + delta(deltaLineNumber?: number, deltaColumn?: number): Position; /** * Test if this position equals other position */ diff --git a/src/vs/workbench/api/node/extHostApiCommands.ts b/src/vs/workbench/api/node/extHostApiCommands.ts index 6e5ad6e164d74a4d1fee58e2a34ee414f5671adb..4b01f79c9a27c67f4a3744bda521e5c23064f854 100644 --- a/src/vs/workbench/api/node/extHostApiCommands.ts +++ b/src/vs/workbench/api/node/extHostApiCommands.ts @@ -378,7 +378,7 @@ export class ExtHostApiCommands { }; return this._commands.executeCommand('_executeCompletionItemProvider', args).then(result => { if (result) { - const items = result.suggestions.map(suggestion => typeConverters.Suggest.to(position, suggestion)); + const items = result.suggestions.map(suggestion => typeConverters.Suggest.to(suggestion)); return new types.CompletionList(items, result.incomplete); } return undefined; diff --git a/src/vs/workbench/api/node/extHostLanguageFeatures.ts b/src/vs/workbench/api/node/extHostLanguageFeatures.ts index dcbf83bed4c9d3fba388d15467c68dbba8585c5c..9ea2c1ff0790963179936a428c3a6748c1c9f1ce 100644 --- a/src/vs/workbench/api/node/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/node/extHostLanguageFeatures.ts @@ -671,6 +671,7 @@ class SuggestAdapter { sortText: item.sortText, preselect: item.preselect, // + range: undefined, insertText: undefined, additionalTextEdits: item.additionalTextEdits && item.additionalTextEdits.map(typeConvert.TextEdit.from), command: this._commands.toInternal(item.command), @@ -704,8 +705,7 @@ class SuggestAdapter { } else { range = defaultRange; } - result.overwriteBefore = position.character - range.start.character; - result.overwriteAfter = range.end.character - position.character; + result.range = typeConvert.Range.from(range); if (!range.isSingleLine || range.start.line !== position.line) { console.warn('INVALID text edit -> must be single line and on the same line'); diff --git a/src/vs/workbench/api/node/extHostTypeConverters.ts b/src/vs/workbench/api/node/extHostTypeConverters.ts index ea22e5a073a09c9a9b4e198252c47f730b4d5270..f6b01bd0a3018884a6afcffc3e9ef9c7b0524a69 100644 --- a/src/vs/workbench/api/node/extHostTypeConverters.ts +++ b/src/vs/workbench/api/node/extHostTypeConverters.ts @@ -544,7 +544,7 @@ export const CompletionItemKind = { export namespace Suggest { - export function to(position: types.Position, suggestion: modes.CompletionItem): types.CompletionItem { + export function to(suggestion: modes.CompletionItem): types.CompletionItem { const result = new types.CompletionItem(suggestion.label); result.insertText = suggestion.insertText; result.kind = CompletionItemKind.to(suggestion.kind); @@ -554,15 +554,7 @@ export namespace Suggest { result.filterText = suggestion.filterText; result.preselect = suggestion.preselect; result.commitCharacters = suggestion.commitCharacters; - - // 'overwrite[Before|After]'-logic - let overwriteBefore = (typeof suggestion.overwriteBefore === 'number') ? suggestion.overwriteBefore : 0; - let startPosition = new types.Position(position.line, Math.max(0, position.character - overwriteBefore)); - let endPosition = position; - if (typeof suggestion.overwriteAfter === 'number') { - endPosition = new types.Position(position.line, position.character + suggestion.overwriteAfter); - } - result.range = new types.Range(startPosition, endPosition); + result.range = Range.to(suggestion.range); // 'inserText'-logic if (suggestion.insertTextIsSnippet) { diff --git a/src/vs/workbench/parts/debug/electron-browser/breakpointWidget.ts b/src/vs/workbench/parts/debug/electron-browser/breakpointWidget.ts index f0322ea67c9cacf43133d4a3aa3ecaa27c4c4d28..5cbb9052047b6beb1228e7ca57de5f4def2017c7 100644 --- a/src/vs/workbench/parts/debug/electron-browser/breakpointWidget.ts +++ b/src/vs/workbench/parts/debug/electron-browser/breakpointWidget.ts @@ -34,6 +34,7 @@ import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget'; import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { getSimpleCodeEditorWidgetOptions } from 'vs/workbench/parts/codeEditor/electron-browser/simpleEditorOptions'; import { getSimpleEditorOptions } from 'vs/workbench/parts/codeEditor/browser/simpleEditorOptions'; +import { Range } from 'vs/editor/common/core/range'; const $ = dom.$; const IPrivateBreakpointWidgetService = createDecorator('privateBreakopintWidgetService'); @@ -234,8 +235,7 @@ export class BreakpointWidget extends ZoneWidget implements IPrivateBreakpointWi return { suggestions: suggestions.map(s => { - s.suggestion.overwriteAfter = 0; - s.suggestion.overwriteBefore = overwriteBefore; + s.suggestion.range = Range.fromPositions(position.delta(0, -overwriteBefore), position); return s.suggestion; }) }; diff --git a/src/vs/workbench/parts/debug/electron-browser/debugSession.ts b/src/vs/workbench/parts/debug/electron-browser/debugSession.ts index 1522a7593d2d00b0555fbc4a322557fdaec69825..4438250d9d3e4e65dc64ccb47970fdb9e3808da2 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugSession.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugSession.ts @@ -27,6 +27,7 @@ import { generateUuid } from 'vs/base/common/uuid'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { normalizeDriveLetter } from 'vs/base/common/labels'; import { IOutputService } from 'vs/workbench/parts/output/common/output'; +import { Range } from 'vs/editor/common/core/range'; export class DebugSession implements IDebugSession { @@ -463,7 +464,7 @@ export class DebugSession implements IDebugSession { insertText: item.text || item.label, kind: completionKindFromLegacyString(item.type), filterText: item.start && item.length && text.substr(item.start, item.length).concat(item.label), - overwriteBefore: item.length || overwriteBefore + range: Range.fromPositions(position.delta(0, -(item.length || overwriteBefore)), position) }); } }); diff --git a/src/vs/workbench/parts/snippets/electron-browser/snippetsService.ts b/src/vs/workbench/parts/snippets/electron-browser/snippetsService.ts index c6b8dbe168e173d1616168a9f0d3279425c0630c..8542ac491b5ecb7ab89ab0e20bdafb67b6be9177 100644 --- a/src/vs/workbench/parts/snippets/electron-browser/snippetsService.ts +++ b/src/vs/workbench/parts/snippets/electron-browser/snippetsService.ts @@ -30,6 +30,7 @@ import { ExtensionsRegistry, IExtensionPointUser } from 'vs/workbench/services/e import { languagesExtPoint } from 'vs/workbench/services/mode/common/workbenchModeService'; import { IWorkspaceContextService, IWorkspace } from 'vs/platform/workspace/common/workspace'; import { isFalsyOrEmpty } from 'vs/base/common/arrays'; +import { IRange, Range } from 'vs/editor/common/core/range'; namespace schema { @@ -345,7 +346,7 @@ export class SnippetSuggestion implements CompletionItem { detail: string; insertText: string; documentation: MarkdownString; - overwriteBefore: number; + range: IRange; sortText: string; noAutoAccept: boolean; kind: CompletionKind; @@ -353,12 +354,12 @@ export class SnippetSuggestion implements CompletionItem { constructor( readonly snippet: Snippet, - overwriteBefore: number + range: IRange ) { this.label = snippet.prefix; this.detail = localize('detail.snippet', "{0} ({1})", snippet.description || snippet.name, snippet.source); this.insertText = snippet.body; - this.overwriteBefore = overwriteBefore; + this.range = range; this.sortText = `${snippet.snippetSource === SnippetSource.Extension ? 'z' : 'a'}-${snippet.prefix}`; this.noAutoAccept = true; this.kind = CompletionKind.Snippet; @@ -420,7 +421,7 @@ export class SnippetSuggestProvider implements CompletionItemProvider { if (lineOffsets.length === 0) { // no interesting spans found -> pick all snippets - suggestions = snippets.map(snippet => new SnippetSuggestion(snippet, 0)); + suggestions = snippets.map(snippet => new SnippetSuggestion(snippet, Range.fromPositions(position))); } else { let consumed = new Set(); @@ -429,7 +430,7 @@ export class SnippetSuggestProvider implements CompletionItemProvider { start -= shift; for (const snippet of snippets) { if (!consumed.has(snippet) && matches(linePrefixLow, start, snippet.prefixLow, 0)) { - suggestions.push(new SnippetSuggestion(snippet, linePrefixLow.length - start)); + suggestions.push(new SnippetSuggestion(snippet, Range.fromPositions(position.delta(0, -(linePrefixLow.length - start)), position))); consumed.add(snippet); } } diff --git a/src/vs/workbench/parts/snippets/electron-browser/tabCompletion.ts b/src/vs/workbench/parts/snippets/electron-browser/tabCompletion.ts index 67e27e3c265d89256bf77341e1d83f0a8f318658..45d690610f5fb33e9b0b37bf6dc783a4b13020fb 100644 --- a/src/vs/workbench/parts/snippets/electron-browser/tabCompletion.ts +++ b/src/vs/workbench/parts/snippets/electron-browser/tabCompletion.ts @@ -127,7 +127,11 @@ export class TabCompletionController implements editorCommon.IEditorContribution } else if (this._activeSnippets.length > 1) { // two or more -> show IntelliSense box - showSimpleSuggestions(this._editor, this._activeSnippets.map(snippet => new SnippetSuggestion(snippet, snippet.prefix.length))); + showSimpleSuggestions(this._editor, this._activeSnippets.map(snippet => { + const position = this._editor.getPosition(); + const range = Range.fromPositions(position.delta(0, -snippet.prefix.length), position); + return new SnippetSuggestion(snippet, range); + })); } } } diff --git a/src/vs/workbench/parts/snippets/test/electron-browser/snippetsService.test.ts b/src/vs/workbench/parts/snippets/test/electron-browser/snippetsService.test.ts index 321fa3faf2fe4dbe30cb7d220406242d96124830..7975db5c9852ad0e75606f1fda46e7bcb0daef36 100644 --- a/src/vs/workbench/parts/snippets/test/electron-browser/snippetsService.test.ts +++ b/src/vs/workbench/parts/snippets/test/electron-browser/snippetsService.test.ts @@ -85,7 +85,7 @@ suite('SnippetsService', function () { assert.equal(result.incomplete, undefined); assert.equal(result.suggestions.length, 1); assert.equal(result.suggestions[0].label, 'bar'); - assert.equal(result.suggestions[0].overwriteBefore, 3); + assert.equal(result.suggestions[0].range.startColumn, 1); assert.equal(result.suggestions[0].insertText, 'barCodeSnippet'); }); }); @@ -118,10 +118,10 @@ suite('SnippetsService', function () { assert.equal(result.suggestions.length, 2); assert.equal(result.suggestions[0].label, 'bar'); assert.equal(result.suggestions[0].insertText, 's1'); - assert.equal(result.suggestions[0].overwriteBefore, 2); + assert.equal(result.suggestions[0].range.startColumn, 1); assert.equal(result.suggestions[1].label, 'bar-bar'); assert.equal(result.suggestions[1].insertText, 's2'); - assert.equal(result.suggestions[1].overwriteBefore, 2); + assert.equal(result.suggestions[1].range.startColumn, 1); }); await provider.provideCompletionItems(model, new Position(1, 5), suggestContext).then(result => { @@ -129,7 +129,7 @@ suite('SnippetsService', function () { assert.equal(result.suggestions.length, 1); assert.equal(result.suggestions[0].label, 'bar-bar'); assert.equal(result.suggestions[0].insertText, 's2'); - assert.equal(result.suggestions[0].overwriteBefore, 4); + assert.equal(result.suggestions[0].range.startColumn, 1); }); await provider.provideCompletionItems(model, new Position(1, 6), suggestContext).then(result => { @@ -137,10 +137,10 @@ suite('SnippetsService', function () { assert.equal(result.suggestions.length, 2); assert.equal(result.suggestions[0].label, 'bar'); assert.equal(result.suggestions[0].insertText, 's1'); - assert.equal(result.suggestions[0].overwriteBefore, 1); + assert.equal(result.suggestions[0].range.startColumn, 5); assert.equal(result.suggestions[1].label, 'bar-bar'); assert.equal(result.suggestions[1].insertText, 's2'); - assert.equal(result.suggestions[1].overwriteBefore, 5); + assert.equal(result.suggestions[1].range.startColumn, 1); }); }); @@ -166,14 +166,14 @@ suite('SnippetsService', function () { return provider.provideCompletionItems(model, new Position(1, 4), suggestContext); }).then(result => { assert.equal(result.suggestions.length, 1); - assert.equal(result.suggestions[0].overwriteBefore, 2); + assert.equal(result.suggestions[0].range.startColumn, 2); model.dispose(); model = TextModel.createFromString('a { assert.equal(result.suggestions.length, 1); - assert.equal(result.suggestions[0].overwriteBefore, 2); + assert.equal(result.suggestions[0].range.startColumn, 2); model.dispose(); }); });