From 66cfa08c7cd5da538d19e3dd63cb490490fa3d08 Mon Sep 17 00:00:00 2001 From: Luis Arias Date: Mon, 10 May 2021 22:59:02 +0200 Subject: [PATCH] feat: Switch to vscode-url library to better support Windows paths (#62) * Use vscode-uri to simplify file uri parsing * windows specific handling of filename is no longer required * Package lock file updates * Still need to make sure driver letters are upper case on Windows * UNC paths don't require drive letter processing * Remove standard javascript extension specific config --- .../vscode/client/package-lock.json | 3 +-- editor-extensions/vscode/package-lock.json | 2 +- .../vscode/server/package-lock.json | 5 ++++ editor-extensions/vscode/server/package.json | 3 ++- editor-extensions/vscode/server/src/server.ts | 27 ++++++++----------- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/editor-extensions/vscode/client/package-lock.json b/editor-extensions/vscode/client/package-lock.json index 04f7734..66e89ee 100644 --- a/editor-extensions/vscode/client/package-lock.json +++ b/editor-extensions/vscode/client/package-lock.json @@ -1,8 +1,7 @@ { "name": "lsp-grain-client", - "version": "0.7.0", - "lockfileVersion": 1, "requires": true, + "lockfileVersion": 1, "dependencies": { "@types/vscode": { "version": "1.43.0", diff --git a/editor-extensions/vscode/package-lock.json b/editor-extensions/vscode/package-lock.json index 3145968..9bc0763 100644 --- a/editor-extensions/vscode/package-lock.json +++ b/editor-extensions/vscode/package-lock.json @@ -1,6 +1,6 @@ { "name": "vscode-grain", - "version": "0.10.1", + "version": "0.10.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/editor-extensions/vscode/server/package-lock.json b/editor-extensions/vscode/server/package-lock.json index 239bdb9..fb2f611 100644 --- a/editor-extensions/vscode/server/package-lock.json +++ b/editor-extensions/vscode/server/package-lock.json @@ -34,6 +34,11 @@ "version": "3.15.1", "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz", "integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ==" + }, + "vscode-uri": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.2.tgz", + "integrity": "sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA==" } } } diff --git a/editor-extensions/vscode/server/package.json b/editor-extensions/vscode/server/package.json index 822077f..f4a5827 100644 --- a/editor-extensions/vscode/server/package.json +++ b/editor-extensions/vscode/server/package.json @@ -12,7 +12,8 @@ }, "dependencies": { "vscode-languageserver": "^6.1.1", - "vscode-languageserver-textdocument": "^1.0.1" + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-uri": "^3.0.2" }, "scripts": {} } diff --git a/editor-extensions/vscode/server/src/server.ts b/editor-extensions/vscode/server/src/server.ts index 897c79c..019fda3 100644 --- a/editor-extensions/vscode/server/src/server.ts +++ b/editor-extensions/vscode/server/src/server.ts @@ -23,6 +23,7 @@ import { } from "vscode-languageserver"; import { TextDocument } from "vscode-languageserver-textdocument"; +import { URI } from 'vscode-uri'; import * as childProcess from "child_process"; @@ -34,22 +35,15 @@ const isWindows = /^win32/.test(process.platform); const needsCMD = isWindows && process.env.ComSpec && /cmd.exe$/.test(process.env.ComSpec); -const fileProtocol = "file://"; +const fileScheme = "file"; -function filenameFromUri(textDocumentUri: string) { - let filename = textDocumentUri.substring(fileProtocol.length); +function filenameFromUri(uri: URI) { + let filename = uri.fsPath; - // Fix for VSCode creating invalid URIs on Windows - // Ref https://github.com/microsoft/vscode-languageserver-node/issues/105 - if (isWindows) { - filename = filename.replace("%3A", ":"); - - // `grainc` doesn't understand a Windows path starting with `/C:/` as absolute, only `C:/` - if (filename.startsWith("/")) { - filename = filename.substring(1); - } - - // Packaged Grain doesn't understand lowercase drive letters + // Packaged Grain doesn't understand lowercase drive letters. + // If authority is not empty, then we can skip since this is + // a UNC path. + if (isWindows && uri.authority === '') { filename = filename[0].toUpperCase() + filename.substring(1); } @@ -281,8 +275,9 @@ async function validateWithCompiler(textDocumentUri: string): Promise { connection.console.log("Validating " + textDocumentUri); } - if (textDocumentUri.startsWith(fileProtocol)) { - let filename = filenameFromUri(textDocumentUri); + let uri = URI.parse(textDocumentUri); + if (uri.scheme == fileScheme) { + let filename = filenameFromUri(uri); let cliPath = settings.cliPath; // If we are executing Grain on Windows in `cmd.exe`,