[PATCH] D154580: [clangd][c++20]Add missing semantic highlighing for concepts.
Jens Massberg via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 6 02:46:06 PDT 2023
massberg updated this revision to Diff 537642.
massberg added a comment.
Set correct token for deduced auto types.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D154580/new/
https://reviews.llvm.org/D154580
Files:
clang-tools-extra/clangd/SemanticHighlighting.cpp
clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
Index: clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
+++ clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
@@ -648,6 +648,15 @@
void $Function_def[[bar]]($TemplateParameter[[T]] $Parameter_def[[F]]) {
$Parameter[[F]].$Unknown_dependentName[[foo]]();
}
+
+ struct $Class_def[[F]] {
+ void $Method_def[[foo]]() {};
+ };
+ $Concept[[Fooable]] $Class_deduced[[auto]] $Variable_def[[f]] = $Class[[F]]();
+
+ void $Function_def[[Bar]]($Concept[[Fooable]] $TemplateParameter[[auto]] $Parameter_def[[x]]) {}
+
+ template$Bracket[[<]]$Concept[[Fooable]] auto $TemplateParameter_def_readonly[[x]]$Bracket[[>]] void $Function_def[[Boo]]() {}
)cpp",
// Dependent template name
R"cpp(
Index: clang-tools-extra/clangd/SemanticHighlighting.cpp
===================================================================
--- clang-tools-extra/clangd/SemanticHighlighting.cpp
+++ clang-tools-extra/clangd/SemanticHighlighting.cpp
@@ -737,8 +737,10 @@
}
bool VisitAutoTypeLoc(AutoTypeLoc L) {
- if (L.isConstrained())
+ if (L.isConstrained()) {
H.addAngleBracketTokens(L.getLAngleLoc(), L.getRAngleLoc());
+ H.addToken(L.getConceptNameInfo().getLoc(), HighlightingKind::Concept);
+ }
return true;
}
@@ -960,6 +962,11 @@
// in both it and the token for the decl being dropped due to conflict.
if (StartLoc == D->getLocation())
return true;
+
+ if (auto *TSI = D->getTypeSourceInfo()) {
+ StartLoc = TSI->getTypeLoc().getContainedAutoTypeLoc().getNameLoc();
+ }
+
auto &Tok =
H.addToken(StartLoc, *K).addModifier(HighlightingModifier::Deduced);
const Type *Deduced = AT->getDeducedType().getTypePtrOrNull();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D154580.537642.patch
Type: text/x-patch
Size: 1911 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230706/3a12dc3b/attachment.bin>
More information about the cfe-commits
mailing list