mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-02 17:23:40 -05:00
Merge VS Code 1.23.1 (#1520)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user