提交 549845ed 编写于 作者: J Johannes Rieken

suggest - move shouldAutoTrigger into static and reduce Context properties

上级 8f88ee2a
......@@ -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);
}
}
......
......@@ -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
});
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册