From 8a5ffbb0441768a31b3eb53d0a2db4ec525b50ee Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Fri, 23 Oct 2020 18:37:39 -0700 Subject: [PATCH] Mark DocumentSelector as readonly (#109212) This change: - Make `DocumentSelector` use a readonly array - Updates all properties of `DocumentFilter` to be readonly `DocumentSelector` is used as a parameter in our provider APIs and does not need to be mutable. This change lets extensions pass in readonly values for the selector --- .../src/utils/documentSelector.ts | 4 ++-- src/vs/base/common/arrays.ts | 2 ++ src/vs/editor/common/modes/languageSelector.ts | 12 ++++++------ src/vs/vscode.d.ts | 8 ++++---- src/vs/vscode.proposed.d.ts | 2 +- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/extensions/typescript-language-features/src/utils/documentSelector.ts b/extensions/typescript-language-features/src/utils/documentSelector.ts index 0574c3f587d..780389320b8 100644 --- a/extensions/typescript-language-features/src/utils/documentSelector.ts +++ b/extensions/typescript-language-features/src/utils/documentSelector.ts @@ -9,10 +9,10 @@ export interface DocumentSelector { /** * Selector for files which only require a basic syntax server. */ - readonly syntax: vscode.DocumentFilter[]; + readonly syntax: readonly vscode.DocumentFilter[]; /** * Selector for files which require semantic server support. */ - readonly semantic: vscode.DocumentFilter[]; + readonly semantic: readonly vscode.DocumentFilter[]; } diff --git a/src/vs/base/common/arrays.ts b/src/vs/base/common/arrays.ts index 2b8904acceb..71f84130cab 100644 --- a/src/vs/base/common/arrays.ts +++ b/src/vs/base/common/arrays.ts @@ -545,6 +545,8 @@ export function mapArrayOrNot(items: T | T[], fn: (_: T) => U): U | U[] { fn(items); } +export function asArray(x: T | T[]): T[]; +export function asArray(x: T | readonly T[]): readonly T[]; export function asArray(x: T | T[]): T[] { return Array.isArray(x) ? x : [x]; } diff --git a/src/vs/editor/common/modes/languageSelector.ts b/src/vs/editor/common/modes/languageSelector.ts index f3bbac42f8e..eff5d35ab30 100644 --- a/src/vs/editor/common/modes/languageSelector.ts +++ b/src/vs/editor/common/modes/languageSelector.ts @@ -8,17 +8,17 @@ import { URI } from 'vs/base/common/uri'; // TODO@Alex import { normalize } from 'vs/base/common/path'; export interface LanguageFilter { - language?: string; - scheme?: string; - pattern?: string | IRelativePattern; + readonly language?: string; + readonly scheme?: string; + readonly pattern?: string | IRelativePattern; /** * This provider is implemented in the UI thread. */ - hasAccessToAllModels?: boolean; - exclusive?: boolean; + readonly hasAccessToAllModels?: boolean; + readonly exclusive?: boolean; } -export type LanguageSelector = string | LanguageFilter | Array; +export type LanguageSelector = string | LanguageFilter | ReadonlyArray; export function score(selector: LanguageSelector | undefined, candidateUri: URI, candidateLanguage: string, candidateIsSynchronized: boolean): number { diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index a0fd1ff7a04..a8d1f6529bd 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -1943,18 +1943,18 @@ declare module 'vscode' { /** * A language id, like `typescript`. */ - language?: string; + readonly language?: string; /** * A Uri [scheme](#Uri.scheme), like `file` or `untitled`. */ - scheme?: string; + readonly scheme?: string; /** * A [glob pattern](#GlobPattern) that is matched on the absolute path of the document. Use a [relative pattern](#RelativePattern) * to filter documents to a [workspace folder](#WorkspaceFolder). */ - pattern?: GlobPattern; + readonly pattern?: GlobPattern; } /** @@ -1969,7 +1969,7 @@ declare module 'vscode' { * @example * let sel:DocumentSelector = { scheme: 'file', language: 'typescript' }; */ - export type DocumentSelector = DocumentFilter | string | Array; + export type DocumentSelector = DocumentFilter | string | ReadonlyArray; /** * A provider result represents the values a provider, like the [`HoverProvider`](#HoverProvider), diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index f1af33b0f35..c156f96a984 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -992,7 +992,7 @@ declare module 'vscode' { //#region @jrieken -> exclusive document filters export interface DocumentFilter { - exclusive?: boolean; + readonly exclusive?: boolean; } //#endregion