[PATCH] D66001: [clangd] Added highlighting for constructor initializers.
This revision was automatically updated to reflect the committed changes. Closed by commit rL368434: [clangd] Added highlighting for constructor initializers. (authored by jvikstrom, committed by ). Herald added a project: LLVM. Herald added a subscriber: llvm-commits. Changed prior to commit: https://reviews.llvm.org/D66001?vs=214346=214362#toc Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66001/new/ https://reviews.llvm.org/D66001 Files: clang-tools-extra/trunk/clangd/SemanticHighlighting.cpp clang-tools-extra/trunk/clangd/unittests/SemanticHighlightingTests.cpp Index: clang-tools-extra/trunk/clangd/unittests/SemanticHighlightingTests.cpp === --- clang-tools-extra/trunk/clangd/unittests/SemanticHighlightingTests.cpp +++ clang-tools-extra/trunk/clangd/unittests/SemanticHighlightingTests.cpp @@ -285,6 +285,24 @@ }; $Class[[A]] &$Class[[A]]::operator=($Class[[A]] &&$Variable[[O]]) = default; +)cpp", +R"cpp( + enum $Enum[[En]] { +$EnumConstant[[EC]], + }; + class $Class[[Foo]] {}; + class $Class[[Bar]] { +$Class[[Foo]] $Field[[Fo]]; +$Enum[[En]] $Field[[E]]; +$Primitive[[int]] $Field[[I]]; +$Class[[Bar]] ($Class[[Foo]] $Variable[[F]], +$Enum[[En]] $Variable[[E]]) +: $Field[[Fo]] ($Variable[[F]]), $Field[[E]] ($Variable[[E]]), + $Field[[I]] (123) {} + }; + class $Class[[Bar2]] : public $Class[[Bar]] { +$Class[[Bar2]]() : $Class[[Bar]]($Class[[Foo]](), $EnumConstant[[EC]]) {} + }; )cpp"}; for (const auto : TestCases) { checkHighlightings(TestCase); Index: clang-tools-extra/trunk/clangd/SemanticHighlighting.cpp === --- clang-tools-extra/trunk/clangd/SemanticHighlighting.cpp +++ clang-tools-extra/trunk/clangd/SemanticHighlighting.cpp @@ -11,6 +11,7 @@ #include "Protocol.h" #include "SourceCode.h" #include "clang/AST/ASTContext.h" +#include "clang/AST/DeclCXX.h" #include "clang/AST/RecursiveASTVisitor.h" #include @@ -136,6 +137,13 @@ HighlightingTokenCollector>::TraverseNestedNameSpecifierLoc(NNSLoc); } + bool TraverseConstructorInitializer(CXXCtorInitializer *CI) { +if (const FieldDecl *FD = CI->getMember()) + addToken(CI->getSourceLocation(), FD); +return RecursiveASTVisitor< +HighlightingTokenCollector>::TraverseConstructorInitializer(CI); + } + private: void addTypeLoc(SourceLocation Loc, const TypeLoc ) { if (const Type *TP = TL.getTypePtr()) { Index: clang-tools-extra/trunk/clangd/unittests/SemanticHighlightingTests.cpp === --- clang-tools-extra/trunk/clangd/unittests/SemanticHighlightingTests.cpp +++ clang-tools-extra/trunk/clangd/unittests/SemanticHighlightingTests.cpp @@ -285,6 +285,24 @@ }; $Class[[A]] &$Class[[A]]::operator=($Class[[A]] &&$Variable[[O]]) = default; +)cpp", +R"cpp( + enum $Enum[[En]] { +$EnumConstant[[EC]], + }; + class $Class[[Foo]] {}; + class $Class[[Bar]] { +$Class[[Foo]] $Field[[Fo]]; +$Enum[[En]] $Field[[E]]; +$Primitive[[int]] $Field[[I]]; +$Class[[Bar]] ($Class[[Foo]] $Variable[[F]], +$Enum[[En]] $Variable[[E]]) +: $Field[[Fo]] ($Variable[[F]]), $Field[[E]] ($Variable[[E]]), + $Field[[I]] (123) {} + }; + class $Class[[Bar2]] : public $Class[[Bar]] { +$Class[[Bar2]]() : $Class[[Bar]]($Class[[Foo]](), $EnumConstant[[EC]]) {} + }; )cpp"}; for (const auto : TestCases) { checkHighlightings(TestCase); Index: clang-tools-extra/trunk/clangd/SemanticHighlighting.cpp === --- clang-tools-extra/trunk/clangd/SemanticHighlighting.cpp +++ clang-tools-extra/trunk/clangd/SemanticHighlighting.cpp @@ -11,6 +11,7 @@ #include "Protocol.h" #include "SourceCode.h" #include "clang/AST/ASTContext.h" +#include "clang/AST/DeclCXX.h" #include "clang/AST/RecursiveASTVisitor.h" #include @@ -136,6 +137,13 @@ HighlightingTokenCollector>::TraverseNestedNameSpecifierLoc(NNSLoc); } + bool TraverseConstructorInitializer(CXXCtorInitializer *CI) { +if (const FieldDecl *FD = CI->getMember()) + addToken(CI->getSourceLocation(), FD); +return RecursiveASTVisitor< +HighlightingTokenCollector>::TraverseConstructorInitializer(CI); + } + private: void addTypeLoc(SourceLocation Loc, const TypeLoc ) { if (const Type *TP = TL.getTypePtr()) { ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D66001: [clangd] Added highlighting for constructor initializers.
jvikstrom updated this revision to Diff 214346. jvikstrom added a comment. Fixed case where initializer was base class initializer which would cause crash. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66001/new/ https://reviews.llvm.org/D66001 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 @@ -285,6 +285,24 @@ }; $Class[[A]] &$Class[[A]]::operator=($Class[[A]] &&$Variable[[O]]) = default; +)cpp", +R"cpp( + enum $Enum[[En]] { +$EnumConstant[[EC]], + }; + class $Class[[Foo]] {}; + class $Class[[Bar]] { +$Class[[Foo]] $Field[[Fo]]; +$Enum[[En]] $Field[[E]]; +$Primitive[[int]] $Field[[I]]; +$Class[[Bar]] ($Class[[Foo]] $Variable[[F]], +$Enum[[En]] $Variable[[E]]) +: $Field[[Fo]] ($Variable[[F]]), $Field[[E]] ($Variable[[E]]), + $Field[[I]] (123) {} + }; + class $Class[[Bar2]] : public $Class[[Bar]] { +$Class[[Bar2]]() : $Class[[Bar]]($Class[[Foo]](), $EnumConstant[[EC]]) {} + }; )cpp"}; for (const auto : TestCases) { checkHighlightings(TestCase); Index: clang-tools-extra/clangd/SemanticHighlighting.cpp === --- clang-tools-extra/clangd/SemanticHighlighting.cpp +++ clang-tools-extra/clangd/SemanticHighlighting.cpp @@ -11,6 +11,7 @@ #include "Protocol.h" #include "SourceCode.h" #include "clang/AST/ASTContext.h" +#include "clang/AST/DeclCXX.h" #include "clang/AST/RecursiveASTVisitor.h" #include @@ -136,6 +137,13 @@ HighlightingTokenCollector>::TraverseNestedNameSpecifierLoc(NNSLoc); } + bool TraverseConstructorInitializer(CXXCtorInitializer *CI) { +if (const FieldDecl *FD = CI->getMember()) + addToken(CI->getSourceLocation(), FD); +return RecursiveASTVisitor< +HighlightingTokenCollector>::TraverseConstructorInitializer(CI); + } + private: void addTypeLoc(SourceLocation Loc, const TypeLoc ) { if (const Type *TP = TL.getTypePtr()) { Index: clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp === --- clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp +++ clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp @@ -285,6 +285,24 @@ }; $Class[[A]] &$Class[[A]]::operator=($Class[[A]] &&$Variable[[O]]) = default; +)cpp", +R"cpp( + enum $Enum[[En]] { +$EnumConstant[[EC]], + }; + class $Class[[Foo]] {}; + class $Class[[Bar]] { +$Class[[Foo]] $Field[[Fo]]; +$Enum[[En]] $Field[[E]]; +$Primitive[[int]] $Field[[I]]; +$Class[[Bar]] ($Class[[Foo]] $Variable[[F]], +$Enum[[En]] $Variable[[E]]) +: $Field[[Fo]] ($Variable[[F]]), $Field[[E]] ($Variable[[E]]), + $Field[[I]] (123) {} + }; + class $Class[[Bar2]] : public $Class[[Bar]] { +$Class[[Bar2]]() : $Class[[Bar]]($Class[[Foo]](), $EnumConstant[[EC]]) {} + }; )cpp"}; for (const auto : TestCases) { checkHighlightings(TestCase); Index: clang-tools-extra/clangd/SemanticHighlighting.cpp === --- clang-tools-extra/clangd/SemanticHighlighting.cpp +++ clang-tools-extra/clangd/SemanticHighlighting.cpp @@ -11,6 +11,7 @@ #include "Protocol.h" #include "SourceCode.h" #include "clang/AST/ASTContext.h" +#include "clang/AST/DeclCXX.h" #include "clang/AST/RecursiveASTVisitor.h" #include @@ -136,6 +137,13 @@ HighlightingTokenCollector>::TraverseNestedNameSpecifierLoc(NNSLoc); } + bool TraverseConstructorInitializer(CXXCtorInitializer *CI) { +if (const FieldDecl *FD = CI->getMember()) + addToken(CI->getSourceLocation(), FD); +return RecursiveASTVisitor< +HighlightingTokenCollector>::TraverseConstructorInitializer(CI); + } + private: void addTypeLoc(SourceLocation Loc, const TypeLoc ) { if (const Type *TP = TL.getTypePtr()) { ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D66001: [clangd] Added highlighting for constructor initializers.
jvikstrom created this revision. jvikstrom added reviewers: hokein, ilya-biryukov. Herald added subscribers: cfe-commits, kadircet, arphaman, jkorous, MaskRay. Herald added a project: clang. Constructor initializers were not being highlighted. This adds highlighting for them by using TraverseConstructorInitializer. Uses the Traverse* because there is no visit for CXXCtorInitializer. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D66001 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 @@ -285,6 +285,19 @@ }; $Class[[A]] &$Class[[A]]::operator=($Class[[A]] &&$Variable[[O]]) = default; +)cpp", +R"cpp( + enum $Enum[[En]] {}; + class $Class[[Foo]] {}; + class $Class[[Bar]] { +$Class[[Foo]] $Field[[Fo]]; +$Enum[[En]] $Field[[E]]; +$Primitive[[int]] $Field[[I]]; +$Class[[Bar]] ($Class[[Foo]] $Variable[[F]], +$Enum[[En]] $Variable[[E]]) +: $Field[[Fo]] ($Variable[[F]]), $Field[[E]] ($Variable[[E]]), + $Field[[I]] (123) {} + }; )cpp"}; for (const auto : TestCases) { checkHighlightings(TestCase); Index: clang-tools-extra/clangd/SemanticHighlighting.cpp === --- clang-tools-extra/clangd/SemanticHighlighting.cpp +++ clang-tools-extra/clangd/SemanticHighlighting.cpp @@ -11,6 +11,7 @@ #include "Protocol.h" #include "SourceCode.h" #include "clang/AST/ASTContext.h" +#include "clang/AST/DeclCXX.h" #include "clang/AST/RecursiveASTVisitor.h" #include @@ -136,6 +137,12 @@ HighlightingTokenCollector>::TraverseNestedNameSpecifierLoc(NNSLoc); } + bool TraverseConstructorInitializer(CXXCtorInitializer *CI) { +addToken(CI->getSourceLocation(), CI->getMember()); +return RecursiveASTVisitor< +HighlightingTokenCollector>::TraverseConstructorInitializer(CI); + } + private: void addTypeLoc(SourceLocation Loc, const TypeLoc ) { if (const Type *TP = TL.getTypePtr()) { Index: clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp === --- clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp +++ clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp @@ -285,6 +285,19 @@ }; $Class[[A]] &$Class[[A]]::operator=($Class[[A]] &&$Variable[[O]]) = default; +)cpp", +R"cpp( + enum $Enum[[En]] {}; + class $Class[[Foo]] {}; + class $Class[[Bar]] { +$Class[[Foo]] $Field[[Fo]]; +$Enum[[En]] $Field[[E]]; +$Primitive[[int]] $Field[[I]]; +$Class[[Bar]] ($Class[[Foo]] $Variable[[F]], +$Enum[[En]] $Variable[[E]]) +: $Field[[Fo]] ($Variable[[F]]), $Field[[E]] ($Variable[[E]]), + $Field[[I]] (123) {} + }; )cpp"}; for (const auto : TestCases) { checkHighlightings(TestCase); Index: clang-tools-extra/clangd/SemanticHighlighting.cpp === --- clang-tools-extra/clangd/SemanticHighlighting.cpp +++ clang-tools-extra/clangd/SemanticHighlighting.cpp @@ -11,6 +11,7 @@ #include "Protocol.h" #include "SourceCode.h" #include "clang/AST/ASTContext.h" +#include "clang/AST/DeclCXX.h" #include "clang/AST/RecursiveASTVisitor.h" #include @@ -136,6 +137,12 @@ HighlightingTokenCollector>::TraverseNestedNameSpecifierLoc(NNSLoc); } + bool TraverseConstructorInitializer(CXXCtorInitializer *CI) { +addToken(CI->getSourceLocation(), CI->getMember()); +return RecursiveASTVisitor< +HighlightingTokenCollector>::TraverseConstructorInitializer(CI); + } + private: void addTypeLoc(SourceLocation Loc, const TypeLoc ) { if (const Type *TP = TL.getTypePtr()) { ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits