src/Tools/VSCode/extension/src/extension.ts
author wenzelm
Mon, 02 Jan 2017 17:35:51 +0100
changeset 64755 ceb81f4928ea
parent 64753 79ed396709e4
child 64756 3cc892bd8f0f
permissions -rw-r--r--
support for Windows;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
64605
9c1173a7e4cb basic support for VSCode Language Server protocol;
wenzelm
parents:
diff changeset
     1
'use strict';
9c1173a7e4cb basic support for VSCode Language Server protocol;
wenzelm
parents:
diff changeset
     2
9c1173a7e4cb basic support for VSCode Language Server protocol;
wenzelm
parents:
diff changeset
     3
import * as vscode from 'vscode';
9c1173a7e4cb basic support for VSCode Language Server protocol;
wenzelm
parents:
diff changeset
     4
import * as path from 'path';
64755
ceb81f4928ea support for Windows;
wenzelm
parents: 64753
diff changeset
     5
import * as os from 'os';
64605
9c1173a7e4cb basic support for VSCode Language Server protocol;
wenzelm
parents:
diff changeset
     6
9c1173a7e4cb basic support for VSCode Language Server protocol;
wenzelm
parents:
diff changeset
     7
import { LanguageClient, LanguageClientOptions, SettingMonitor, ServerOptions, TransportKind }
9c1173a7e4cb basic support for VSCode Language Server protocol;
wenzelm
parents:
diff changeset
     8
  from 'vscode-languageclient';
9c1173a7e4cb basic support for VSCode Language Server protocol;
wenzelm
parents:
diff changeset
     9
9c1173a7e4cb basic support for VSCode Language Server protocol;
wenzelm
parents:
diff changeset
    10
9c1173a7e4cb basic support for VSCode Language Server protocol;
wenzelm
parents:
diff changeset
    11
export function activate(context: vscode.ExtensionContext)
9c1173a7e4cb basic support for VSCode Language Server protocol;
wenzelm
parents:
diff changeset
    12
{
64755
ceb81f4928ea support for Windows;
wenzelm
parents: 64753
diff changeset
    13
  let is_windows = os.type().startsWith("Windows")
ceb81f4928ea support for Windows;
wenzelm
parents: 64753
diff changeset
    14
ceb81f4928ea support for Windows;
wenzelm
parents: 64753
diff changeset
    15
  let cygwin_root = vscode.workspace.getConfiguration("isabelle").get<string>("cygwin_root");
64734
12558536d977 more configuration;
wenzelm
parents: 64605
diff changeset
    16
  let isabelle_home = vscode.workspace.getConfiguration("isabelle").get<string>("home");
64743
wenzelm
parents: 64735
diff changeset
    17
  let isabelle_args = vscode.workspace.getConfiguration("isabelle").get<Array<string>>("args");
64605
9c1173a7e4cb basic support for VSCode Language Server protocol;
wenzelm
parents:
diff changeset
    18
64755
ceb81f4928ea support for Windows;
wenzelm
parents: 64753
diff changeset
    19
  if (is_windows && cygwin_root == "")
ceb81f4928ea support for Windows;
wenzelm
parents: 64753
diff changeset
    20
    vscode.window.showErrorMessage("Missing user settings: isabelle.cygwin_root")
ceb81f4928ea support for Windows;
wenzelm
parents: 64753
diff changeset
    21
  else if (isabelle_home == "")
ceb81f4928ea support for Windows;
wenzelm
parents: 64753
diff changeset
    22
    vscode.window.showErrorMessage("Missing user settings: isabelle.home")
64753
79ed396709e4 more robust startup;
wenzelm
parents: 64750
diff changeset
    23
  else {
64755
ceb81f4928ea support for Windows;
wenzelm
parents: 64753
diff changeset
    24
    let isabelle_tool = isabelle_home.concat("/bin/isabelle")
ceb81f4928ea support for Windows;
wenzelm
parents: 64753
diff changeset
    25
    let run =
ceb81f4928ea support for Windows;
wenzelm
parents: 64753
diff changeset
    26
      is_windows ?
ceb81f4928ea support for Windows;
wenzelm
parents: 64753
diff changeset
    27
        { command: cygwin_root.concat("/bin/bash"),
ceb81f4928ea support for Windows;
wenzelm
parents: 64753
diff changeset
    28
          args: ["-l", isabelle_tool, "vscode_server"].concat(isabelle_args) } :
ceb81f4928ea support for Windows;
wenzelm
parents: 64753
diff changeset
    29
        { command: isabelle_tool,
ceb81f4928ea support for Windows;
wenzelm
parents: 64753
diff changeset
    30
          args: ["vscode_server"].concat(isabelle_args) };
ceb81f4928ea support for Windows;
wenzelm
parents: 64753
diff changeset
    31
64753
79ed396709e4 more robust startup;
wenzelm
parents: 64750
diff changeset
    32
    let server_options: ServerOptions =
79ed396709e4 more robust startup;
wenzelm
parents: 64750
diff changeset
    33
    {
79ed396709e4 more robust startup;
wenzelm
parents: 64750
diff changeset
    34
      run: run,
79ed396709e4 more robust startup;
wenzelm
parents: 64750
diff changeset
    35
      debug: {
79ed396709e4 more robust startup;
wenzelm
parents: 64750
diff changeset
    36
        command: run.command,
79ed396709e4 more robust startup;
wenzelm
parents: 64750
diff changeset
    37
        args: run.args.concat(["-L", path.join(context.extensionPath, "protocol.log")]) }
79ed396709e4 more robust startup;
wenzelm
parents: 64750
diff changeset
    38
    };
79ed396709e4 more robust startup;
wenzelm
parents: 64750
diff changeset
    39
    let client_options: LanguageClientOptions = {
79ed396709e4 more robust startup;
wenzelm
parents: 64750
diff changeset
    40
      documentSelector: ["isabelle", "isabelle-ml"]
79ed396709e4 more robust startup;
wenzelm
parents: 64750
diff changeset
    41
    };
64605
9c1173a7e4cb basic support for VSCode Language Server protocol;
wenzelm
parents:
diff changeset
    42
64753
79ed396709e4 more robust startup;
wenzelm
parents: 64750
diff changeset
    43
    let disposable = new LanguageClient("Isabelle", server_options, client_options, false).start();
79ed396709e4 more robust startup;
wenzelm
parents: 64750
diff changeset
    44
    context.subscriptions.push(disposable);
79ed396709e4 more robust startup;
wenzelm
parents: 64750
diff changeset
    45
    }
64605
9c1173a7e4cb basic support for VSCode Language Server protocol;
wenzelm
parents:
diff changeset
    46
}
9c1173a7e4cb basic support for VSCode Language Server protocol;
wenzelm
parents:
diff changeset
    47
9c1173a7e4cb basic support for VSCode Language Server protocol;
wenzelm
parents:
diff changeset
    48
export function deactivate() { }