wire up editor.suggest.filterGraceful #52789

This commit is contained in:
Johannes Rieken 2018-07-02 11:19:36 +02:00
parent 32d9f16388
commit 91e82ed2fe
3 changed files with 18 additions and 11 deletions

View file

@ -9,6 +9,7 @@ import { fuzzyScore, fuzzyScoreGracefulAggressive, anyScore } from 'vs/base/comm
import { isDisposable } from 'vs/base/common/lifecycle';
import { ISuggestResult, ISuggestSupport } from 'vs/editor/common/modes';
import { ISuggestionItem, SnippetConfig } from './suggest';
import { ISuggestOptions } from 'vs/editor/common/config/editorOptions';
export interface ICompletionItem extends ISuggestionItem {
matches?: number[];
@ -46,8 +47,9 @@ const enum Refilter {
export class CompletionModel {
private readonly _column: number;
private readonly _items: ICompletionItem[];
private readonly _column: number;
private readonly _options: ISuggestOptions;
private readonly _snippetCompareFn = CompletionModel._compareCompletionItems;
private _lineContext: LineContext;
@ -56,9 +58,10 @@ export class CompletionModel {
private _isIncomplete: Set<ISuggestSupport>;
private _stats: ICompletionStats;
constructor(items: ISuggestionItem[], column: number, lineContext: LineContext, snippetConfig?: SnippetConfig) {
constructor(items: ISuggestionItem[], column: number, lineContext: LineContext, options: ISuggestOptions = { filterGraceful: true }, snippetConfig?: SnippetConfig) {
this._items = items;
this._column = column;
this._options = options;
this._refilterKind = Refilter.All;
this._lineContext = lineContext;
@ -146,8 +149,9 @@ export class CompletionModel {
const target: typeof source = [];
// picks a score function based on the number of
// items that we have to score/filter
const scoreFn = source.length > 2000 ? fuzzyScore : fuzzyScoreGracefulAggressive;
// items that we have to score/filter and based on the
// user-configuration
const scoreFn = (!this._options.filterGraceful || source.length > 2000) ? fuzzyScore : fuzzyScoreGracefulAggressive;
for (let i = 0; i < source.length; i++) {

View file

@ -381,7 +381,10 @@ export class SuggestModel implements IDisposable {
this._completionModel = new CompletionModel(items, this._context.column, {
leadingLineContent: ctx.leadingLineContent,
characterCountDelta: this._context ? ctx.column - this._context.column : 0
}, this._editor.getConfiguration().contribInfo.snippetSuggestions);
},
this._editor.getConfiguration().contribInfo.suggest,
this._editor.getConfiguration().contribInfo.snippetSuggestions
);
this._onNewContext(ctx);
}).then(null, onUnexpectedError);

View file

@ -167,7 +167,7 @@ suite('CompletionModel', function () {
], 1, {
leadingLineContent: 's',
characterCountDelta: 0
}, 'top');
}, undefined, 'top');
assert.equal(model.items.length, 2);
const [a, b] = model.items;
@ -186,7 +186,7 @@ suite('CompletionModel', function () {
], 1, {
leadingLineContent: 's',
characterCountDelta: 0
}, 'bottom');
}, undefined, 'bottom');
assert.equal(model.items.length, 2);
const [a, b] = model.items;
@ -204,7 +204,7 @@ suite('CompletionModel', function () {
], 1, {
leadingLineContent: 's',
characterCountDelta: 0
}, 'inline');
}, undefined, 'inline');
assert.equal(model.items.length, 2);
const [a, b] = model.items;
@ -267,7 +267,7 @@ suite('CompletionModel', function () {
], 1, {
leadingLineContent: '',
characterCountDelta: 0
}, 'inline');
}, undefined, 'inline');
assert.equal(model.items.length, 5);
@ -294,7 +294,7 @@ suite('CompletionModel', function () {
], 1, {
leadingLineContent: '',
characterCountDelta: 0
}, 'inline');
}, undefined, 'inline');
// query gets longer, narrow down the narrow-down'ed-set from before
model.lineContext = { leadingLineContent: 'rlut', characterCountDelta: 4 };
@ -316,7 +316,7 @@ suite('CompletionModel', function () {
], 1, {
leadingLineContent: '',
characterCountDelta: 0
}, 'inline');
}, undefined, 'inline');
model.lineContext = { leadingLineContent: 'form', characterCountDelta: 4 };
assert.equal(model.items.length, 5);