add exclusivness to document filter

This commit is contained in:
Johannes Rieken
2018-05-03 11:37:58 +02:00
parent d7955610d4
commit fa0a49bbf2
7 changed files with 51 additions and 14 deletions

View File

@@ -147,18 +147,23 @@ export function createApiFactory(
// we cannot say if the extension is doing it right or wrong...
let checkSelector = (function () {
let done = initData.environment.extensionDevelopmentPath !== extension.extensionFolderPath;
function inform(selector: vscode.DocumentSelector) {
console.info(`Extension '${extension.id}' uses a document selector without scheme. Learn more about this: https://go.microsoft.com/fwlink/?linkid=872305`);
done = true;
function informOnce(selector: vscode.DocumentSelector) {
if (!done) {
console.info(`Extension '${extension.id}' uses a document selector without scheme. Learn more about this: https://go.microsoft.com/fwlink/?linkid=872305`);
done = true;
}
}
return function perform(selector: vscode.DocumentSelector): vscode.DocumentSelector {
if (!done) {
if (Array.isArray(selector)) {
selector.forEach(perform);
} else if (typeof selector === 'string') {
inform(selector);
} else if (typeof selector.scheme === 'undefined') {
inform(selector);
if (Array.isArray(selector)) {
selector.forEach(perform);
} else if (typeof selector === 'string') {
informOnce(selector);
} else {
if (typeof selector.scheme === 'undefined') {
informOnce(selector);
}
if (!extension.enableProposedApi && typeof selector.exclusive === 'boolean') {
throwProposedApiError(extension);
}
}
return selector;

View File

@@ -258,6 +258,7 @@ export interface ISerializedDocumentFilter {
language?: string;
scheme?: string;
pattern?: vscode.GlobPattern;
exclusive?: boolean;
}
export interface MainThreadLanguageFeaturesShape extends IDisposable {

View File

@@ -887,7 +887,8 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape {
$serialized: true,
language: selector.language,
scheme: this._transformScheme(selector.scheme),
pattern: selector.pattern
pattern: selector.pattern,
exclusive: selector.exclusive
};
}

View File

@@ -696,7 +696,8 @@ function doToLanguageSelector(selector: string | vscode.DocumentFilter): string
return {
language: selector.language,
scheme: selector.scheme,
pattern: toGlobPattern(selector.pattern)
pattern: toGlobPattern(selector.pattern),
exclusive: selector.exclusive
};
}