Clang: Filter scope operators

Scope operators are not really user defined.

Change-Id: I1ab08dc3db7c39b98da02b6ef10bf78b75a6856d
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
Marco Bubke
2015-11-18 19:09:38 +01:00
committed by Nikolai Kosjar
parent bd10e9b020
commit 2e499b73d6
3 changed files with 43 additions and 1 deletions

View File

@@ -241,11 +241,23 @@ HighlightingType literalKind(const Cursor &cursor)
Q_UNREACHABLE(); Q_UNREACHABLE();
} }
bool hasOperatorName(const char *operatorString)
{
return std::strncmp(operatorString, "operator", 8) == 0;
}
HighlightingType operatorKind(const Cursor &cursor)
{
if (hasOperatorName(cursor.spelling().cString()))
return HighlightingType::Operator;
else
return HighlightingType::Invalid;
}
HighlightingType punctationKind(const Cursor &cursor) HighlightingType punctationKind(const Cursor &cursor)
{ {
switch (cursor.kind()) { switch (cursor.kind()) {
case CXCursor_DeclRefExpr: return HighlightingType::Operator; case CXCursor_DeclRefExpr: return operatorKind(cursor);
default: return HighlightingType::Invalid; default: return HighlightingType::Invalid;
} }
} }

View File

@@ -383,3 +383,19 @@ void f17()
{ {
TemplatedType<int> TemplatedTypeDeclaration; TemplatedType<int> TemplatedTypeDeclaration;
} }
void f18()
{
auto value = 1 + 2;
}
class ScopeClass
{
public:
static void ScopeOperator();
};
void f19()
{
ScopeClass::ScopeOperator();
}

View File

@@ -881,6 +881,20 @@ TEST_F(HighlightingInformations, TemplatedTypeDeclaration)
ASSERT_THAT(infos[0], HasType(HighlightingType::Type)); ASSERT_THAT(infos[0], HasType(HighlightingType::Type));
} }
TEST_F(HighlightingInformations, NoOperator)
{
const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(389, 24));
ASSERT_THAT(infos[2], HasType(HighlightingType::Invalid));
}
TEST_F(HighlightingInformations, ScopeOperator)
{
const auto infos = translationUnit.highlightingInformationsInRange(sourceRange(400, 33));
ASSERT_THAT(infos[1], HasType(HighlightingType::Invalid));
}
Data *HighlightingInformations::d; Data *HighlightingInformations::d;
void HighlightingInformations::SetUpTestCase() void HighlightingInformations::SetUpTestCase()