sprotty-vscode
TypeScript icon, indicating that this package has built-in type declarations

1.0.0 • Public • Published

VS Code Integration for Sprotty

This library contains glue code for Sprotty diagrams in VS Code. The diagrams can optionally be backed by a language server.

A complete example with a Langium language server is available here.

Getting Started

As first step, you need to implement a webview that renders your diagrams using sprotty-vscode-webview. The webview package should bundle its code into a single JavaScript file (e.g. with Webpack) and put it into your VS Code extension package. The default implementation assumes that the webview code is available at the path pack/webview.js relative to the extension folder.

Then you can instantiate a WebviewPanelManager in the activate hook of your extension:

export function activate(context: vscode.ExtensionContext) {
    const webviewPanelManager = new WebviewPanelManager({
        extensionUri: context.extensionUri,
        defaultDiagramType: 'mydiagram',
        supportedFileExtensions: ['.mydiagram']
    });
}

This service manages webviews created as webview panels in the main editor area of VS Code. Alternatively, you can use SprottyEditorProvider to get a custom editor provider that can be directly associated with a file type, or SprottyViewProvider to get a webview view provider that can render diagrams in the view areas of VS Code, i.e. the bottom or side panels.

In case you are backing your diagrams with a language server, you should use LspWebviewPanelManager as superclass, or respectively LspSprottyEditorProvider or LspSprottyViewProvider. In this case you need to provide a language client configured to communicate with your language server.

Adding Commands

This library registers a few default commands that you can either execute programmatically or expose in the user interface with package.json entries as shown below. The registration happens by calling this function:

registerDefaultCommands(webviewPanelManager, context, { extensionPrefix: 'example' });

The first segment of each command id corresponds to the extensionPrefix option. The when clauses ending with -focused start with the Sprotty diagram type, which is usually determined by the defaultDiagramType option for WebviewPanelManager or the viewType option for SprottyEditorProvider and SprottyViewProvider.

{
  "contributes": {
    "commands": [
      {
        "command": "example.diagram.open",
        "title": "Open in Diagram",
        "category": "Example Diagram"
      },
      {
        "command": "example.diagram.fit",
        "title": "Fit to Screen",
        "category": "Example Diagram"
      },
      {
        "command": "example.diagram.center",
        "title": "Center selection",
        "category": "Example Diagram"
      },
      {
        "command": "example.diagram.export",
        "title": "Export diagram to SVG",
        "category": "Example Diagram"
      }
    ],
    "menus": {
      "commandPalette": [
        {
          "command": "example.diagram.open",
          "when": "editorLangId == 'example'"
        },
        {
          "command": "example.diagram.fit",
          "when": "example-diagram-focused"
        },
        {
          "command": "example.diagram.center",
          "when": "example-diagram-focused"
        },
        {
          "command": "example.diagram.export",
          "when": "example-diagram-focused"
        }
      ]
    }
  }
}

In addition to these command palette items, you can expose the commands in menus and keybindings.

Dependencies (4)

Dev Dependencies (2)

Package Sidebar

Install

npm i sprotty-vscode

Homepage

sprotty.org/

Weekly Downloads

339

Version

1.0.0

License

(EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0)

Unpacked Size

226 kB

Total Files

88

Last publish

Collaborators

  • dennis.huebner
  • tortmayr
  • sprotty-owner
  • spoenemann
  • eclipse-sprotty-bot