提交 7075821a 编写于 作者: J Johannes Rieken

adopt `isTooLargeForHavingAMode` in language feature registry

上级 e581c62a
...@@ -45,7 +45,7 @@ export default class LanguageFeatureRegistry<T> { ...@@ -45,7 +45,7 @@ export default class LanguageFeatureRegistry<T> {
}; };
this._entries.push(entry); this._entries.push(entry);
this._candidate = undefined; this._lastCandidate = undefined;
this._onDidChange.fire(this._entries.length); this._onDidChange.fire(this._entries.length);
return { return {
...@@ -54,7 +54,7 @@ export default class LanguageFeatureRegistry<T> { ...@@ -54,7 +54,7 @@ export default class LanguageFeatureRegistry<T> {
let idx = this._entries.indexOf(entry); let idx = this._entries.indexOf(entry);
if (idx >= 0) { if (idx >= 0) {
this._entries.splice(idx, 1); this._entries.splice(idx, 1);
this._candidate = undefined; this._lastCandidate = undefined;
this._onDidChange.fire(this._entries.length); this._onDidChange.fire(this._entries.length);
entry = undefined; entry = undefined;
} }
...@@ -67,21 +67,25 @@ export default class LanguageFeatureRegistry<T> { ...@@ -67,21 +67,25 @@ export default class LanguageFeatureRegistry<T> {
return this.all(model).length > 0; return this.all(model).length > 0;
} }
all(model: IModel): T[]{ all(model: IModel): T[] {
let result: T[] = []; if (!model || model.isTooLargeForHavingAMode()) {
if (model) { return [];
this._updateScores(model); }
// from registry
for (let entry of this._entries) { this._updateScores(model);
if (entry._score > 0) { const result: T[] = [];
result.push(entry.provider);
} // (1) from registry
} for (let entry of this._entries) {
// from mode if (entry._score > 0) {
if (model.getMode() && model.getMode()[this._supportName]) { result.push(entry.provider);
result.push(model.getMode()[this._supportName]);
} }
} }
// (2) from mode
if (model.getMode() && model.getMode()[this._supportName]) {
result.push(model.getMode()[this._supportName]);
}
return result; return result;
} }
...@@ -110,37 +114,39 @@ export default class LanguageFeatureRegistry<T> { ...@@ -110,37 +114,39 @@ export default class LanguageFeatureRegistry<T> {
} }
private _orderedEntries(model: IModel): Entry<T>[] { private _orderedEntries(model: IModel): Entry<T>[] {
let result: Entry<T>[] = []; if (!model || model.isTooLargeForHavingAMode()) {
if (model) { return [];
if (this._updateScores(model)) { }
this._sortByScore(); const result: Entry<T>[] = [];
}
// from registry if (this._updateScores(model)) {
for (let entry of this._entries) { this._sortByScore();
if (entry._score > 0) { }
result.push(entry);
} // (1) from registry
for (let entry of this._entries) {
if (entry._score > 0) {
result.push(entry);
} }
}
// from mode // (2) from mode
if (model.getMode() && model.getMode()[this._supportName]) { if (model.getMode() && model.getMode()[this._supportName]) {
let entry: Entry<T> = { let entry: Entry<T> = {
selector: undefined, selector: undefined,
provider: model.getMode()[this._supportName], provider: model.getMode()[this._supportName],
_score: .5, _score: .5,
_time: 0 _time: 0
}; };
let idx = binarySearch(result, entry, LanguageFeatureRegistry._compareByScoreAndTime); let idx = binarySearch(result, entry, LanguageFeatureRegistry._compareByScoreAndTime);
result.splice(idx < 0 ? ~idx : idx, 0, entry); result.splice(idx < 0 ? ~idx : idx, 0, entry);
}
} }
return result; return result;
} }
private _candidate: { uri: string; language: string; }; private _lastCandidate: { uri: string; language: string; };
private _updateScores(model: IModel): boolean { private _updateScores(model: IModel): boolean {
...@@ -149,15 +155,15 @@ export default class LanguageFeatureRegistry<T> { ...@@ -149,15 +155,15 @@ export default class LanguageFeatureRegistry<T> {
language: model.getModeId() language: model.getModeId()
}; };
if (this._candidate if (this._lastCandidate
&& this._candidate.language === candidate.language && this._lastCandidate.language === candidate.language
&& this._candidate.uri === candidate.uri) { && this._lastCandidate.uri === candidate.uri) {
// nothing has changed // nothing has changed
return; return;
} }
this._candidate = candidate; this._lastCandidate = candidate;
for (let entry of this._entries) { for (let entry of this._entries) {
entry._score = score(entry.selector, model.getAssociatedResource(), model.getModeId()); entry._score = score(entry.selector, model.getAssociatedResource(), model.getModeId());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册