"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// The module 'vscode' contains the VS Code extensibility API
// Import the module and reference it with the alias vscode in your code below
const vscode = require("vscode");
const languageClient = require("vscode-languageclient");
const path = require("path");
const fs = require("fs");
// Defines the search path of your language server DLL. (.NET Core)
const languageServerPaths = [
    "../UpsilonLanguageServer/UpsilonLanguageServer/bin/Debug/netcoreapp2.1/UpsilonLanguageServer.dll",
    "./server/UpsilonLanguageServer.dll"
];
function activateLanguageServer(context) {
    // The server is implemented in an executable application.
    let serverModule = null;
    for (let p of languageServerPaths) {
        p = context.asAbsolutePath(p);
        // console.log(p);
        if (fs.existsSync(p)) {
            serverModule = p;
            break;
        }
    }
    if (!serverModule)
        throw new URIError("Cannot find the language server module.");
    let workPath = path.dirname(serverModule);
    console.log(`Use ${serverModule} as server module.`);
    console.log(`Work path: ${workPath}.`);
    // If the extension is launched in debug mode then the debug server options are used
    // Otherwise the run options are used
    let serverOptions = {
        run: {
            command: "dotnet",
            args: [serverModule],
            options: { cwd: workPath }
        },
        debug: {
            command: "dotnet",
            args: [serverModule, "--debug"],
            options: { cwd: workPath }
        }
    };
    // Options to control the language client
    let clientOptions = {
        // Register the server for Upsilon documents
        documentSelector: [
            {
                language: "upsilon",
                scheme: "file"
            }
        ],
        synchronize: {
            configurationSection: "upsilonLanguageServer",
            // Notify the server about file changes to '.clientrc files contain in the workspace
            fileEvents: [
                vscode.workspace.createFileSystemWatcher("**/*.clientrc"),
                vscode.workspace.createFileSystemWatcher("**/*.yup"),
                vscode.workspace.createFileSystemWatcher("**/*.lua"),
                vscode.workspace.createFileSystemWatcher("**/.upsilon/*.json")
            ]
        }
    };
    // Create the language client and start the client.
    let client = new languageClient.LanguageClient("upsilonLanguageServer", "Upsilon Language Server", serverOptions, clientOptions);
    let disposable = client.start();
    // Push the disposable to the context's subscriptions so that the
    // client can be deactivated on extension deactivation
    context.subscriptions.push(disposable);
}
// this method is called when your extension is activated
// your extension is activated the very first time the command is executed
function activate(context) {
    console.log("Upsilon extension is now activated.");
    activateLanguageServer(context);
}
exports.activate = activate;
// this method is called when your extension is deactivated
function deactivate() { }
exports.deactivate = deactivate;
//# sourceMappingURL=extension.js.map