Clang: introduce more data in TokenInfo

Data added:
- return type spelling for functions
- parent spelling
- access specifier for class fields and methods
- storage class

New highlighting types are added, therefore
types are now categorized by class, struct, etc.

Change-Id: I1739b94a6f777045fde655060d8b9a12b6e0889b
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
Ivan Donchevskii
2018-01-12 09:44:05 +01:00
parent 730a8186af
commit bdd5066665
17 changed files with 449 additions and 72 deletions

View File

@@ -803,6 +803,96 @@ TEST_F(Cursor, ConstReferenceIsNotOutputArgument)
ASSERT_FALSE(argument.isOutputArgument());
}
TEST_F(Cursor, ResultType)
{
auto methodCursor = translationUnit.cursorAt(31, 18);
Utf8String resultType = methodCursor.type().resultType().spelling();
ASSERT_THAT(resultType, Utf8String("bool", 4));
}
TEST_F(Cursor, PrivateMethodAccessSpecifier)
{
auto methodCursor = translationUnit.cursorAt(16, 17);
auto accessSpecifier = methodCursor.accessSpecifier();
ASSERT_THAT(accessSpecifier, ClangBackEnd::AccessSpecifier::Private);
}
TEST_F(Cursor, PublicMethodAccessSpecifier)
{
auto methodCursor = translationUnit.cursorAt(79, 25);
auto accessSpecifier = methodCursor.accessSpecifier();
ASSERT_THAT(accessSpecifier, ClangBackEnd::AccessSpecifier::Public);
}
TEST_F(Cursor, ProtectedMethodAccessSpecifier)
{
auto methodCursor = translationUnit.cursorAt(131, 22);
auto accessSpecifier = methodCursor.accessSpecifier();
ASSERT_THAT(accessSpecifier, ClangBackEnd::AccessSpecifier::Protected);
}
TEST_F(Cursor, PrivateFieldAccessSpecifier)
{
auto fieldCursor = translationUnit.cursorAt(21, 12);
auto accessSpecifier = fieldCursor.accessSpecifier();
ASSERT_THAT(accessSpecifier, ClangBackEnd::AccessSpecifier::Private);
}
TEST_F(Cursor, InvalidAccessSpecifier)
{
auto localVarCursor = translationUnit.cursorAt(62, 9);
auto accessSpecifier = localVarCursor.accessSpecifier();
ASSERT_THAT(accessSpecifier, ClangBackEnd::AccessSpecifier::Invalid);
}
TEST_F(Cursor, NoStorageClass)
{
auto localVarCursor = translationUnit.cursorAt(62, 9);
auto storageClass = localVarCursor.storageClass();
ASSERT_THAT(storageClass, ClangBackEnd::StorageClass::None);
}
TEST_F(Cursor, ExternVarStorageClass)
{
auto externalVarCursor = translationUnit.cursorAt(133, 12);
auto storageClass = externalVarCursor.storageClass();
ASSERT_THAT(storageClass, ClangBackEnd::StorageClass::Extern);
}
TEST_F(Cursor, StaticMethodStorageClass)
{
auto methodCursor = translationUnit.cursorAt(135, 13);
auto storageClass = methodCursor.storageClass();
ASSERT_THAT(storageClass, ClangBackEnd::StorageClass::Static);
}
TEST_F(Cursor, InvalidStorageClass)
{
auto functionTemplateCursor = translationUnit.cursorAt(137, 28);
auto storageClass = functionTemplateCursor.storageClass();
ASSERT_THAT(storageClass, ClangBackEnd::StorageClass::Invalid);
}
Data *Cursor::d;
void Cursor::SetUpTestCase()