[PATCH] D139926: [clangd] Add semantic token for angle brackets

Nathan Ridge via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 24 00:38:02 PST 2023


nridge added a comment.

I played around with the patch a little, and found some cases where semantic tokens should be present but aren't:

  template <typename T> class S {
  public:
    template <typename U> class Nested;
  };
  
  // explicit specialization
  // parameter list is missing semantic tokens
  template <>
  class S<int> {};
  
  // partial specialization
  // parameter and argument lists are missing semantic tokens
  template <typename T>
  class S<T*> {};
  
  // nested template definition
  // outer parameter list is missing semantic tokens
  template <typename T>
  template <typename U>
  class S<T>::Nested {};
  
  // nested template specialization
  // both parameter lists are missing semantic tokens
  template <>
  template <>
  class S<float>::Nested<float> {};
  
  template <typename T> void foo();
  
  void bar() {
    // function with call explicit template arguments
    // argument list is missing semantic tokens
    foo<int>();
  }
  
  template <typename T> constexpr int V = 42;
  
  // variable template reference
  // argument list is missing semantic tokens
  constexpr int Y = V<char>;
  
  // variable template specialization
  // parameter and argument lists are missing semantic tokens
  template <>
  constexpr int V<int> = 5;
  
  // variable template partial specialization
  // parameter and argument lists are missing semantic tokens
  template <typename T>
  constexpr int V<T*> = 6;
  
  template <typename T>
  concept C = true;
  
  // constrained template
  // concept's argument list is missing semantic tokens
  template <typename T> requires C<T>
  class Z {};



================
Comment at: clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp:939
+            $Class[[S]]$Bracket[[<]]$Class[[S]]$Bracket[[<]]int$Bracket[[>]]$Bracket[[>]] $LocalVariable_def[[s1]];
+            $Class[[S]]<$Class[[S]]$Bracket[[<]]int$Bracket[[>]]\
+> $LocalVariable_def[[s2]];
----------------
It's easy to overlook this, could you please add a comment similar to:

```
// Semantic tokens for outer argument list are deliberately omitted to
// avoid having to handle line-continuations
```

(feel free to reword to better express the reason)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D139926



More information about the cfe-commits mailing list