[PATCH] D64617: [clangd] Added highlighting for members and methods
This revision was automatically updated to reflect the committed changes. Closed by commit rL366047: [clangd] Added highlighting for members and methods. (authored by jvikstrom, committed by ). Herald added a project: LLVM. Herald added a subscriber: llvm-commits. Changed prior to commit: https://reviews.llvm.org/D64617?vs=209510&id=209770#toc Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D64617/new/ https://reviews.llvm.org/D64617 Files: clang-tools-extra/trunk/clangd/SemanticHighlighting.cpp clang-tools-extra/trunk/clangd/SemanticHighlighting.h clang-tools-extra/trunk/clangd/test/semantic-highlighting.test clang-tools-extra/trunk/clangd/unittests/SemanticHighlightingTests.cpp Index: clang-tools-extra/trunk/clangd/test/semantic-highlighting.test === --- clang-tools-extra/trunk/clangd/test/semantic-highlighting.test +++ clang-tools-extra/trunk/clangd/test/semantic-highlighting.test @@ -5,12 +5,18 @@ # CHECK: "semanticHighlighting": { # CHECK-NEXT:"scopes": [ # CHECK-NEXT: [ -# CHECK-NEXT:"variable.cpp" +# CHECK-NEXT:"variable.other.cpp" # CHECK-NEXT: ], # CHECK-NEXT: [ # CHECK-NEXT:"entity.name.function.cpp" # CHECK-NEXT: ], # CHECK-NEXT: [ +# CHECK-NEXT:"entity.name.function.method.cpp" +# CHECK-NEXT: ], +# CHECK-NEXT: [ +# CHECK-NEXT:"variable.other.field.cpp" +# CHECK-NEXT: ], +# CHECK-NEXT: [ # CHECK-NEXT:"entity.name.type.class.cpp" # CHECK-NEXT: ], # CHECK-NEXT: [ 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 @@ -38,7 +38,9 @@ {HighlightingKind::Class, "Class"}, {HighlightingKind::Enum, "Enum"}, {HighlightingKind::Namespace, "Namespace"}, - {HighlightingKind::EnumConstant, "EnumConstant"}}; + {HighlightingKind::EnumConstant, "EnumConstant"}, + {HighlightingKind::Field, "Field"}, + {HighlightingKind::Method, "Method"}}; std::vector ExpectedTokens; for (const auto &KindString : KindToString) { std::vector Toks = makeHighlightingTokens( @@ -54,14 +56,14 @@ const char *TestCases[] = { R"cpp( struct $Class[[AS]] { -double SomeMember; +double $Field[[SomeMember]]; }; struct { } $Variable[[S]]; void $Function[[foo]](int $Variable[[A]], $Class[[AS]] $Variable[[As]]) { auto $Variable[[VeryLongVariableName]] = 12312; $Class[[AS]] $Variable[[AA]]; -auto $Variable[[L]] = $Variable[[AA]].SomeMember + $Variable[[A]]; +auto $Variable[[L]] = $Variable[[AA]].$Field[[SomeMember]] + $Variable[[A]]; auto $Variable[[FN]] = [ $Variable[[AA]]](int $Variable[[A]]) -> void {}; $Variable[[FN]](12312); } @@ -73,19 +75,19 @@ auto $Variable[[Bou]] = $Function[[Gah]]; } struct $Class[[A]] { -void $Function[[abc]](); +void $Method[[abc]](); }; )cpp", R"cpp( namespace $Namespace[[abc]] { template struct $Class[[A]] { - T t; + T $Field[[t]]; }; } template struct $Class[[C]] : $Namespace[[abc]]::A { -typename T::A* D; +typename T::A* $Field[[D]]; }; $Namespace[[abc]]::$Class[[A]] $Variable[[AA]]; typedef $Namespace[[abc]]::$Class[[A]] AAA; @@ -93,7 +95,7 @@ $Class[[B]](); ~$Class[[B]](); void operator<<($Class[[B]]); -$Class[[AAA]] AA; +$Class[[AAA]] $Field[[AA]]; }; $Class[[B]]::$Class[[B]]() {} $Class[[B]]::~$Class[[B]]() {} @@ -112,8 +114,8 @@ $EnumConstant[[Hi]], }; struct $Class[[A]] { -$Enum[[E]] EEE; -$Enum[[EE]] ; +$Enum[[E]] $Field[[EEE]]; +$Enum[[EE]] $Field[[]]; }; int $Variable[[I]] = $EnumConstant[[Hi]]; $Enum[[E]] $Variable[[L]] = $Enum[[E]]::$EnumConstant[[B]]; @@ -140,6 +142,30 @@ $Namespace[[vwz]]::$Class[[A]]::$Enum[[B]]::$EnumConstant[[Hi]]; ::$Namespace[[vwz]]::$Class[[A]] $Variable[[B]]; ::$Namespace[[abc]]::$Namespace[[bcd]]::$Class[[A]] $Variable[[BB]]; +)cpp", +R"cpp( + struct $Class[[D]] { +double $Field[[C]]; + }; + struct $Class[[A]] { +double $Field[[B]]; +$Class[[D]] $Field[[E]]; +static double $Variable[[S]]; +void $Method[[foo]]() { + $Field[[B]] = 123; + this->$Field[[B]] = 156; + this->$Method[[foo]](); + $Method[[foo]](); + $Variable[[S]] = 90.1
[PATCH] D64617: [clangd] Added highlighting for members and methods
hokein accepted this revision. hokein added inline comments. Comment at: clang-tools-extra/clangd/SemanticHighlighting.h:28 Variable = 0, + Field, Function, nit: put it `Field` around `Class`. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D64617/new/ https://reviews.llvm.org/D64617 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D64617: [clangd] Added highlighting for members and methods
jvikstrom updated this revision to Diff 209509. jvikstrom marked 6 inline comments as done. jvikstrom added a comment. Addressed comments. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D64617/new/ https://reviews.llvm.org/D64617 Files: clang-tools-extra/clangd/SemanticHighlighting.cpp clang-tools-extra/clangd/SemanticHighlighting.h clang-tools-extra/clangd/test/semantic-highlighting.test 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 @@ -37,7 +37,9 @@ {HighlightingKind::Function, "Function"}, {HighlightingKind::Class, "Class"}, {HighlightingKind::Enum, "Enum"}, - {HighlightingKind::Namespace, "Namespace"}}; + {HighlightingKind::Namespace, "Namespace"}, + {HighlightingKind::Field, "Field"}, + {HighlightingKind::Method, "Method"}}; std::vector ExpectedTokens; for (const auto &KindString : KindToString) { std::vector Toks = makeHighlightingTokens( @@ -53,14 +55,14 @@ const char *TestCases[] = { R"cpp( struct $Class[[AS]] { -double SomeMember; +double $Field[[SomeMember]]; }; struct { } $Variable[[S]]; void $Function[[foo]](int $Variable[[A]], $Class[[AS]] $Variable[[As]]) { auto $Variable[[VeryLongVariableName]] = 12312; $Class[[AS]] $Variable[[AA]]; -auto $Variable[[L]] = $Variable[[AA]].SomeMember + $Variable[[A]]; +auto $Variable[[L]] = $Variable[[AA]].$Field[[SomeMember]] + $Variable[[A]]; auto $Variable[[FN]] = [ $Variable[[AA]]](int $Variable[[A]]) -> void {}; $Variable[[FN]](12312); } @@ -72,19 +74,19 @@ auto $Variable[[Bou]] = $Function[[Gah]]; } struct $Class[[A]] { -void $Function[[abc]](); +void $Method[[abc]](); }; )cpp", R"cpp( namespace $Namespace[[abc]] { template struct $Class[[A]] { - T t; + T $Field[[t]]; }; } template struct $Class[[C]] : $Namespace[[abc]]::A { -typename T::A* D; +typename T::A* $Field[[D]]; }; $Namespace[[abc]]::$Class[[A]] $Variable[[AA]]; typedef $Namespace[[abc]]::$Class[[A]] AAA; @@ -92,7 +94,7 @@ $Class[[B]](); ~$Class[[B]](); void operator<<($Class[[B]]); -$Class[[AAA]] AA; +$Class[[AAA]] $Field[[AA]]; }; $Class[[B]]::$Class[[B]]() {} $Class[[B]]::~$Class[[B]]() {} @@ -106,8 +108,8 @@ enum class $Enum[[E]] {}; enum $Enum[[EE]] {}; struct $Class[[A]] { -$Enum[[E]] EEE; -$Enum[[EE]] ; +$Enum[[E]] $Field[[EEE]]; +$Enum[[EE]] $Field[[]]; }; )cpp", R"cpp( @@ -132,6 +134,30 @@ $Namespace[[vwz]]::$Class[[A]]::$Enum[[B]]::Hi; ::$Namespace[[vwz]]::$Class[[A]] $Variable[[B]]; ::$Namespace[[abc]]::$Namespace[[bcd]]::$Class[[A]] $Variable[[BB]]; +)cpp", +R"cpp( + struct $Class[[D]] { +double $Field[[C]]; + }; + struct $Class[[A]] { +double $Field[[B]]; +$Class[[D]] $Field[[E]]; +static double $Variable[[S]]; +void $Method[[foo]]() { + $Field[[B]] = 123; + this->$Field[[B]] = 156; + this->$Method[[foo]](); + $Method[[foo]](); + $Variable[[S]] = 90.1; +} + }; + void $Function[[foo]]() { +$Class[[A]] $Variable[[AA]]; +$Variable[[AA]].$Field[[B]] += 2; +$Variable[[AA]].$Method[[foo]](); +$Variable[[AA]].$Field[[E]].$Field[[C]]; +$Class[[A]]::$Variable[[S]] = 90; + } )cpp"}; for (const auto &TestCase : TestCases) { checkHighlightings(TestCase); @@ -181,7 +207,7 @@ toSemanticHighlightingInformation(Tokens); std::vector ExpectedResults = { {1, "AQAEAAA="}, - {3, "CAAEAAAEAAMAAQ=="}}; + {3, "CAAEAAAEAAMAAg=="}}; EXPECT_EQ(ActualResults, ExpectedResults); } Index: clang-tools-extra/clangd/test/semantic-highlighting.test === --- clang-tools-extra/clangd/test/semantic-highlighting.test +++ clang-tools-extra/clangd/test/semantic-highlighting.test @@ -5,12 +5,18 @@ # CHECK: "semanticHighlighting": { # CHECK-NEXT:"scopes": [ # CHECK-NEXT: [ -# CHECK-NEXT:"variable.cpp" +# CHECK-NEXT:"variable.other.cpp" +# CHECK-NEXT: ], +# CHECK-NEXT: [ +# CHECK-NEXT:"variable.other.field.cpp" # CHECK-NEXT: ], # CHECK-NEXT: [ # CHECK-NEXT:"entity.name.fun
[PATCH] D64617: [clangd] Added highlighting for members and methods
jvikstrom updated this revision to Diff 209510. jvikstrom added a comment. Removed addToken for Exprs. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D64617/new/ https://reviews.llvm.org/D64617 Files: clang-tools-extra/clangd/SemanticHighlighting.cpp clang-tools-extra/clangd/SemanticHighlighting.h clang-tools-extra/clangd/test/semantic-highlighting.test 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 @@ -37,7 +37,9 @@ {HighlightingKind::Function, "Function"}, {HighlightingKind::Class, "Class"}, {HighlightingKind::Enum, "Enum"}, - {HighlightingKind::Namespace, "Namespace"}}; + {HighlightingKind::Namespace, "Namespace"}, + {HighlightingKind::Field, "Field"}, + {HighlightingKind::Method, "Method"}}; std::vector ExpectedTokens; for (const auto &KindString : KindToString) { std::vector Toks = makeHighlightingTokens( @@ -53,14 +55,14 @@ const char *TestCases[] = { R"cpp( struct $Class[[AS]] { -double SomeMember; +double $Field[[SomeMember]]; }; struct { } $Variable[[S]]; void $Function[[foo]](int $Variable[[A]], $Class[[AS]] $Variable[[As]]) { auto $Variable[[VeryLongVariableName]] = 12312; $Class[[AS]] $Variable[[AA]]; -auto $Variable[[L]] = $Variable[[AA]].SomeMember + $Variable[[A]]; +auto $Variable[[L]] = $Variable[[AA]].$Field[[SomeMember]] + $Variable[[A]]; auto $Variable[[FN]] = [ $Variable[[AA]]](int $Variable[[A]]) -> void {}; $Variable[[FN]](12312); } @@ -72,19 +74,19 @@ auto $Variable[[Bou]] = $Function[[Gah]]; } struct $Class[[A]] { -void $Function[[abc]](); +void $Method[[abc]](); }; )cpp", R"cpp( namespace $Namespace[[abc]] { template struct $Class[[A]] { - T t; + T $Field[[t]]; }; } template struct $Class[[C]] : $Namespace[[abc]]::A { -typename T::A* D; +typename T::A* $Field[[D]]; }; $Namespace[[abc]]::$Class[[A]] $Variable[[AA]]; typedef $Namespace[[abc]]::$Class[[A]] AAA; @@ -92,7 +94,7 @@ $Class[[B]](); ~$Class[[B]](); void operator<<($Class[[B]]); -$Class[[AAA]] AA; +$Class[[AAA]] $Field[[AA]]; }; $Class[[B]]::$Class[[B]]() {} $Class[[B]]::~$Class[[B]]() {} @@ -106,8 +108,8 @@ enum class $Enum[[E]] {}; enum $Enum[[EE]] {}; struct $Class[[A]] { -$Enum[[E]] EEE; -$Enum[[EE]] ; +$Enum[[E]] $Field[[EEE]]; +$Enum[[EE]] $Field[[]]; }; )cpp", R"cpp( @@ -132,6 +134,30 @@ $Namespace[[vwz]]::$Class[[A]]::$Enum[[B]]::Hi; ::$Namespace[[vwz]]::$Class[[A]] $Variable[[B]]; ::$Namespace[[abc]]::$Namespace[[bcd]]::$Class[[A]] $Variable[[BB]]; +)cpp", +R"cpp( + struct $Class[[D]] { +double $Field[[C]]; + }; + struct $Class[[A]] { +double $Field[[B]]; +$Class[[D]] $Field[[E]]; +static double $Variable[[S]]; +void $Method[[foo]]() { + $Field[[B]] = 123; + this->$Field[[B]] = 156; + this->$Method[[foo]](); + $Method[[foo]](); + $Variable[[S]] = 90.1; +} + }; + void $Function[[foo]]() { +$Class[[A]] $Variable[[AA]]; +$Variable[[AA]].$Field[[B]] += 2; +$Variable[[AA]].$Method[[foo]](); +$Variable[[AA]].$Field[[E]].$Field[[C]]; +$Class[[A]]::$Variable[[S]] = 90; + } )cpp"}; for (const auto &TestCase : TestCases) { checkHighlightings(TestCase); @@ -181,7 +207,7 @@ toSemanticHighlightingInformation(Tokens); std::vector ExpectedResults = { {1, "AQAEAAA="}, - {3, "CAAEAAAEAAMAAQ=="}}; + {3, "CAAEAAAEAAMAAg=="}}; EXPECT_EQ(ActualResults, ExpectedResults); } Index: clang-tools-extra/clangd/test/semantic-highlighting.test === --- clang-tools-extra/clangd/test/semantic-highlighting.test +++ clang-tools-extra/clangd/test/semantic-highlighting.test @@ -5,12 +5,18 @@ # CHECK: "semanticHighlighting": { # CHECK-NEXT:"scopes": [ # CHECK-NEXT: [ -# CHECK-NEXT:"variable.cpp" +# CHECK-NEXT:"variable.other.cpp" +# CHECK-NEXT: ], +# CHECK-NEXT: [ +# CHECK-NEXT:"variable.other.field.cpp" # CHECK-NEXT: ], # CHECK-NEXT: [ # CHECK-NEXT:"entity.name.function.cpp" # CHECK-NEXT: ]
[PATCH] D64617: [clangd] Added highlighting for members and methods
hokein added inline comments. Comment at: clang-tools-extra/clangd/SemanticHighlighting.cpp:44 + bool VisitMemberExpr(MemberExpr *ME) { +if (const CXXMethodDecl *MD = +dyn_cast(ME->getMemberDecl())) { nit: this can be simplified like ``` if (const auto* D = dyn_cast(ME->getMemberDecl())) { // When calling the destructor manually like: AAA::~A(); The ~ is a // MemberExpr. return true; } ``` Comment at: clang-tools-extra/clangd/SemanticHighlighting.cpp:53 + +// The MemberDecl is VarDecl for static members, therefore getMemberDecl +// does not work for all member variables. It took me a while to understand how the comment associate with the code here, maybe add `and we use the MemberExpr` in the comment? Comment at: clang-tools-extra/clangd/SemanticHighlighting.cpp:142 } +if(isa(D)) { + addToken(Loc, HighlightingKind::Method); nit: clang-format. As it is class-related, could you move it to Line 133 (immediately after the `Class` case), the same to the `FieldDecl`. Comment at: clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp:140 + struct $Class[[D]] { +double $MemberVariable[[C]]; + }; could you add a test case for `static member`? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D64617/new/ https://reviews.llvm.org/D64617 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D64617: [clangd] Added highlighting for members and methods
sammccall accepted this revision. sammccall added a comment. This revision is now accepted and ready to land. LG from my side Comment at: clang-tools-extra/clangd/SemanticHighlighting.h:28 Variable = 0, + MemberVariable, Function, nit: clang calls these Field which is terser and pretty understandable, I think. (Formally, I think these are data members and "methods" are member functions, but I like the shorter names better) Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D64617/new/ https://reviews.llvm.org/D64617 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D64617: [clangd] Added highlighting for members and methods
jvikstrom created this revision. jvikstrom added reviewers: hokein, sammccall, ilya-biryukov. Herald added subscribers: cfe-commits, kadircet, arphaman, jkorous, MaskRay. Herald added a project: clang. Added highlighting for members and methods. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D64617 Files: clang-tools-extra/clangd/SemanticHighlighting.cpp clang-tools-extra/clangd/SemanticHighlighting.h clang-tools-extra/clangd/test/semantic-highlighting.test 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 @@ -37,7 +37,9 @@ {HighlightingKind::Function, "Function"}, {HighlightingKind::Class, "Class"}, {HighlightingKind::Enum, "Enum"}, - {HighlightingKind::Namespace, "Namespace"}}; + {HighlightingKind::Namespace, "Namespace"}, + {HighlightingKind::MemberVariable, "MemberVariable"}, + {HighlightingKind::Method, "Method"}}; std::vector ExpectedTokens; for (const auto &KindString : KindToString) { std::vector Toks = makeHighlightingTokens( @@ -53,14 +55,14 @@ const char *TestCases[] = { R"cpp( struct $Class[[AS]] { -double SomeMember; +double $MemberVariable[[SomeMember]]; }; struct { } $Variable[[S]]; void $Function[[foo]](int $Variable[[A]], $Class[[AS]] $Variable[[As]]) { auto $Variable[[VeryLongVariableName]] = 12312; $Class[[AS]] $Variable[[AA]]; -auto $Variable[[L]] = $Variable[[AA]].SomeMember + $Variable[[A]]; +auto $Variable[[L]] = $Variable[[AA]].$MemberVariable[[SomeMember]] + $Variable[[A]]; auto $Variable[[FN]] = [ $Variable[[AA]]](int $Variable[[A]]) -> void {}; $Variable[[FN]](12312); } @@ -72,19 +74,19 @@ auto $Variable[[Bou]] = $Function[[Gah]]; } struct $Class[[A]] { -void $Function[[abc]](); +void $Method[[abc]](); }; )cpp", R"cpp( namespace $Namespace[[abc]] { template struct $Class[[A]] { - T t; + T $MemberVariable[[t]]; }; } template struct $Class[[C]] : $Namespace[[abc]]::A { -typename T::A* D; +typename T::A* $MemberVariable[[D]]; }; $Namespace[[abc]]::$Class[[A]] $Variable[[AA]]; typedef $Namespace[[abc]]::$Class[[A]] AAA; @@ -92,7 +94,7 @@ $Class[[B]](); ~$Class[[B]](); void operator<<($Class[[B]]); -$Class[[AAA]] AA; +$Class[[AAA]] $MemberVariable[[AA]]; }; $Class[[B]]::$Class[[B]]() {} $Class[[B]]::~$Class[[B]]() {} @@ -106,8 +108,8 @@ enum class $Enum[[E]] {}; enum $Enum[[EE]] {}; struct $Class[[A]] { -$Enum[[E]] EEE; -$Enum[[EE]] ; +$Enum[[E]] $MemberVariable[[EEE]]; +$Enum[[EE]] $MemberVariable[[]]; }; )cpp", R"cpp( @@ -132,6 +134,27 @@ $Namespace[[vwz]]::$Class[[A]]::$Enum[[B]]::Hi; ::$Namespace[[vwz]]::$Class[[A]] $Variable[[B]]; ::$Namespace[[abc]]::$Namespace[[bcd]]::$Class[[A]] $Variable[[BB]]; +)cpp", +R"cpp( + struct $Class[[D]] { +double $MemberVariable[[C]]; + }; + struct $Class[[A]] { +double $MemberVariable[[B]]; +$Class[[D]] $MemberVariable[[E]]; +void $Method[[foo]]() { + $MemberVariable[[B]] = 123; + this->$MemberVariable[[B]] = 156; + this->$Method[[foo]](); + $Method[[foo]](); +} + }; + void $Function[[foo]]() { +$Class[[A]] $Variable[[AA]]; +$Variable[[AA]].$MemberVariable[[B]] += 2; +$Variable[[AA]].$Method[[foo]](); +$Variable[[AA]].$MemberVariable[[E]].$MemberVariable[[C]]; + } )cpp"}; for (const auto &TestCase : TestCases) { checkHighlightings(TestCase); @@ -181,7 +204,7 @@ toSemanticHighlightingInformation(Tokens); std::vector ExpectedResults = { {1, "AQAEAAA="}, - {3, "CAAEAAAEAAMAAQ=="}}; + {3, "CAAEAAAEAAMAAg=="}}; EXPECT_EQ(ActualResults, ExpectedResults); } Index: clang-tools-extra/clangd/test/semantic-highlighting.test === --- clang-tools-extra/clangd/test/semantic-highlighting.test +++ clang-tools-extra/clangd/test/semantic-highlighting.test @@ -5,12 +5,18 @@ # CHECK: "semanticHighlighting": { # CHECK-NEXT:"scopes": [ # CHECK-NEXT: [ -# CHECK-NEXT:"variable.cpp" +# CHECK-NEXT:"variable.other.cpp" +# CHECK-NEXT: ], +# CHECK-NEXT: [ +# CHECK-NEXT:"variable.other.member.cpp" # CHECK-NEXT: