Skip to content

Commit 7075821

Browse files
committed
adopt isTooLargeForHavingAMode in language feature registry
1 parent e581c62 commit 7075821

1 file changed

Lines changed: 47 additions & 41 deletions

File tree

src/vs/editor/common/modes/languageFeatureRegistry.ts

Lines changed: 47 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export default class LanguageFeatureRegistry<T> {
4545
};
4646

4747
this._entries.push(entry);
48-
this._candidate = undefined;
48+
this._lastCandidate = undefined;
4949
this._onDidChange.fire(this._entries.length);
5050

5151
return {
@@ -54,7 +54,7 @@ export default class LanguageFeatureRegistry<T> {
5454
let idx = this._entries.indexOf(entry);
5555
if (idx >= 0) {
5656
this._entries.splice(idx, 1);
57-
this._candidate = undefined;
57+
this._lastCandidate = undefined;
5858
this._onDidChange.fire(this._entries.length);
5959
entry = undefined;
6060
}
@@ -67,21 +67,25 @@ export default class LanguageFeatureRegistry<T> {
6767
return this.all(model).length > 0;
6868
}
6969

70-
all(model: IModel): T[]{
71-
let result: T[] = [];
72-
if (model) {
73-
this._updateScores(model);
74-
// from registry
75-
for (let entry of this._entries) {
76-
if (entry._score > 0) {
77-
result.push(entry.provider);
78-
}
79-
}
80-
// from mode
81-
if (model.getMode() && model.getMode()[this._supportName]) {
82-
result.push(model.getMode()[this._supportName]);
70+
all(model: IModel): T[] {
71+
if (!model || model.isTooLargeForHavingAMode()) {
72+
return [];
73+
}
74+
75+
this._updateScores(model);
76+
const result: T[] = [];
77+
78+
// (1) from registry
79+
for (let entry of this._entries) {
80+
if (entry._score > 0) {
81+
result.push(entry.provider);
8382
}
8483
}
84+
// (2) from mode
85+
if (model.getMode() && model.getMode()[this._supportName]) {
86+
result.push(model.getMode()[this._supportName]);
87+
}
88+
8589
return result;
8690
}
8791

@@ -110,37 +114,39 @@ export default class LanguageFeatureRegistry<T> {
110114
}
111115

112116
private _orderedEntries(model: IModel): Entry<T>[] {
113-
let result: Entry<T>[] = [];
114-
if (model) {
115-
if (this._updateScores(model)) {
116-
this._sortByScore();
117-
}
117+
if (!model || model.isTooLargeForHavingAMode()) {
118+
return [];
119+
}
120+
const result: Entry<T>[] = [];
118121

119-
// from registry
120-
for (let entry of this._entries) {
121-
if (entry._score > 0) {
122-
result.push(entry);
123-
}
122+
if (this._updateScores(model)) {
123+
this._sortByScore();
124+
}
125+
126+
// (1) from registry
127+
for (let entry of this._entries) {
128+
if (entry._score > 0) {
129+
result.push(entry);
124130
}
131+
}
125132

126-
// from mode
127-
if (model.getMode() && model.getMode()[this._supportName]) {
133+
// (2) from mode
134+
if (model.getMode() && model.getMode()[this._supportName]) {
128135

129-
let entry: Entry<T> = {
130-
selector: undefined,
131-
provider: model.getMode()[this._supportName],
132-
_score: .5,
133-
_time: 0
134-
};
136+
let entry: Entry<T> = {
137+
selector: undefined,
138+
provider: model.getMode()[this._supportName],
139+
_score: .5,
140+
_time: 0
141+
};
135142

136-
let idx = binarySearch(result, entry, LanguageFeatureRegistry._compareByScoreAndTime);
137-
result.splice(idx < 0 ? ~idx : idx, 0, entry);
138-
}
143+
let idx = binarySearch(result, entry, LanguageFeatureRegistry._compareByScoreAndTime);
144+
result.splice(idx < 0 ? ~idx : idx, 0, entry);
139145
}
140146
return result;
141147
}
142148

143-
private _candidate: { uri: string; language: string; };
149+
private _lastCandidate: { uri: string; language: string; };
144150

145151
private _updateScores(model: IModel): boolean {
146152

@@ -149,15 +155,15 @@ export default class LanguageFeatureRegistry<T> {
149155
language: model.getModeId()
150156
};
151157

152-
if (this._candidate
153-
&& this._candidate.language === candidate.language
154-
&& this._candidate.uri === candidate.uri) {
158+
if (this._lastCandidate
159+
&& this._lastCandidate.language === candidate.language
160+
&& this._lastCandidate.uri === candidate.uri) {
155161

156162
// nothing has changed
157163
return;
158164
}
159165

160-
this._candidate = candidate;
166+
this._lastCandidate = candidate;
161167

162168
for (let entry of this._entries) {
163169
entry._score = score(entry.selector, model.getAssociatedResource(), model.getModeId());

0 commit comments

Comments
 (0)