diff options
Diffstat (limited to 'src/vs/workbench/api/common/extHostTypes.ts')
-rw-r--r-- | src/vs/workbench/api/common/extHostTypes.ts | 166 |
1 files changed, 78 insertions, 88 deletions
diff --git a/src/vs/workbench/api/common/extHostTypes.ts b/src/vs/workbench/api/common/extHostTypes.ts index ce30f68d26e..e50faecd595 100644 --- a/src/vs/workbench/api/common/extHostTypes.ts +++ b/src/vs/workbench/api/common/extHostTypes.ts @@ -10,7 +10,7 @@ import { MarkdownString as BaseMarkdownString } from 'vs/base/common/htmlContent import { ResourceMap } from 'vs/base/common/map'; import { Mimes, normalizeMimeType } from 'vs/base/common/mime'; import { nextCharLength } from 'vs/base/common/strings'; -import { isArray, isStringArray } from 'vs/base/common/types'; +import { isArray, isString, isStringArray } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import { generateUuid } from 'vs/base/common/uuid'; import { FileSystemProviderErrorCode, markAsFileSystemProviderError } from 'vs/platform/files/common/files'; @@ -19,16 +19,6 @@ import { IRelativePatternDto } from 'vs/workbench/api/common/extHost.protocol'; import { CellEditType, ICellPartialMetadataEdit, IDocumentMetadataEdit } from 'vs/workbench/contrib/notebook/common/notebookCommon'; import type * as vscode from 'vscode'; -function es5ClassCompat(target: Function): any { - ///@ts-expect-error - function _() { return Reflect.construct(target, arguments, this.constructor); } - Object.defineProperty(_, 'name', Object.getOwnPropertyDescriptor(target, 'name')!); - Object.setPrototypeOf(_, target); - Object.setPrototypeOf(_.prototype, target.prototype); - return _; -} - -@es5ClassCompat export class Disposable { static from(...inDisposables: { dispose(): any }[]): Disposable { @@ -59,7 +49,6 @@ export class Disposable { } } -@es5ClassCompat export class Position { static Min(...positions: Position[]): Position { @@ -240,7 +229,6 @@ export class Position { } } -@es5ClassCompat export class Range { static isRange(thing: any): thing is vscode.Range { @@ -386,7 +374,6 @@ export class Range { } } -@es5ClassCompat export class Selection extends Range { static isSelection(thing: any): thing is Selection { @@ -515,7 +502,6 @@ export enum EnvironmentVariableMutatorType { Prepend = 3 } -@es5ClassCompat export class TextEdit { static isTextEdit(thing: any): thing is TextEdit { @@ -549,7 +535,6 @@ export class TextEdit { protected _range: Range; protected _newText: string | null; - newText2?: string | SnippetString; protected _newEol?: EndOfLine; get range(): Range { @@ -599,7 +584,6 @@ export class TextEdit { } } -@es5ClassCompat export class NotebookEdit implements vscode.NotebookEdit { static isNotebookCellEdit(thing: any): thing is NotebookEdit { @@ -660,6 +644,7 @@ export const enum FileEditType { Text = 2, Cell = 3, CellReplace = 5, + Snippet = 6, } export interface IFileOperation { @@ -677,6 +662,14 @@ export interface IFileTextEdit { metadata?: vscode.WorkspaceEditEntryMetadata; } +export interface IFileSnippetTextEdit { + _type: FileEditType.Snippet; + uri: URI; + range: vscode.Range; + edit: vscode.SnippetString; + metadata?: vscode.WorkspaceEditEntryMetadata; +} + export interface IFileCellEdit { _type: FileEditType.Cell; uri: URI; @@ -695,9 +688,8 @@ export interface ICellEdit { } -type WorkspaceEditEntry = IFileOperation | IFileTextEdit | IFileCellEdit | ICellEdit; +type WorkspaceEditEntry = IFileOperation | IFileTextEdit | IFileSnippetTextEdit | IFileCellEdit | ICellEdit; -@es5ClassCompat export class WorkspaceEdit implements vscode.WorkspaceEdit { private readonly _edits: WorkspaceEditEntry[] = []; @@ -762,8 +754,12 @@ export class WorkspaceEdit implements vscode.WorkspaceEdit { // --- text - replace(uri: URI, range: Range, newText: string, metadata?: vscode.WorkspaceEditEntryMetadata): void { - this._edits.push({ _type: FileEditType.Text, uri, edit: new TextEdit(range, newText), metadata }); + replace(uri: URI, range: Range, newText: string | vscode.SnippetString, metadata?: vscode.WorkspaceEditEntryMetadata): void { + if (typeof newText === 'string') { + this._edits.push({ _type: FileEditType.Text, uri, edit: new TextEdit(range, newText), metadata }); + } else { + this._edits.push({ _type: FileEditType.Snippet, uri, range, edit: newText, metadata }); + } } insert(resource: URI, position: Position, newText: string, metadata?: vscode.WorkspaceEditEntryMetadata): void { @@ -844,7 +840,6 @@ export class WorkspaceEdit implements vscode.WorkspaceEdit { } } -@es5ClassCompat export class SnippetString { static isSnippetString(thing: any): thing is SnippetString { @@ -951,7 +946,6 @@ export enum DiagnosticSeverity { Error = 0 } -@es5ClassCompat export class Location { static isLocation(thing: any): thing is vscode.Location { @@ -990,7 +984,6 @@ export class Location { } } -@es5ClassCompat export class DiagnosticRelatedInformation { static is(thing: any): thing is DiagnosticRelatedInformation { @@ -1024,7 +1017,6 @@ export class DiagnosticRelatedInformation { } } -@es5ClassCompat export class Diagnostic { range: Range; @@ -1075,7 +1067,6 @@ export class Diagnostic { } } -@es5ClassCompat export class Hover { public contents: (vscode.MarkdownString | vscode.MarkedString)[]; @@ -1103,7 +1094,6 @@ export enum DocumentHighlightKind { Write = 2 } -@es5ClassCompat export class DocumentHighlight { range: Range; @@ -1155,7 +1145,6 @@ export enum SymbolTag { Deprecated = 1, } -@es5ClassCompat export class SymbolInformation { static validate(candidate: SymbolInformation): void { @@ -1200,7 +1189,6 @@ export class SymbolInformation { } } -@es5ClassCompat export class DocumentSymbol { static validate(candidate: DocumentSymbol): void { @@ -1239,7 +1227,6 @@ export enum CodeActionTriggerKind { Automatic = 2, } -@es5ClassCompat export class CodeAction { title: string; @@ -1260,7 +1247,6 @@ export class CodeAction { } -@es5ClassCompat export class CodeActionKind { private static readonly sep = '.'; @@ -1300,7 +1286,6 @@ CodeActionKind.Source = CodeActionKind.Empty.append('source'); CodeActionKind.SourceOrganizeImports = CodeActionKind.Source.append('organizeImports'); CodeActionKind.SourceFixAll = CodeActionKind.Source.append('fixAll'); -@es5ClassCompat export class SelectionRange { range: Range; @@ -1367,7 +1352,6 @@ export enum LanguageStatusSeverity { } -@es5ClassCompat export class CodeLens { range: Range; @@ -1384,7 +1368,6 @@ export class CodeLens { } } -@es5ClassCompat export class MarkdownString implements vscode.MarkdownString { readonly #delegate: BaseMarkdownString; @@ -1455,7 +1438,6 @@ export class MarkdownString implements vscode.MarkdownString { } } -@es5ClassCompat export class ParameterInformation { label: string | [number, number]; @@ -1467,7 +1449,6 @@ export class ParameterInformation { } } -@es5ClassCompat export class SignatureInformation { label: string; @@ -1482,7 +1463,6 @@ export class SignatureInformation { } } -@es5ClassCompat export class SignatureHelp { signatures: SignatureInformation[]; @@ -1506,7 +1486,6 @@ export enum InlayHintKind { Parameter = 2, } -@es5ClassCompat export class InlayHintLabelPart { value: string; @@ -1519,7 +1498,6 @@ export class InlayHintLabelPart { } } -@es5ClassCompat export class InlayHint implements vscode.InlayHint { label: string | InlayHintLabelPart[]; @@ -1588,7 +1566,6 @@ export interface CompletionItemLabel { description?: string; } -@es5ClassCompat export class CompletionItem implements vscode.CompletionItem { label: string | CompletionItemLabel; @@ -1627,7 +1604,6 @@ export class CompletionItem implements vscode.CompletionItem { } } -@es5ClassCompat export class CompletionList { isIncomplete?: boolean; @@ -1639,7 +1615,6 @@ export class CompletionList { } } -@es5ClassCompat export class InlineSuggestion implements vscode.InlineCompletionItem { filterText?: string; @@ -1654,7 +1629,6 @@ export class InlineSuggestion implements vscode.InlineCompletionItem { } } -@es5ClassCompat export class InlineSuggestionList implements vscode.InlineCompletionList { items: vscode.InlineCompletionItemNew[]; @@ -1665,7 +1639,6 @@ export class InlineSuggestionList implements vscode.InlineCompletionList { } } -@es5ClassCompat export class InlineSuggestionNew implements vscode.InlineCompletionItemNew { insertText: string; range?: Range; @@ -1678,7 +1651,6 @@ export class InlineSuggestionNew implements vscode.InlineCompletionItemNew { } } -@es5ClassCompat export class InlineSuggestionsNew implements vscode.InlineCompletionListNew { items: vscode.InlineCompletionItemNew[]; @@ -1772,7 +1744,6 @@ export namespace TextEditorSelectionChangeKind { } } -@es5ClassCompat export class DocumentLink { range: Range; @@ -1793,7 +1764,6 @@ export class DocumentLink { } } -@es5ClassCompat export class Color { readonly red: number; readonly green: number; @@ -1810,7 +1780,6 @@ export class Color { export type IColorFormat = string | { opaque: string; transparent: string }; -@es5ClassCompat export class ColorInformation { range: Range; @@ -1828,7 +1797,6 @@ export class ColorInformation { } } -@es5ClassCompat export class ColorPresentation { label: string; textEdit?: TextEdit; @@ -1854,6 +1822,14 @@ export enum SourceControlInputBoxValidationType { Information = 2 } +export enum TerminalExitReason { + Unknown = 0, + Shutdown = 1, + Process = 2, + User = 3, + Extension = 4 +} + export class TerminalLink implements vscode.TerminalLink { constructor( public startIndex: number, @@ -1903,7 +1879,6 @@ export enum TaskPanelKind { New = 3 } -@es5ClassCompat export class TaskGroup implements vscode.TaskGroup { isDefault: boolean | undefined; @@ -1955,7 +1930,6 @@ function computeTaskExecutionId(values: string[]): string { return id; } -@es5ClassCompat export class ProcessExecution implements vscode.ProcessExecution { private _process: string; @@ -2026,7 +2000,6 @@ export class ProcessExecution implements vscode.ProcessExecution { } } -@es5ClassCompat export class ShellExecution implements vscode.ShellExecution { private _commandLine: string | undefined; @@ -2141,7 +2114,6 @@ export class CustomExecution implements vscode.CustomExecution { } } -@es5ClassCompat export class Task implements vscode.Task { private static ExtensionCallbackType: string = 'customExecution'; @@ -2398,16 +2370,64 @@ export enum ProgressLocation { Notification = 15 } -@es5ClassCompat export class TreeItem { label?: string | vscode.TreeItemLabel; resourceUri?: URI; - iconPath?: string | URI | { light: string | URI; dark: string | URI }; + iconPath?: string | URI | { light: string | URI; dark: string | URI } | ThemeIcon; command?: vscode.Command; contextValue?: string; tooltip?: string | vscode.MarkdownString; + static isTreeItem(thing: any): thing is TreeItem { + if (thing instanceof TreeItem) { + return true; + } + const treeItemThing = thing as vscode.TreeItem; + if (treeItemThing.label !== undefined && !isString(treeItemThing.label) && !(treeItemThing.label.label)) { + console.log('INVALID tree item, invalid label', treeItemThing.label); + return false; + } + if ((treeItemThing.id !== undefined) && !isString(treeItemThing.id)) { + console.log('INVALID tree item, invalid id', treeItemThing.id); + return false; + } + if ((treeItemThing.iconPath !== undefined) && !isString(treeItemThing.iconPath) && !URI.isUri(treeItemThing.iconPath) && !isString((treeItemThing.iconPath as vscode.ThemeIcon).id)) { + console.log('INVALID tree item, invalid iconPath', treeItemThing.iconPath); + return false; + } + if ((treeItemThing.description !== undefined) && !isString(treeItemThing.description) && (typeof treeItemThing.description !== 'boolean')) { + console.log('INVALID tree item, invalid description', treeItemThing.description); + return false; + } + if ((treeItemThing.resourceUri !== undefined) && !URI.isUri(treeItemThing.resourceUri)) { + console.log('INVALID tree item, invalid resourceUri', treeItemThing.resourceUri); + return false; + } + if ((treeItemThing.tooltip !== undefined) && !isString(treeItemThing.tooltip) && !(treeItemThing.tooltip instanceof MarkdownString)) { + console.log('INVALID tree item, invalid tooltip', treeItemThing.tooltip); + return false; + } + if ((treeItemThing.command !== undefined) && !treeItemThing.command.command) { + console.log('INVALID tree item, invalid command', treeItemThing.command); + return false; + } + if ((treeItemThing.collapsibleState !== undefined) && (treeItemThing.collapsibleState < TreeItemCollapsibleState.None) && (treeItemThing.collapsibleState > TreeItemCollapsibleState.Expanded)) { + console.log('INVALID tree item, invalid collapsibleState', treeItemThing.collapsibleState); + return false; + } + if ((treeItemThing.contextValue !== undefined) && !isString(treeItemThing.contextValue)) { + console.log('INVALID tree item, invalid contextValue', treeItemThing.contextValue); + return false; + } + if ((treeItemThing.accessibilityInformation !== undefined) && !treeItemThing.accessibilityInformation.label) { + console.log('INVALID tree item, invalid accessibilityInformation', treeItemThing.accessibilityInformation); + return false; + } + + return true; + } + constructor(label: string | vscode.TreeItemLabel, collapsibleState?: vscode.TreeItemCollapsibleState); constructor(resourceUri: URI, collapsibleState?: vscode.TreeItemCollapsibleState); constructor(arg1: string | vscode.TreeItemLabel | URI, public collapsibleState: vscode.TreeItemCollapsibleState = TreeItemCollapsibleState.None) { @@ -2426,7 +2446,6 @@ export enum TreeItemCollapsibleState { Expanded = 2 } -@es5ClassCompat export class DataTransferItem { async asString(): Promise<string> { @@ -2440,7 +2459,6 @@ export class DataTransferItem { constructor(public readonly value: any) { } } -@es5ClassCompat export class DataTransfer implements vscode.DataTransfer { #items = new Map<string, DataTransferItem[]>(); @@ -2482,7 +2500,6 @@ export class DataTransfer implements vscode.DataTransfer { } } -@es5ClassCompat export class DocumentDropEdit { insertText: string | SnippetString; @@ -2493,7 +2510,6 @@ export class DocumentDropEdit { } } -@es5ClassCompat export class DocumentPasteEdit { insertText: string | SnippetString; @@ -2504,7 +2520,6 @@ export class DocumentPasteEdit { } } -@es5ClassCompat export class ThemeIcon { static File: ThemeIcon; @@ -2522,7 +2537,6 @@ ThemeIcon.File = new ThemeIcon('file'); ThemeIcon.Folder = new ThemeIcon('folder'); -@es5ClassCompat export class ThemeColor { id: string; constructor(id: string) { @@ -2538,7 +2552,6 @@ export enum ConfigurationTarget { WorkspaceFolder = 3 } -@es5ClassCompat export class RelativePattern implements IRelativePattern { pattern: string; @@ -2592,7 +2605,6 @@ export class RelativePattern implements IRelativePattern { } } -@es5ClassCompat export class Breakpoint { private _id: string | undefined; @@ -2623,7 +2635,6 @@ export class Breakpoint { } } -@es5ClassCompat export class SourceBreakpoint extends Breakpoint { readonly location: Location; @@ -2636,7 +2647,6 @@ export class SourceBreakpoint extends Breakpoint { } } -@es5ClassCompat export class FunctionBreakpoint extends Breakpoint { readonly functionName: string; @@ -2646,7 +2656,6 @@ export class FunctionBreakpoint extends Breakpoint { } } -@es5ClassCompat export class DataBreakpoint extends Breakpoint { readonly label: string; readonly dataId: string; @@ -2664,7 +2673,6 @@ export class DataBreakpoint extends Breakpoint { } -@es5ClassCompat export class DebugAdapterExecutable implements vscode.DebugAdapterExecutable { readonly command: string; readonly args: string[]; @@ -2677,7 +2685,6 @@ export class DebugAdapterExecutable implements vscode.DebugAdapterExecutable { } } -@es5ClassCompat export class DebugAdapterServer implements vscode.DebugAdapterServer { readonly port: number; readonly host?: string; @@ -2688,13 +2695,11 @@ export class DebugAdapterServer implements vscode.DebugAdapterServer { } } -@es5ClassCompat export class DebugAdapterNamedPipeServer implements vscode.DebugAdapterNamedPipeServer { constructor(public readonly path: string) { } } -@es5ClassCompat export class DebugAdapterInlineImplementation implements vscode.DebugAdapterInlineImplementation { readonly implementation: vscode.DebugAdapter; @@ -2703,7 +2708,6 @@ export class DebugAdapterInlineImplementation implements vscode.DebugAdapterInli } } -@es5ClassCompat export class EvaluatableExpression implements vscode.EvaluatableExpression { readonly range: vscode.Range; readonly expression?: string; @@ -2724,7 +2728,6 @@ export enum InlineCompletionTriggerKindNew { Automatic = 1, } -@es5ClassCompat export class InlineValueText implements vscode.InlineValueText { readonly range: Range; readonly text: string; @@ -2735,7 +2738,6 @@ export class InlineValueText implements vscode.InlineValueText { } } -@es5ClassCompat export class InlineValueVariableLookup implements vscode.InlineValueVariableLookup { readonly range: Range; readonly variableName?: string; @@ -2748,7 +2750,6 @@ export class InlineValueVariableLookup implements vscode.InlineValueVariableLook } } -@es5ClassCompat export class InlineValueEvaluatableExpression implements vscode.InlineValueEvaluatableExpression { readonly range: Range; readonly expression?: string; @@ -2759,7 +2760,6 @@ export class InlineValueEvaluatableExpression implements vscode.InlineValueEvalu } } -@es5ClassCompat export class InlineValueContext implements vscode.InlineValueContext { readonly frameId: number; @@ -2779,7 +2779,6 @@ export enum FileChangeType { Deleted = 3, } -@es5ClassCompat export class FileSystemError extends Error { static FileExists(messageOrUri?: string | URI): FileSystemError { @@ -2829,7 +2828,6 @@ export class FileSystemError extends Error { //#region folding api -@es5ClassCompat export class FoldingRange { start: number; @@ -3119,7 +3117,6 @@ export enum DebugConsoleMode { //#endregion -@es5ClassCompat export class QuickInputButtons { static readonly Back: vscode.QuickInputButton = { iconPath: new ThemeIcon('arrow-left') }; @@ -3175,7 +3172,6 @@ export class FileDecoration { //#region Theming -@es5ClassCompat export class ColorTheme implements vscode.ColorTheme { constructor(public readonly kind: ColorThemeKind) { } @@ -3470,7 +3466,6 @@ export class NotebookRendererScript { //#region Timeline -@es5ClassCompat export class TimelineItem implements vscode.TimelineItem { constructor(public label: string, public timestamp: number) { } } @@ -3560,7 +3555,6 @@ export enum TestRunProfileKind { Coverage = 3, } -@es5ClassCompat export class TestRunRequest implements vscode.TestRunRequest { constructor( public readonly include: vscode.TestItem[] | undefined = undefined, @@ -3569,7 +3563,6 @@ export class TestRunRequest implements vscode.TestRunRequest { ) { } } -@es5ClassCompat export class TestMessage implements vscode.TestMessage { public expectedOutput?: string; public actualOutput?: string; @@ -3585,7 +3578,6 @@ export class TestMessage implements vscode.TestMessage { constructor(public message: string | vscode.MarkdownString) { } } -@es5ClassCompat export class TestTag implements vscode.TestTag { constructor(public readonly id: string) { } } @@ -3593,12 +3585,10 @@ export class TestTag implements vscode.TestTag { //#endregion //#region Test Coverage -@es5ClassCompat export class CoveredCount implements vscode.CoveredCount { constructor(public covered: number, public total: number) { } } -@es5ClassCompat export class FileCoverage implements vscode.FileCoverage { public static fromDetails(uri: vscode.Uri, details: vscode.DetailedCoverage[]): vscode.FileCoverage { const statements = new CoveredCount(0, 0); @@ -3642,7 +3632,6 @@ export class FileCoverage implements vscode.FileCoverage { ) { } } -@es5ClassCompat export class StatementCoverage implements vscode.StatementCoverage { constructor( public executionCount: number, @@ -3651,7 +3640,6 @@ export class StatementCoverage implements vscode.StatementCoverage { ) { } } -@es5ClassCompat export class BranchCoverage implements vscode.BranchCoverage { constructor( public executionCount: number, @@ -3659,7 +3647,6 @@ export class BranchCoverage implements vscode.BranchCoverage { ) { } } -@es5ClassCompat export class FunctionCoverage implements vscode.FunctionCoverage { constructor( public executionCount: number, @@ -3741,4 +3728,7 @@ export class NotebookDiffEditorTabInput { export class TerminalEditorTabInput { constructor() { } } +export class InteractiveWindowInput { + constructor(readonly uri: URI, readonly inputBoxUri: URI) { } +} //#endregion |