From 549845ed3a4d3bc557d2217f39f08d74979f7db0 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Wed, 4 Jan 2017 17:15:09 +0100 Subject: [PATCH] suggest - move shouldAutoTrigger into static and reduce Context properties --- .../contrib/suggest/common/suggestModel.ts | 48 ++++++++----------- .../suggest/test/common/suggestModel.test.ts | 8 ++-- 2 files changed, 26 insertions(+), 30 deletions(-) diff --git a/src/vs/editor/contrib/suggest/common/suggestModel.ts b/src/vs/editor/contrib/suggest/common/suggestModel.ts index a78e1d41fb6..08bbaeb674b 100644 --- a/src/vs/editor/contrib/suggest/common/suggestModel.ts +++ b/src/vs/editor/contrib/suggest/common/suggestModel.ts @@ -32,14 +32,31 @@ export interface ISuggestEvent { export class Context { + static shouldAutoTrigger(editor: ICommonCodeEditor): boolean { + const model = editor.getModel(); + if (!model) { + return false; + } + const pos = editor.getPosition(); + const word = model.getWordAtPosition(pos); + if (!word) { + return false; + } + if (word.endColumn !== pos.column) { + return false; + } + if (!isNaN(Number(word.word))) { + return false; + } + return true; + } + readonly lineNumber: number; readonly column: number; readonly isInEditableRange: boolean; readonly lineContentBefore: string; - readonly wordBefore: string; - readonly wordAfter: string; constructor(model: IModel, position: IPosition, private auto: boolean) { const lineContent = model.getLineContent(position.lineNumber); @@ -47,10 +64,8 @@ export class Context { if (wordUnderCursor) { this.wordBefore = lineContent.substring(wordUnderCursor.startColumn - 1, position.column - 1); - this.wordAfter = lineContent.substring(position.column - 1, wordUnderCursor.endColumn - 1); } else { this.wordBefore = ''; - this.wordAfter = ''; } this.lineNumber = position.lineNumber; @@ -67,26 +82,6 @@ export class Context { } } - shouldAutoTrigger(): boolean { - - if (this.wordBefore.length === 0) { - // Word before position is empty - return false; - } - - if (!isNaN(Number(this.wordBefore))) { - // Word before is number only - return false; - } - - if (this.wordAfter.length > 0) { - // Word after position is non empty - return false; - } - - return true; - } - isDifferentContext(context: Context): boolean { if (this.lineNumber !== context.lineNumber) { // Line number has changed @@ -292,14 +287,12 @@ export class SuggestModel implements IDisposable { return; } - const ctx = new Context(model, this.editor.getPosition(), false); - if (this.state === State.Idle) { if (this.editor.getConfiguration().contribInfo.quickSuggestions) { // trigger suggest from idle when configured to do so this.cancel(); - if (ctx.shouldAutoTrigger()) { + if (Context.shouldAutoTrigger(this.editor)) { this.triggerAutoSuggestPromise = TPromise.timeout(this.quickSuggestDelay); this.triggerAutoSuggestPromise.then(() => { this.triggerAutoSuggestPromise = null; @@ -310,6 +303,7 @@ export class SuggestModel implements IDisposable { } else { // refine active suggestion + const ctx = new Context(model, this.editor.getPosition(), false); this.onNewContext(ctx); } } diff --git a/src/vs/editor/contrib/suggest/test/common/suggestModel.test.ts b/src/vs/editor/contrib/suggest/test/common/suggestModel.test.ts index aa331b329d3..3c70130c991 100644 --- a/src/vs/editor/contrib/suggest/test/common/suggestModel.test.ts +++ b/src/vs/editor/contrib/suggest/test/common/suggestModel.test.ts @@ -49,8 +49,10 @@ suite('SuggestModel - Context', function () { function assertAutoTrigger(offset: number, expected: boolean): void { const pos = model.getPositionAt(offset); - const ctx = new Context(model, pos, false); - assert.equal(ctx.shouldAutoTrigger(), expected); + const editor = createMockEditor(model); + editor.setPosition(pos); + assert.equal(Context.shouldAutoTrigger(editor), expected); + editor.dispose(); } assertAutoTrigger(3, true); // end of word, Das| @@ -239,4 +241,4 @@ suite('SuggestModel - TriggerAndCancelOracle', function () { }); }); }); -}); \ No newline at end of file +}); -- GitLab