diff --git a/configs/base.tsconfig.json b/configs/base.tsconfig.json index 7175a17cf0299..25840e002be94 100644 --- a/configs/base.tsconfig.json +++ b/configs/base.tsconfig.json @@ -14,7 +14,7 @@ "resolveJsonModule": true, "module": "commonjs", "moduleResolution": "node", - "target": "es5", + "target": "es6", "jsx": "react", "lib": [ "es6", diff --git a/dev-packages/application-manager/src/generator/webpack-generator.ts b/dev-packages/application-manager/src/generator/webpack-generator.ts index f10462cf47517..b6f062a32461c 100644 --- a/dev-packages/application-manager/src/generator/webpack-generator.ts +++ b/dev-packages/application-manager/src/generator/webpack-generator.ts @@ -195,26 +195,6 @@ module.exports = { { test: /\\.plist$/, type: 'asset/resource' - }, - { - test: /\\.js$/, - // include only es6 dependencies to transpile them to es5 classes - include: /vscode-ws-jsonrpc|vscode-jsonrpc|vscode-languageserver-protocol|vscode-languageserver-types/, - use: { - loader: 'babel-loader', - options: { - presets: ['@babel/preset-env'], - plugins: [ - // reuse runtime babel lib instead of generating it in each js file - '@babel/plugin-transform-runtime', - // ensure that classes are transpiled - '@babel/plugin-transform-classes' - ], - // see https://github.com/babel/babel/issues/8900#issuecomment-431240426 - sourceType: 'unambiguous', - cacheDirectory: true - } - } } ] }, diff --git a/packages/core/src/browser/navigatable.ts b/packages/core/src/browser/navigatable.ts index 49efbbadc5c42..9429dc76ee007 100644 --- a/packages/core/src/browser/navigatable.ts +++ b/packages/core/src/browser/navigatable.ts @@ -45,14 +45,14 @@ export namespace NavigatableWidget { return arg instanceof BaseWidget && Navigatable.is(arg); } export function* getAffected<T extends Widget>( - widgets: IterableIterator<T> | ArrayLike<T>, + widgets: Iterable<T>, context: MaybeArray<URI> ): IterableIterator<[URI, T & NavigatableWidget]> { const uris = Array.isArray(context) ? context : [context]; return get(widgets, resourceUri => uris.some(uri => uri.isEqualOrParent(resourceUri))); } export function* get<T extends Widget>( - widgets: IterableIterator<T> | ArrayLike<T>, + widgets: Iterable<T>, filter: (resourceUri: URI) => boolean = () => true ): IterableIterator<[URI, T & NavigatableWidget]> { for (const widget of widgets) { diff --git a/packages/core/src/browser/saveable.ts b/packages/core/src/browser/saveable.ts index ad4ca17f276f9..cea603bfaa8f2 100644 --- a/packages/core/src/browser/saveable.ts +++ b/packages/core/src/browser/saveable.ts @@ -161,11 +161,11 @@ export namespace SaveableWidget { export function is(widget: Widget | undefined): widget is SaveableWidget { return !!widget && 'closeWithoutSaving' in widget; } - export function getDirty<T extends Widget>(widgets: IterableIterator<T> | ArrayLike<T>): IterableIterator<SaveableWidget & T> { + export function getDirty<T extends Widget>(widgets: Iterable<T>): IterableIterator<SaveableWidget & T> { return get(widgets, Saveable.isDirty); } export function* get<T extends Widget>( - widgets: IterableIterator<T> | ArrayLike<T>, + widgets: Iterable<T>, filter: (widget: T) => boolean = () => true ): IterableIterator<SaveableWidget & T> { for (const widget of widgets) { diff --git a/packages/core/src/browser/tree/tree-widget.tsx b/packages/core/src/browser/tree/tree-widget.tsx index 085f2a9f6df73..f510b9d73d4bb 100644 --- a/packages/core/src/browser/tree/tree-widget.tsx +++ b/packages/core/src/browser/tree/tree-widget.tsx @@ -976,7 +976,7 @@ export class TreeWidget extends ReactWidget implements StatefulWidget { decorations.push(node.decorationData); } if (this.decorations.has(node.id)) { - decorations.push(...this.decorations.get(node.id)); + decorations.push(...this.decorations.get(node.id) || []); } return decorations.sort(TreeDecoration.Data.comparePriority); } diff --git a/packages/monaco/src/typings/monaco/index.d.ts b/packages/monaco/src/typings/monaco/index.d.ts index a0f65fe3e9987..938a6798827af 100644 --- a/packages/monaco/src/typings/monaco/index.d.ts +++ b/packages/monaco/src/typings/monaco/index.d.ts @@ -525,7 +525,7 @@ declare module monaco.actions { * Retrieves all the registered menu items for the given menu. * @param menuId - see https://github.com/theia-ide/vscode/blob/standalone/0.20.x/src/vs/platform/actions/common/actions.ts#L67 */ - getMenuItems(menuId: 7 /* EditorContext */ | 8 /* EditorContextPeek */ | 25 /* MenubarSelectionMenu */): IMenuItem | ISubmenuItem[]; + getMenuItems(menuId: 7 /* EditorContext */ | 8 /* EditorContextPeek */ | 25 /* MenubarSelectionMenu */): Iterable<IMenuItem> | Iterable<ISubmenuItem>; } // https://github.com/theia-ide/vscode/blob/standalone/0.20.x/src/vs/platform/actions/common/actions.ts#L51 diff --git a/packages/plugin-ext/src/main/browser/plugin-contribution-handler.ts b/packages/plugin-ext/src/main/browser/plugin-contribution-handler.ts index d2abed4ee425a..3792190f5593a 100644 --- a/packages/plugin-ext/src/main/browser/plugin-contribution-handler.ts +++ b/packages/plugin-ext/src/main/browser/plugin-contribution-handler.ts @@ -299,8 +299,9 @@ export class PluginContributionHandler { } } - if (contributions.colors) { - pushContribution('colors', () => this.colors.register(...contributions.colors)); + const colors = contributions.colors; + if (colors) { + pushContribution('colors', () => this.colors.register(...colors)); } if (contributions.taskDefinitions) { diff --git a/packages/plugin-ext/src/main/browser/view/tree-view-widget.tsx b/packages/plugin-ext/src/main/browser/view/tree-view-widget.tsx index cfb5468717370..35275ea828201 100644 --- a/packages/plugin-ext/src/main/browser/view/tree-view-widget.tsx +++ b/packages/plugin-ext/src/main/browser/view/tree-view-widget.tsx @@ -281,7 +281,7 @@ export class TreeViewWidget extends TreeViewWelcomeWidget { }); const children = this.getCaption(node); - return React.createElement('div', attrs, ...children); + return React.createElement('div', attrs, children); } protected getCaption(node: TreeNode): React.ReactNode { diff --git a/packages/plugin-ext/src/plugin/command-registry.ts b/packages/plugin-ext/src/plugin/command-registry.ts index a5e877d93256f..93d283a1762e8 100644 --- a/packages/plugin-ext/src/plugin/command-registry.ts +++ b/packages/plugin-ext/src/plugin/command-registry.ts @@ -102,7 +102,7 @@ export class CommandRegistryImpl implements CommandRegistryExt { // Using the KnownCommand exclusions, convert the commands manually return KnownCommands.map(id, args, (mappedId: string, mappedArgs: any[] | undefined, mappedResult: KnownCommands.ConversionFunction) => { const mr: KnownCommands.ConversionFunction = mappedResult; - return this.proxy.$executeCommand(mappedId, ...mappedArgs).then((result: any) => { + return this.proxy.$executeCommand(mappedId, ...mappedArgs || []).then((result: any) => { if (!result) { return undefined; } diff --git a/packages/plugin-ext/src/plugin/types-impl.ts b/packages/plugin-ext/src/plugin/types-impl.ts index bf66f68c0a84c..92c65d506f466 100644 --- a/packages/plugin-ext/src/plugin/types-impl.ts +++ b/packages/plugin-ext/src/plugin/types-impl.ts @@ -33,6 +33,7 @@ import { SymbolKind } from '../common/plugin-api-rpc-model'; import { FileSystemProviderErrorCode, markAsFileSystemProviderError } from '@theia/filesystem/lib/common/files'; import * as paths from 'path'; import { ObjectsTransferrer } from '../common/rpc-protocol'; +import { es5ClassCompat } from '../common/types'; /** * A reviver that takes URI's transferred via JSON.stringify() and makes @@ -114,6 +115,7 @@ export class URI extends CodeURI implements theia.Uri { } } +@es5ClassCompat export class Disposable { private disposable: undefined | (() => void); @@ -207,6 +209,7 @@ export enum SourceControlInputBoxValidationType { Information = 2 } +@es5ClassCompat export class ColorTheme implements theia.ColorTheme { constructor(public readonly kind: ColorThemeKind) { } } @@ -233,6 +236,7 @@ export namespace TextEditorSelectionChangeKind { } } +@es5ClassCompat export class Position { private _line: number; private _character: number; @@ -390,6 +394,7 @@ export class Position { } } +@es5ClassCompat export class Range { protected _start: Position; protected _end: Position; @@ -521,6 +526,7 @@ export class Range { } +@es5ClassCompat export class Selection extends Range { private _anchor: Position; private _active: Position; @@ -572,6 +578,7 @@ export enum EnvironmentVariableMutatorType { Prepend = 3 } +@es5ClassCompat export class SnippetString { static isSnippetString(thing: {}): thing is SnippetString { @@ -653,11 +660,13 @@ export class SnippetString { } } +@es5ClassCompat export class ThemeColor { constructor(public id: string) { } } +@es5ClassCompat export class ThemeIcon { static readonly File: ThemeIcon = new ThemeIcon('file'); @@ -716,6 +725,7 @@ export enum ConfigurationTarget { Memory } +@es5ClassCompat export class RelativePattern { base: string; @@ -746,6 +756,7 @@ export enum IndentAction { Outdent = 3 } +@es5ClassCompat export class TextEdit { protected _range: Range; @@ -854,6 +865,7 @@ export enum CompletionItemKind { TypeParameter = 24 } +@es5ClassCompat export class CompletionItem implements theia.CompletionItem { label: string; @@ -876,6 +888,7 @@ export class CompletionItem implements theia.CompletionItem { } } +@es5ClassCompat export class CompletionList { isIncomplete?: boolean; @@ -900,16 +913,7 @@ export enum DebugConsoleMode { MergeWithParent = 1 } -export class DiagnosticRelatedInformation { - location: Location; - message: string; - - constructor(location: Location, message: string) { - this.location = location; - this.message = message; - } -} - +@es5ClassCompat export class Location { uri: URI; range: Range; @@ -935,6 +939,17 @@ export class Location { } } +@es5ClassCompat +export class DiagnosticRelatedInformation { + location: Location; + message: string; + + constructor(location: Location, message: string) { + this.location = location; + this.message = message; + } +} + export enum DiagnosticTag { Unnecessary = 1, } @@ -943,6 +958,7 @@ export enum CompletionItemTag { Deprecated = 1, } +@es5ClassCompat export class Diagnostic { range: Range; message: string; @@ -970,6 +986,7 @@ export enum MarkerTag { Unnecessary = 1, } +@es5ClassCompat export class ParameterInformation { label: string | [number, number]; documentation?: string | MarkdownString; @@ -980,6 +997,7 @@ export class ParameterInformation { } } +@es5ClassCompat export class SignatureInformation { label: string; documentation?: string | MarkdownString; @@ -998,6 +1016,7 @@ export enum SignatureHelpTriggerKind { ContentChange = 3, } +@es5ClassCompat export class SignatureHelp { signatures: SignatureInformation[]; activeSignature: number; @@ -1008,6 +1027,7 @@ export class SignatureHelp { } } +@es5ClassCompat export class Hover { public contents: MarkdownString[] | theia.MarkedString[]; @@ -1037,6 +1057,7 @@ export enum DocumentHighlightKind { Write = 2 } +@es5ClassCompat export class DocumentHighlight { public range: Range; @@ -1053,6 +1074,7 @@ export class DocumentHighlight { export type Definition = Location | Location[]; +@es5ClassCompat export class DocumentLink { range: Range; @@ -1073,6 +1095,7 @@ export class DocumentLink { } } +@es5ClassCompat export class CodeLens { range: Range; @@ -1112,6 +1135,7 @@ export enum CodeActionTriggerKind { Automatic = 2, } +@es5ClassCompat export class CodeActionKind { private static readonly sep = '.'; @@ -1148,6 +1172,7 @@ export enum TextDocumentSaveReason { FocusOut = 3 } +@es5ClassCompat export class CodeAction { title: string; @@ -1200,6 +1225,7 @@ export interface FileTextEdit { metadata?: WorkspaceEditMetadata; } +@es5ClassCompat export class WorkspaceEdit implements theia.WorkspaceEdit { private _edits = new Array<FileOperation | FileTextEdit | undefined>(); @@ -1312,6 +1338,7 @@ export class WorkspaceEdit implements theia.WorkspaceEdit { } } +@es5ClassCompat export class TreeItem { label?: string | theia.TreeItemLabel; @@ -1349,6 +1376,7 @@ export enum SymbolTag { Deprecated = 1 } +@es5ClassCompat export class SymbolInformation { static validate(candidate: SymbolInformation): void { @@ -1393,6 +1421,7 @@ export class SymbolInformation { } } +@es5ClassCompat export class DocumentSymbol { static validate(candidate: DocumentSymbol): void { @@ -1437,6 +1466,7 @@ export interface QuickInputButton { readonly tooltip?: string | undefined; } +@es5ClassCompat export class QuickInputButtons { static readonly Back: QuickInputButton = { iconPath: { @@ -1483,6 +1513,7 @@ export enum FileChangeType { Deleted = 3, } +@es5ClassCompat export class FileSystemError extends Error { static FileExists(messageOrUri?: string | URI): FileSystemError { @@ -1565,6 +1596,7 @@ export class ProgressOptions { this.location = location; } } + export class Progress<T> { /** * Report a progress update. @@ -1590,6 +1622,7 @@ export enum ProgressLocation { Notification = 15 } +@es5ClassCompat export class ProcessExecution { private executionProcess: string; private arguments: string[]; @@ -1669,6 +1702,7 @@ export enum TaskRevealKind { Never = 3 } +@es5ClassCompat export class ShellExecution { private shellCommandLine: string; private shellCommand: string | theia.ShellQuotedString; @@ -1762,6 +1796,7 @@ export class CustomExecution { } } +@es5ClassCompat export class TaskGroup { private groupId: string; @@ -1805,6 +1840,7 @@ export enum TaskScope { Workspace = 2 } +@es5ClassCompat export class Task { private taskDefinition: theia.TaskDefinition; private taskScope: theia.TaskScope.Global | theia.TaskScope.Workspace | theia.WorkspaceFolder | undefined; @@ -1994,6 +2030,7 @@ export class Task2 extends Task { detail?: string; } +@es5ClassCompat export class DebugAdapterExecutable { /** * The command or path of the debug adapter executable. @@ -2030,6 +2067,7 @@ export class DebugAdapterExecutable { /** * Represents a debug adapter running as a socket based server. */ +@es5ClassCompat export class DebugAdapterServer { /** @@ -2064,6 +2102,7 @@ export enum LogLevel { /** * The base class of all breakpoint types. */ +@es5ClassCompat export class Breakpoint { /** * Is breakpoint enabled. @@ -2105,6 +2144,7 @@ export class Breakpoint { /** * A breakpoint specified by a source location. */ +@es5ClassCompat export class SourceBreakpoint extends Breakpoint { /** * The source and line position of this breakpoint. @@ -2123,6 +2163,7 @@ export class SourceBreakpoint extends Breakpoint { /** * A breakpoint specified by a function name. */ +@es5ClassCompat export class FunctionBreakpoint extends Breakpoint { /** * The name of the function to which this breakpoint is attached. @@ -2138,6 +2179,7 @@ export class FunctionBreakpoint extends Breakpoint { } } +@es5ClassCompat export class Color { readonly red: number; readonly green: number; @@ -2152,6 +2194,7 @@ export class Color { } } +@es5ClassCompat export class ColorInformation { range: Range; color: Color; @@ -2168,6 +2211,7 @@ export class ColorInformation { } } +@es5ClassCompat export class ColorPresentation { label: string; textEdit?: TextEdit; @@ -2187,6 +2231,7 @@ export enum ColorFormat { HSL = 2 } +@es5ClassCompat export class FoldingRange { start: number; end: number; @@ -2205,6 +2250,7 @@ export enum FoldingRangeKind { Region = 3 } +@es5ClassCompat export class SelectionRange { range: Range; @@ -2310,6 +2356,7 @@ export class CallHierarchyOutgoingCall { } } +@es5ClassCompat export class TimelineItem { timestamp: number; label: string; @@ -2340,7 +2387,6 @@ export class SemanticTokensLegend { function isStrArrayOrUndefined(arg: any): arg is string[] | undefined { return ((typeof arg === 'undefined') || (Array.isArray(arg) && arg.every(e => typeof e === 'string'))); } - export class SemanticTokensBuilder { private _prevLine: number; diff --git a/packages/plugin/src/theia.d.ts b/packages/plugin/src/theia.d.ts index 61e644b94653c..5d55b6507c058 100644 --- a/packages/plugin/src/theia.d.ts +++ b/packages/plugin/src/theia.d.ts @@ -21,6 +21,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import './theia-proposed'; +import { es5ClassCompat } from '../common/types'; /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable max-len */ @@ -230,6 +231,7 @@ declare module '@theia/plugin' { /** * Represents a line and character position. */ + export class Position { /** @@ -340,6 +342,7 @@ declare module '@theia/plugin' { /** * Pair of two positions. */ + export class Range { /** * Start position. @@ -425,6 +428,7 @@ declare module '@theia/plugin' { /** * Represents a text selection in an editor. */ + export class Selection extends Range { /** @@ -465,6 +469,7 @@ declare module '@theia/plugin' { * A snippet string is a template which allows to insert text * and to control the editor cursor when insertion happens. */ + export class SnippetString { /** @@ -719,6 +724,7 @@ declare module '@theia/plugin' { * The MarkdownString represents human readable text that supports formatting via the * markdown syntax. Standard markdown is supported, also tables, but no embedded html. */ + export class MarkdownString { /** @@ -2583,6 +2589,7 @@ declare module '@theia/plugin' { * A reference to one of the workbench colors. * Using a theme color is preferred over a custom color as it gives theme authors and users the possibility to change the color. */ + export class ThemeColor { /** * Creates a reference to a theme color. @@ -2594,6 +2601,7 @@ declare module '@theia/plugin' { * A reference to a named icon. Currently only [File](#ThemeIcon.File) and [Folder](#ThemeIcon.Folder) are supported. * Using a theme icon is preferred over a custom icon as it gives theme authors the possibility to change the icons. */ + export class ThemeIcon { /** * Reference to a icon representing a file. The icon is taken from the current file icon theme or a placeholder icon. @@ -4602,6 +4610,7 @@ declare module '@theia/plugin' { /** * Represents a color theme. */ + export interface ColorTheme { /** * The kind of this color theme: light, dark or high contrast. @@ -4612,6 +4621,7 @@ declare module '@theia/plugin' { /** * Predefined buttons for [QuickPick](#QuickPick) and [InputBox](#InputBox). */ + export class QuickInputButtons { /** @@ -5340,6 +5350,7 @@ declare module '@theia/plugin' { * This class has factory methods for common error-cases, like `FileNotFound` when * a file or folder doesn't exist, use them like so: `throw vscode.FileSystemError.FileNotFound(someUri);` */ + export class FileSystemError extends Error { /** @@ -6181,6 +6192,7 @@ declare module '@theia/plugin' { * relatively to a base path. The base path can either be an absolute file path * or a [workspace folder](#WorkspaceFolder). */ + export class RelativePattern { /** @@ -6403,6 +6415,7 @@ declare module '@theia/plugin' { * Represents a parameter of a callable-signature. A parameter can * have a label and a doc-comment. */ + export class ParameterInformation { /** @@ -6432,6 +6445,7 @@ declare module '@theia/plugin' { * can have a label, like a function-name, a doc-comment, and * a set of parameters. */ + export class SignatureInformation { /** @@ -6465,6 +6479,7 @@ declare module '@theia/plugin' { * callable. There can be multiple signatures but only one * active and only one active parameter. */ + export class SignatureHelp { /** @@ -6663,6 +6678,7 @@ declare module '@theia/plugin' { * Represents information about programming constructs like variables, classes, * interfaces etc. */ + export class SymbolInformation { /** @@ -6716,6 +6732,7 @@ declare module '@theia/plugin' { * symbols can be hierarchical and they have two ranges: one that encloses its definition and one that points to * its most interesting range, e.g. the range of an identifier. */ + export class DocumentSymbol { /** @@ -6783,6 +6800,7 @@ declare module '@theia/plugin' { /** * Represents a color in RGBA space. */ + export class Color { /** @@ -6819,6 +6837,7 @@ declare module '@theia/plugin' { /** * Represents a color range from a document. */ + export class ColorInformation { /** @@ -6848,6 +6867,7 @@ declare module '@theia/plugin' { * the constant `Red`, the hex-value `#ff0000`, or in rgba and hsla forms. In csharp other representations * apply, e.g `System.Drawing.Color.Red`. */ + export class ColorPresentation { /** @@ -6910,6 +6930,7 @@ declare module '@theia/plugin' { * A line based folding range. To be valid, start and end line must a zero or larger and smaller than the number of lines in the document. * Invalid ranges will be ignored. */ + export class FoldingRange { /** @@ -7020,6 +7041,7 @@ declare module '@theia/plugin' { * A text edit represents edits that should be applied * to a document. */ + export class TextEdit { /** @@ -7141,6 +7163,7 @@ declare module '@theia/plugin' { * @see [CompletionItemProvider.provideCompletionItems](#CompletionItemProvider.provideCompletionItems) * @see [CompletionItemProvider.resolveCompletionItem](#CompletionItemProvider.resolveCompletionItem) */ + export class CompletionItem { /** @@ -7274,6 +7297,7 @@ declare module '@theia/plugin' { * Represents a collection of [completion items](#CompletionItem) to be presented * in the editor. */ + export class CompletionList<T extends CompletionItem = CompletionItem> { /** @@ -7344,6 +7368,7 @@ declare module '@theia/plugin' { * Represents a location inside a resource, such as a line * inside a text file. */ + export class Location { /** @@ -7450,6 +7475,7 @@ declare module '@theia/plugin' { * Represents a diagnostic, such as a compiler error or warning. Diagnostic objects * are only valid in the scope of a file. */ + export class Diagnostic { /** @@ -7585,6 +7611,7 @@ declare module '@theia/plugin' { * A CodeAction must set either [`edit`](#edit) and/or a [`command`](#command). * If both are supplied, the `edit` is applied first, then the command is executed. */ + export class CodeAction { /** @@ -7740,6 +7767,7 @@ declare module '@theia/plugin' { * Code action kinds are used by VS Code for UI elements such as the refactoring context menu. Users * can also trigger code actions with a specific kind with the `editor.action.codeAction` command. */ + export class CodeActionKind { /** * Empty kind. @@ -7897,6 +7925,7 @@ declare module '@theia/plugin' { * * Use the [applyEdit](#workspace.applyEdit)-function to apply a workspace edit. */ + export class WorkspaceEdit { /** @@ -8098,6 +8127,7 @@ declare module '@theia/plugin' { * A document link is a range in a text document that links to an internal or external resource, like another * text document or a web site. */ + export class DocumentLink { /** @@ -8859,6 +8889,7 @@ declare module '@theia/plugin' { * A hover represents additional information for a symbol or word. Hovers are * rendered in a tooltip-like widget. */ + export class Hover { /** @@ -8928,6 +8959,7 @@ declare module '@theia/plugin' { * special attention. Usually a document highlight is visualized by changing * the background color of its range. */ + export class DocumentHighlight { /** @@ -9434,6 +9466,7 @@ declare module '@theia/plugin' { /** * Represents a debug adapter running as a socket based server. */ + export class DebugAdapterServer { /** @@ -9518,6 +9551,7 @@ declare module '@theia/plugin' { /** * The base class of all breakpoint types. */ + export class Breakpoint { /** * The unique ID of the breakpoint. @@ -9546,6 +9580,7 @@ declare module '@theia/plugin' { /** * A breakpoint specified by a source location. */ + export class SourceBreakpoint extends Breakpoint { /** * The source and line position of this breakpoint. @@ -9561,6 +9596,7 @@ declare module '@theia/plugin' { /** * A breakpoint specified by a function name. */ + export class FunctionBreakpoint extends Breakpoint { /** * The name of the function to which this breakpoint is attached. @@ -10621,6 +10657,7 @@ declare module '@theia/plugin' { * A selection range represents a part of a selection hierarchy. A selection range * may have a parent selection range that contains it. */ + export class SelectionRange { /** diff --git a/packages/search-in-workspace/src/browser/search-in-workspace-result-tree-widget.tsx b/packages/search-in-workspace/src/browser/search-in-workspace-result-tree-widget.tsx index 772067f8d2c49..a039597c26e13 100644 --- a/packages/search-in-workspace/src/browser/search-in-workspace-result-tree-widget.tsx +++ b/packages/search-in-workspace/src/browser/search-in-workspace-result-tree-widget.tsx @@ -1074,7 +1074,7 @@ export class SearchInWorkspaceResultTreeWidget extends TreeWidget { protected getExcludeGlobs(excludeOptions?: string[]): string[] { const excludePreferences = this.filesystemPreferences['files.exclude']; const excludePreferencesGlobs = Object.keys(excludePreferences).filter(key => !!excludePreferences[key]); - return [...new Set([...excludePreferencesGlobs, ...excludeOptions])]; + return [...new Set([...excludePreferencesGlobs, ...excludeOptions || []])]; } /** diff --git a/packages/task/src/browser/task-problem-matcher-registry.ts b/packages/task/src/browser/task-problem-matcher-registry.ts index 179639812d496..651ad7ba60a78 100644 --- a/packages/task/src/browser/task-problem-matcher-registry.ts +++ b/packages/task/src/browser/task-problem-matcher-registry.ts @@ -144,7 +144,11 @@ export class ProblemMatcherRegistry { patterns.push(ProblemPattern.fromProblemPatternContribution(matcher.pattern)); } } else if (baseMatcher) { - patterns.push(...baseMatcher.pattern); + if (Array.isArray(baseMatcher.pattern)) { + patterns.push(...baseMatcher.pattern); + } else { + patterns.push(baseMatcher.pattern); + } } let deprecated: boolean | undefined = matcher.deprecated; diff --git a/packages/workspace/src/browser/workspace-uri-contribution.spec.ts b/packages/workspace/src/browser/workspace-uri-contribution.spec.ts index 22b524d2e4cd4..46661f03372af 100644 --- a/packages/workspace/src/browser/workspace-uri-contribution.spec.ts +++ b/packages/workspace/src/browser/workspace-uri-contribution.spec.ts @@ -46,7 +46,7 @@ beforeEach(() => { container = new Container(); container.bind(ApplicationShell).toConstantValue({ currentChanged: new Signal({}), - widgets: () => [] + widgets: [] // eslint-disable-next-line @typescript-eslint/no-explicit-any } as any); container.bind(WidgetManager).toConstantValue({