[PATCH] D66219: [clangd] Added a colorizer to the vscode extension.

Haojian Wu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 21 03:46:13 PDT 2019


hokein added inline comments.


================
Comment at: clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts:134
+  // The decoration datatypes used last time highlight was called.
+  private oldDecorations: DecorationRangePair[] = [];
+  // Apply decorations to the textEditor with uri and remove the old ones.
----------------
I'm not convinced that we need this interface.

With the current implementation (create new TextEditorDecorationTypes every time we do a re-highlighting), we'd need to save the old decorations in order to dispose them when applying new decorations. 

but if we create the TextEditorDecorationTypes at Initialization and reuse them in re-highlighting, then we probably don't need to depose them manually, the vscode [API](https://code.visualstudio.com/api/references/vscode-api#TextEditor.setDecorations) seems do that for us, so I think we'd better to do that in this patch as it would simplify the current implementation. 

So the APIs would looks like below. In unittest, we just override applyDecorations method.

```
class Highlighter {

public Initialize(themeRuleMatcher: ThemeRuleMatcher) {
   // build a scopeIndex => TextEditorDecorationTypes table
}

public highlight(fileUri: string, highlightings: SemanticHighlightingLine[]) {
   // update and patch the highlighting cache.
   // invoke getDecorations
   // invoke applyDecorations
}

protect applyDecorations(decorations...) {
   // invoke vscode API to apply the decorations.
}

private getDecorations(hightligtings...) {
}
``` 


================
Comment at: clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts:176
+  // recolorization for all current highlighters.
+  public updateThemeRuleMatcher(themeRuleMatcher: ThemeRuleMatcher) {
+    this.themeRuleMatcher = themeRuleMatcher;
----------------
I'd name it `Initialize`.


================
Comment at: clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts:182
+  // Called when clangd sends an incremental update of highlightings.
+  public setFileLines(uriString: string, tokens: SemanticHighlightingLine[]) {
+    // Patch in the new highlightings to the highlightings cache. If this is the
----------------
the name of this public API is confusing, the name indicates it just **sets**  the data, but actually it does more stuff like doing the highlightings.

I think we may get rid of this function, by just exposing the highlight API. see my above comment.


================
Comment at: clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts:199
+  // Applies all highlightings to the file with uri uriString.
+  private highlight(uriString: string) {
+    if (!this.highlighters.has(uriString)) {
----------------
could we name it fileUri? and elsewhere


================
Comment at: clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts:217
+    Array.from(this.files.get(uriString).values())
+        .forEach((line) => lines.push(line));
+    // Maps scopeIndexes -> the DecorationRangePair used for the scope.
----------------
nit: I think we can just do ` const lines: SemanticHighlightingLine[] =   Array.from(this.files.get(uriString).values())`?


================
Comment at: clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts:219
+    // Maps scopeIndexes -> the DecorationRangePair used for the scope.
+    const decorations: Map<number, DecorationRangePair> = new Map();
+    lines.forEach((line) => {
----------------
nit: pull out this part into a new method e.g. `getDecorations`


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D66219/new/

https://reviews.llvm.org/D66219





More information about the cfe-commits mailing list