Merge VS Code 1.23.1 (#1520)

This commit is contained in:
Matt Irvine
2018-06-05 11:24:51 -07:00
committed by GitHub
parent e3baf5c443
commit 0c58f09e59
3651 changed files with 74249 additions and 48599 deletions

View File

@@ -5,10 +5,11 @@
'use strict';
import Event, { Emitter } from 'vs/base/common/event';
import { Event, Emitter } from 'vs/base/common/event';
import { IDisposable } from 'vs/base/common/lifecycle';
import { ITextModel } from 'vs/editor/common/model';
import { LanguageSelector, score } from 'vs/editor/common/modes/languageSelector';
import { shouldSynchronizeModel } from 'vs/editor/common/services/modelService';
interface Entry<T> {
selector: LanguageSelector;
@@ -17,11 +18,21 @@ interface Entry<T> {
_time: number;
}
function isExclusive(selector: LanguageSelector): boolean {
if (typeof selector === 'string') {
return false;
} else if (Array.isArray(selector)) {
return selector.every(isExclusive);
} else {
return selector.exclusive;
}
}
export default class LanguageFeatureRegistry<T> {
private _clock: number = 0;
private _entries: Entry<T>[] = [];
private _onDidChange: Emitter<number> = new Emitter<number>();
private readonly _onDidChange: Emitter<number> = new Emitter<number>();
constructor() {
}
@@ -63,7 +74,7 @@ export default class LanguageFeatureRegistry<T> {
}
all(model: ITextModel): T[] {
if (!model || model.isTooLargeForHavingARichMode()) {
if (!model) {
return [];
}
@@ -106,7 +117,7 @@ export default class LanguageFeatureRegistry<T> {
private _orderedForEach(model: ITextModel, callback: (provider: Entry<T>) => any): void {
if (!model || model.isTooLargeForHavingARichMode()) {
if (!model) {
return;
}
@@ -140,7 +151,17 @@ export default class LanguageFeatureRegistry<T> {
this._lastCandidate = candidate;
for (let entry of this._entries) {
entry._score = score(entry.selector, model.uri, model.getLanguageIdentifier().language);
entry._score = score(entry.selector, model.uri, model.getLanguageIdentifier().language, shouldSynchronizeModel(model));
if (isExclusive(entry.selector) && entry._score > 0) {
// support for one exclusive selector that overwrites
// any other selector
for (let entry of this._entries) {
entry._score = 0;
}
entry._score = 1000;
break;
}
}
// needs sorting