VSCode Wrapper API

Pascal-wrapperi za VS Code Extension API.

Pregled

WvdS.VSCode.* unit-i nude tipski sigurne Pascal-wrappere za VS Code API.

sources/common/web/vscode/
├── VSCode.API.pas          # Bazni API
├── VSCode.Commands.pas     # Registracija naredbi
├── VSCode.Configuration.pas # Postavke
├── VSCode.Documents.pas    # Tekstualni dokumenti
├── VSCode.Languages.pas    # Jezične značajke
├── VSCode.WebView.pas      # WebView-paneli
├── VSCode.Window.pas       # Window-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);

Primjer:

uses VSCode.Commands;
 
procedure HandleMyCommand(Args: TJSValueDynArray);
begin
  ShowInfoMessage('Command executed!');
end;
 
// Kod aktivacije:
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

Poruke

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

Unos

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

Tekstualni dokumenti

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;

Eventi

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;

Uporaba:

initialization
  ExportActivateDeactivate(@Activate, @Deactivate);

Mapiranje tipova

VS Code (JS) Pascal
string string
number Double / Integer
boolean Boolean
undefined nil
object TJSObject
array TJSArray
Promise TJSPromise
Disposable TDisposable

Vidi također

Zuletzt geändert: 29.01.2026. u 22:31