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

Haojian Wu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 23 05:49:25 PDT 2019


hokein added a comment.

thanks, looks better now. Some more comments on the test code.



================
Comment at: clang-tools-extra/clangd/clients/clangd-vscode/src/extension.ts:3
 import * as vscodelc from 'vscode-languageclient';
-
+import * as SM from './semantic-highlighting';
 /**
----------------
I'd name it `semanticHighlighting`


================
Comment at: clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts:128
+  // DecorationTypes for the current theme that are used when highlighting.
+  private decorationTypes: vscode.TextEditorDecorationType[];
+  // The clangd TextMate scope lookup table.
----------------
nit: mention the index is the scopeIndex?


================
Comment at: clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts:135
+  // Update the themeRuleMatcher that is used when highlighting. Also triggers a
+  // recolorization for all current highlighters. Safe to call multiple times.
+  public initialize(themeRuleMatcher: ThemeRuleMatcher) {
----------------
nit: the comment is stale now.  I believe this function is only called whenever we reload a theme or at the first launch of the extension.


================
Comment at: clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts:137
+  public initialize(themeRuleMatcher: ThemeRuleMatcher) {
+    this.decorationTypes = this.scopeLookupTable.map((scopes) => {
+      const options: vscode.DecorationRenderOptions = {
----------------
if this.decorationsTypes is not empty (when this API is called multiple times), I think we need to call the `dispose` method to release the resource they hold.


================
Comment at: clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts:139
+      const options: vscode.DecorationRenderOptions = {
+        color : themeRuleMatcher.getBestThemeRule(scopes[0]).foreground,
+        // If the rangeBehavior is set to Open in any direction the
----------------
just want to confirm: if we fail to find a matched theme rule, we return an empty decoration. I think vscode just doesn't do anything on an empty color?


================
Comment at: clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts:157
+  // TextEditor(s).
+  public highlight(fileUri: string, tokens: SemanticHighlightingLine[]) {
+    if (!this.files.has(fileUri)) {
----------------
nit: tokens => HighlightingLines.


================
Comment at: clang-tools-extra/clangd/clients/clangd-vscode/src/semantic-highlighting.ts:190
+  protected applyHighlights(fileUri: string) {
+    if (!this.decorationTypes)
+      return;
----------------
nit: add a comment, we don't apply highlights when the class is not ready/initialized.


================
Comment at: clang-tools-extra/clangd/clients/clangd-vscode/test/semantic-highlighting.test.ts:80
+      }
+      getDecorationRanges(fileUri: string) {
+        return super.getDecorationRanges(fileUri);
----------------
could you add a comment you override this so that it can be access from the test?


================
Comment at: clang-tools-extra/clangd/clients/clangd-vscode/test/semantic-highlighting.test.ts:93
+    // Groups decorations into the scopes used.
+    let line = [
+      {character : 1, length : 2, scopeIndex : 1},
----------------
nit: please use a more descriptive name, e.g. `HightlightsInLine`.


================
Comment at: clang-tools-extra/clangd/clients/clangd-vscode/test/semantic-highlighting.test.ts:94
+    let line = [
+      {character : 1, length : 2, scopeIndex : 1},
+      {character : 5, length : 2, scopeIndex : 1},
----------------
I believe the test code is correct, but the code here/below is complex and hard to follow. I think we need make the code more readable/understandable.

some suggestions:

- the line number is implicitly indicated by the index of the array, I think we can add one more field `line` to the structure (call HighlightingTokens).
- and creates some helper functions (with proper names) that take the `HighlightingTokens` as parameter and generate the data you need e.g. `SemanticHighlightingLine[]`, `vscode.Range`.



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