From dd84ea5ee284a93961c1f441355a1c1995577f94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Koz=C5=82owski?= Date: Wed, 10 May 2023 17:19:48 +0200 Subject: [PATCH] Add the ability to restart the server (#18) --- package.json | 8 +++++- src/extension.ts | 28 +++++++++++---------- yarn.lock | 64 +++++++++++++++++++++++++++++------------------- 3 files changed, 61 insertions(+), 39 deletions(-) diff --git a/package.json b/package.json index 86e9bf5..b49bf4f 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,12 @@ "scopeName": "source.smithy", "path": "./smithy.tmGrammar.json" } + ], + "commands": [ + { + "command": "smithyLsp.restart", + "title": "Smithy LSP: Restart server" + } ] }, "scripts": { @@ -97,7 +103,7 @@ }, "dependencies": { "follow-redirects": "^1.14.9", - "vscode-languageclient": "^7.0.0" + "vscode-languageclient": "^8.0.0" }, "devDependencies": { "@types/follow-redirects": "^1.14.1", diff --git a/src/extension.ts b/src/extension.ts index 88b4525..feb4227 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -33,8 +33,6 @@ interface SmithyBuild { languageServer?: MavenCoordinate; } -let client: LanguageClient; - export function activate(context: ExtensionContext) { // Options to control the language client let clientOptions: LanguageClientOptions = { @@ -70,7 +68,7 @@ export function activate(context: ExtensionContext) { return Promise.all([ getCoursierExecutable(context.globalStoragePath), parseSmithyBuild(), - ]).then(([csBinaryPath, smithyBuild]) => { + ]).then(async ([csBinaryPath, smithyBuild]) => { console.info(`Resolved coursier's binary at ${csBinaryPath}`); const projectLanguageServerArtifact = smithyBuild?.languageServer; @@ -90,32 +88,36 @@ export function activate(context: ExtensionContext) { const startServer = { command: csBinaryPath, args }; - client = new LanguageClient( + let client = new LanguageClient( "smithyLsp", "Smithy LSP", startServer, clientOptions ); + // Start the client. This will also launch the server. + await client.start(); + const smithyContentProvider = createSmithyContentProvider(client); + + const registerRestartCommand = vscode.commands.registerCommand( + "smithyLsp.restart", + () => { + client.restart(); + } + ); + context.subscriptions.push( workspace.registerTextDocumentContentProvider( "smithyjar", smithyContentProvider ), - // Start the client. This will also launch the server - client.start() + client, + registerRestartCommand ); }); } -export function deactivate(): Thenable | undefined { - if (!client) { - return undefined; - } - return client.stop(); -} - function parseSmithyBuild(): Thenable { const folders = vscode.workspace.workspaceFolders; if (!folders || folders.length != 1) { diff --git a/yarn.lock b/yarn.lock index 83be729..44599a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -946,6 +946,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -2638,6 +2645,13 @@ minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.1.0: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" @@ -3097,10 +3111,10 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.4: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== +semver@^7.3.7: + version "7.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" + integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== dependencies: lru-cache "^6.0.0" @@ -3563,32 +3577,32 @@ vsce@^2.10.0: yauzl "^2.3.1" yazl "^2.2.2" -vscode-jsonrpc@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e" - integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg== +vscode-jsonrpc@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz#cb9989c65e219e18533cc38e767611272d274c94" + integrity sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw== -vscode-languageclient@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz#b505c22c21ffcf96e167799757fca07a6bad0fb2" - integrity sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg== +vscode-languageclient@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-8.1.0.tgz#3e67d5d841481ac66ddbdaa55b4118742f6a9f3f" + integrity sha512-GL4QdbYUF/XxQlAsvYWZRV3V34kOkpRlvV60/72ghHfsYFnS/v2MANZ9P6sHmxFcZKOse8O+L9G7Czg0NUWing== dependencies: - minimatch "^3.0.4" - semver "^7.3.4" - vscode-languageserver-protocol "3.16.0" + minimatch "^5.1.0" + semver "^7.3.7" + vscode-languageserver-protocol "3.17.3" -vscode-languageserver-protocol@3.16.0: - version "3.16.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821" - integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A== +vscode-languageserver-protocol@3.17.3: + version "3.17.3" + resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz#6d0d54da093f0c0ee3060b81612cce0f11060d57" + integrity sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA== dependencies: - vscode-jsonrpc "6.0.0" - vscode-languageserver-types "3.16.0" + vscode-jsonrpc "8.1.0" + vscode-languageserver-types "3.17.3" -vscode-languageserver-types@3.16.0: - version "3.16.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" - integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== +vscode-languageserver-types@3.17.3: + version "3.17.3" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz#72d05e47b73be93acb84d6e311b5786390f13f64" + integrity sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA== w3c-hr-time@^1.0.2: version "1.0.2"