@@ -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