[clang-tools-extra] b4f46a9 - [clangd] Fixes colon escaping on Windows

Ilya Biryukov via cfe-commits cfe-commits at lists.llvm.org
Mon Nov 11 00:22:19 PST 2019


Author: Ilya Biryukov
Date: 2019-11-11T09:21:25+01:00
New Revision: b4f46a9bb42972e663f8b7b4d15e4c8ed3fecef4

URL: https://github.com/llvm/llvm-project/commit/b4f46a9bb42972e663f8b7b4d15e4c8ed3fecef4
DIFF: https://github.com/llvm/llvm-project/commit/b4f46a9bb42972e663f8b7b4d15e4c8ed3fecef4.diff

LOG: [clangd] Fixes colon escaping on Windows

vscode always escapes the colon on the file uri, which causes the semantic highlighting fails on windows.

fixes: https://github.com/clangd/clangd/issues/176

Added: 
    

Modified: 
    clang-tools-extra/clangd/clients/clangd-vscode/package-lock.json
    clang-tools-extra/clangd/clients/clangd-vscode/package.json
    clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clangd/clients/clangd-vscode/package-lock.json b/clang-tools-extra/clangd/clients/clangd-vscode/package-lock.json
index 0b59b2ffcc05..bbff586bbdca 100644
--- a/clang-tools-extra/clangd/clients/clangd-vscode/package-lock.json
+++ b/clang-tools-extra/clangd/clients/clangd-vscode/package-lock.json
@@ -1,6 +1,6 @@
 {
     "name": "vscode-clangd",
-    "version": "0.0.18",
+    "version": "0.0.19",
     "lockfileVersion": 1,
     "requires": true,
     "dependencies": {

diff  --git a/clang-tools-extra/clangd/clients/clangd-vscode/package.json b/clang-tools-extra/clangd/clients/clangd-vscode/package.json
index 03de7b3e58b0..05aafeb5f850 100644
--- a/clang-tools-extra/clangd/clients/clangd-vscode/package.json
+++ b/clang-tools-extra/clangd/clients/clangd-vscode/package.json
@@ -2,7 +2,7 @@
     "name": "vscode-clangd",
     "displayName": "vscode-clangd",
     "description": "Clang Language Server",
-    "version": "0.0.18",
+    "version": "0.0.19",
     "publisher": "llvm-vs-code-extensions",
     "homepage": "https://clang.llvm.org/extra/clangd.html",
     "engines": {

diff  --git a/clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts b/clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts
index 930079b1b2da..17517441bab9 100644
--- a/clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts
+++ b/clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts
@@ -114,17 +114,17 @@ export class SemanticHighlightingFeature implements vscodelc.StaticFeature {
     this.loadCurrentTheme();
     // Event handling for handling with TextDocuments/Editors lifetimes.
     this.subscriptions.push(vscode.window.onDidChangeVisibleTextEditors(
-        (editors: vscode.TextEditor[]) =>
-            editors.forEach((e) => this.highlighter.applyHighlights(
-                                e.document.uri.toString()))));
+        (editors: vscode.TextEditor[]) => editors.forEach(
+            (e) => this.highlighter.applyHighlights(e.document.uri))));
     this.subscriptions.push(vscode.workspace.onDidCloseTextDocument(
-        (doc) => this.highlighter.removeFileHighlightings(doc.uri.toString())));
+        (doc) => this.highlighter.removeFileHighlightings(doc.uri)));
   }
 
   handleNotification(params: SemanticHighlightingParams) {
     const lines: SemanticHighlightingLine[] = params.lines.map(
         (line) => ({line : line.line, tokens : decodeTokens(line.tokens)}));
-    this.highlighter.highlight(params.textDocument.uri, lines);
+    this.highlighter.highlight(vscode.Uri.parse(params.textDocument.uri),
+                               lines);
   }
   // Disposes of all disposable resources used by this object.
   public dispose() {
@@ -199,19 +199,21 @@ export class Highlighter {
   // Adds incremental highlightings to the current highlightings for the file
   // with fileUri. Also applies the highlightings to any associated
   // TextEditor(s).
-  public highlight(fileUri: string,
+  public highlight(fileUri: vscode.Uri,
                    highlightingLines: SemanticHighlightingLine[]) {
-    if (!this.files.has(fileUri)) {
-      this.files.set(fileUri, new Map());
+    const fileUriStr = fileUri.toString();
+    if (!this.files.has(fileUriStr)) {
+      this.files.set(fileUriStr, new Map());
     }
-    const fileHighlightings = this.files.get(fileUri);
+    const fileHighlightings = this.files.get(fileUriStr);
     highlightingLines.forEach((line) => fileHighlightings.set(line.line, line));
     this.applyHighlights(fileUri);
   }
 
   // Applies all the highlightings currently stored for a file with fileUri.
-  public applyHighlights(fileUri: string) {
-    if (!this.files.has(fileUri))
+  public applyHighlights(fileUri: vscode.Uri) {
+    const fileUriStr = fileUri.toString();
+    if (!this.files.has(fileUriStr))
       // There are no highlightings for this file, must return early or will get
       // out of bounds when applying the decorations below.
       return;
@@ -224,7 +226,7 @@ export class Highlighter {
     // TextEditorDecorationType is used per scope.
     const ranges = this.getDecorationRanges(fileUri);
     vscode.window.visibleTextEditors.forEach((e) => {
-      if (e.document.uri.toString() !== fileUri)
+      if (e.document.uri.toString() !== fileUriStr)
         return;
       this.decorationTypes.forEach((d, i) => e.setDecorations(d, ranges[i]));
     });
@@ -232,27 +234,27 @@ export class Highlighter {
 
   // Called when a text document is closed. Removes any highlighting entries for
   // the text document that was closed.
-  public removeFileHighlightings(fileUri: string) {
+  public removeFileHighlightings(fileUri: vscode.Uri) {
     // If there exists no entry the call to delete just returns false.
-    this.files.delete(fileUri);
+    this.files.delete(fileUri.toString());
   }
 
   // Gets the uris as strings for the currently visible text editors.
-  protected getVisibleTextEditorUris(): string[] {
-    return vscode.window.visibleTextEditors.map((e) =>
-                                                    e.document.uri.toString());
+  protected getVisibleTextEditorUris(): vscode.Uri[] {
+    return vscode.window.visibleTextEditors.map((e) => e.document.uri);
   }
 
   // Returns the ranges that should be used when decorating. Index i in the
   // range array has the decoration type at index i of this.decorationTypes.
-  protected getDecorationRanges(fileUri: string): vscode.Range[][] {
-    if (!this.files.has(fileUri))
+  protected getDecorationRanges(fileUri: vscode.Uri): vscode.Range[][] {
+    const fileUriStr = fileUri.toString();
+    if (!this.files.has(fileUriStr))
       // this.files should always have an entry for fileUri if we are here. But
       // if there isn't one we don't want to crash the extension. This is also
       // useful for tests.
       return [];
     const lines: SemanticHighlightingLine[] =
-        Array.from(this.files.get(fileUri).values());
+        Array.from(this.files.get(fileUriStr).values());
     const decorations: vscode.Range[][] = this.decorationTypes.map(() => []);
     lines.forEach((line) => {
       line.tokens.forEach((token) => {


        


More information about the cfe-commits mailing list