====== VSCode Wrapper API ======
Pascal-Wrapper für die VS Code Extension API.
===== Übersicht =====
Die WvdS.VSCode.* Units bieten typsichere Pascal-Wrapper für die VS Code API.
sources/common/web/vscode/
├── VSCode.API.pas # Basis-API
├── VSCode.Commands.pas # Command-Registrierung
├── VSCode.Configuration.pas # Einstellungen
├── VSCode.Documents.pas # Text-Dokumente
├── VSCode.Languages.pas # Sprachfeatures
├── VSCode.WebView.pas # WebView-Panels
├── VSCode.Window.pas # Fenster-API
├── VSCode.Workspace.pas # Workspace-API
└── VSCode.ExtensionExports.pas # Entry-Point-Export
===== VSCode.Commands =====
==== RegisterCommand ====
function RegisterCommand(
const ACommand: string;
AHandler: TCommandHandler
): TDisposable;
type
TCommandHandler = procedure(Args: TJSValueDynArray);
**Beispiel:**
uses VSCode.Commands;
procedure HandleMyCommand(Args: TJSValueDynArray);
begin
ShowInfoMessage('Command executed!');
end;
// Bei Aktivierung:
Context.Subscriptions.Push(
RegisterCommand('myext.mycommand', @HandleMyCommand)
);
==== ExecuteCommand ====
function ExecuteCommand(const ACommand: string): TJSPromise;
function ExecuteCommand(
const ACommand: string;
const AArgs: array of JSValue
): TJSPromise;
===== VSCode.Window =====
==== Nachrichten ====
procedure ShowInfoMessage(const AMessage: string);
procedure ShowWarningMessage(const AMessage: string);
procedure ShowErrorMessage(const AMessage: string);
function ShowInfoMessageWithItems(
const AMessage: string;
const AItems: array of string
): TJSPromise; // Resolves to selected item or undefined
==== Input ====
function ShowInputBox(AOptions: TInputBoxOptions): TJSPromise;
type
TInputBoxOptions = record
Prompt: string;
PlaceHolder: string;
Value: string;
Password: Boolean;
end;
function ShowQuickPick(
const AItems: array of string;
AOptions: TQuickPickOptions
): TJSPromise;
type
TQuickPickOptions = record
PlaceHolder: string;
CanPickMany: Boolean;
end;
==== Output Channel ====
function CreateOutputChannel(const AName: string): TOutputChannel;
type
TOutputChannel = class
procedure Append(const AText: string);
procedure AppendLine(const AText: string);
procedure Show;
procedure Hide;
procedure Clear;
procedure Dispose;
end;
==== StatusBar ====
function CreateStatusBarItem(
AAlignment: TStatusBarAlignment;
APriority: Integer
): TStatusBarItem;
type
TStatusBarAlignment = (sbaLeft, sbaRight);
TStatusBarItem = class
Text: string;
Tooltip: string;
Command: string;
procedure Show;
procedure Hide;
procedure Dispose;
end;
===== VSCode.WebView =====
==== WebviewPanel ====
function CreateWebviewPanel(
const AViewType: string;
const ATitle: string;
AShowOptions: TViewColumn;
AOptions: TWebviewOptions
): TWebviewPanel;
type
TViewColumn = (vcOne, vcTwo, vcThree, vcBeside, vcActive);
TWebviewOptions = record
EnableScripts: Boolean;
LocalResourceRoots: TStringArray;
end;
TWebviewPanel = class
Webview: TWebview;
Title: string;
OnDidDispose: TEvent;
procedure Reveal;
procedure Dispose;
end;
TWebview = class
Html: string;
OnDidReceiveMessage: TMessageHandler;
procedure PostMessage(AMessage: TJSObject);
end;
===== VSCode.Documents =====
==== Text-Dokumente ====
function GetActiveTextEditor: TTextEditor;
function OpenTextDocument(const APath: string): TJSPromise;
type
TTextEditor = class
Document: TTextDocument;
Selection: TSelection;
procedure Edit(ACallback: TEditBuilderCallback);
end;
TTextDocument = class
Uri: string;
FileName: string;
LanguageId: string;
LineCount: Integer;
function GetText: string;
function LineAt(ALine: Integer): TTextLine;
end;
==== Events ====
procedure OnDidOpenTextDocument(AHandler: TDocumentHandler);
procedure OnDidSaveTextDocument(AHandler: TDocumentHandler);
procedure OnDidCloseTextDocument(AHandler: TDocumentHandler);
procedure OnDidChangeTextDocument(AHandler: TDocumentChangeHandler);
===== VSCode.Workspace =====
function GetWorkspaceFolders: TWorkspaceFolderArray;
function GetConfiguration(const ASection: string): TWorkspaceConfiguration;
type
TWorkspaceFolder = record
Uri: string;
Name: string;
Index: Integer;
end;
TWorkspaceConfiguration = class
function Get(const AKey: string; ADefault: JSValue): JSValue;
procedure Update(
const AKey: string;
AValue: JSValue;
ATarget: TConfigurationTarget
);
end;
===== VSCode.Languages =====
==== CompletionProvider ====
procedure RegisterCompletionItemProvider(
const ASelector: TDocumentSelector;
AProvider: TCompletionProvider;
const ATriggerCharacters: array of string
);
type
TCompletionProvider = class abstract
function ProvideCompletionItems(
ADocument: TTextDocument;
APosition: TPosition
): TCompletionList; virtual; abstract;
end;
==== HoverProvider ====
procedure RegisterHoverProvider(
const ASelector: TDocumentSelector;
AProvider: THoverProvider
);
type
THoverProvider = class abstract
function ProvideHover(
ADocument: TTextDocument;
APosition: TPosition
): THover; virtual; abstract;
end;
===== VSCode.ExtensionExports =====
procedure ExportActivateDeactivate(
AActivate: TActivateProc;
ADeactivate: TDeactivateProc
);
type
TActivateProc = procedure(AContext: TExtensionContext);
TDeactivateProc = procedure;
**Verwendung:**
initialization
ExportActivateDeactivate(@Activate, @Deactivate);
===== Typen-Mapping =====
^ VS Code (JS) ^ Pascal ^
| string | string |
| number | Double / Integer |
| boolean | Boolean |
| undefined | nil |
| object | TJSObject |
| array | TJSArray |
| Promise | TJSPromise |
| Disposable | TDisposable |
===== Siehe auch =====
* [[.:core-api|Core API]]
* [[.:meta-api|Meta API]]
* [[.:extension-entwicklung|Extension-Entwicklung]]