From 21d947ed6c597576c19cd030d49dccbc50196d92 Mon Sep 17 00:00:00 2001 From: mlangkabel Date: Mon, 10 Dec 2018 16:26:38 +0100 Subject: [PATCH] src: updated SymbolKind enum * removed SymbolKinds for Parameter and LocalSymbol, because these are not stored as symbols inside the database * added Module symbol kind for Python --- bin/app/data/color_schemes/bad_rainbow.xml | 3 ++ bin/app/data/color_schemes/bright.xml | 3 ++ bin/app/data/color_schemes/dark.xml | 3 ++ .../main/java/com/sourcetrail/SymbolKind.java | 19 +++++----- .../component/controller/GraphController.cpp | 2 + src/lib/data/NodeType.cpp | 10 +++++ src/lib/data/NodeType.h | 37 ++++++++++--------- src/lib/data/NodeTypeSet.cpp | 1 + src/lib/data/parser/ParserClientImpl.cpp | 2 + src/lib/data/parser/SymbolKind.cpp | 7 +--- src/lib/data/parser/SymbolKind.h | 19 +++++----- .../storage/sqlite/SqliteIndexStorage.cpp | 2 +- .../cxx/CxxAstVisitorComponentIndexer.cpp | 7 ++-- src/lib_cxx/data/parser/cxx/utilityClang.cpp | 24 +++++++----- src/lib_cxx/data/parser/cxx/utilityClang.h | 2 + src/lib_gui/qt/view/QtGraphView.cpp | 2 +- src/test/helper/TestIntermediateStorage.h | 5 +++ 17 files changed, 90 insertions(+), 58 deletions(-) diff --git a/bin/app/data/color_schemes/bad_rainbow.xml b/bin/app/data/color_schemes/bad_rainbow.xml index 9ae6aa10..d8f0ff7e 100644 --- a/bin/app/data/color_schemes/bad_rainbow.xml +++ b/bin/app/data/color_schemes/bad_rainbow.xml @@ -349,6 +349,9 @@ #B05151 + + namespace + namespace diff --git a/bin/app/data/color_schemes/bright.xml b/bin/app/data/color_schemes/bright.xml index c73d4ca1..337fa5a8 100644 --- a/bin/app/data/color_schemes/bright.xml +++ b/bin/app/data/color_schemes/bright.xml @@ -338,6 +338,9 @@ #FFDEDE + + namespace + namespace diff --git a/bin/app/data/color_schemes/dark.xml b/bin/app/data/color_schemes/dark.xml index 984180c8..e0157f6f 100644 --- a/bin/app/data/color_schemes/dark.xml +++ b/bin/app/data/color_schemes/dark.xml @@ -341,6 +341,9 @@ #521B1F + + namespace + namespace diff --git a/java_indexer/src/main/java/com/sourcetrail/SymbolKind.java b/java_indexer/src/main/java/com/sourcetrail/SymbolKind.java index 7f821ad7..469e9a75 100644 --- a/java_indexer/src/main/java/com/sourcetrail/SymbolKind.java +++ b/java_indexer/src/main/java/com/sourcetrail/SymbolKind.java @@ -11,18 +11,17 @@ public enum SymbolKind FUNCTION(7), GLOBAL_VARIABLE(8), INTERFACE(9), - LOCAL_VARIABLE(10), - MACRO(11), - METHOD(12), + MACRO(10), + METHOD(11), + MODULE(12), NAMESPACE(13), PACKAGE(14), - PARAMETER(15), - STRUCT(16), - TEMPLATE_PARAMETER(17), - TYPEDEF(18), - TYPE_PARAMETER(19), - UNION(20), - TYPE_MAX(21); + STRUCT(15), + TEMPLATE_PARAMETER(16), + TYPEDEF(17), + TYPE_PARAMETER(18), + UNION(19), + TYPE_MAX(20); private final int m_value; diff --git a/src/lib/component/controller/GraphController.cpp b/src/lib/component/controller/GraphController.cpp index ead358fd..c51db66d 100644 --- a/src/lib/component/controller/GraphController.cpp +++ b/src/lib/component/controller/GraphController.cpp @@ -2377,6 +2377,8 @@ void GraphController::createLegendGraph() addNode(NodeType::NODE_MACRO, L"Macro", Vec2i(x, y + dy * ++i)); addNode(NodeType::NODE_ANNOTATION, L"Annotation", Vec2i(x, y + dy * ++i)); + addNode(NodeType::NODE_MODULE, L"module", Vec2i(x, y + dy * ++i)); + y -= 15; addNode(NodeType::NODE_NAMESPACE, L"namespace", Vec2i(x, y + dy * ++i)); y -= 15; addNode(NodeType::NODE_PACKAGE, L"package", Vec2i(x, y + dy * ++i)); diff --git a/src/lib/data/NodeType.cpp b/src/lib/data/NodeType.cpp index e00135cd..6eeea415 100644 --- a/src/lib/data/NodeType.cpp +++ b/src/lib/data/NodeType.cpp @@ -9,6 +9,7 @@ std::vector NodeType::getOverviewBundleNodeTypesOrdered() NodeType(NodeType::NODE_FILE), NodeType(NodeType::NODE_MACRO), NodeType(NodeType::NODE_ANNOTATION), + NodeType(NodeType::NODE_MODULE), NodeType(NodeType::NODE_NAMESPACE), NodeType(NodeType::NODE_PACKAGE), NodeType(NodeType::NODE_CLASS), @@ -36,6 +37,8 @@ NodeType::Type NodeType::intToType(int value) return NodeType::NODE_TYPE; case NodeType::NODE_BUILTIN_TYPE: return NodeType::NODE_BUILTIN_TYPE; + case NodeType::NODE_MODULE: + return NodeType::NODE_MODULE; case NodeType::NODE_NAMESPACE: return NodeType::NODE_NAMESPACE; case NodeType::NODE_PACKAGE: @@ -87,6 +90,8 @@ std::string NodeType::getReadableTypeString(NodeType::Type type) return "built-in type"; case NodeType::NODE_TYPE: return "type"; + case NodeType::NODE_MODULE: + return "module"; case NodeType::NODE_NAMESPACE: return "namespace"; case NodeType::NODE_PACKAGE: @@ -211,6 +216,7 @@ bool NodeType::isInheritable() const bool NodeType::isPackage() const { const NodeType::TypeMask mask = + NodeType::NODE_MODULE | NodeType::NODE_NAMESPACE | NodeType::NODE_PACKAGE; return ((m_type & mask) > 0); @@ -288,6 +294,7 @@ bool NodeType::hasSearchFilter() const { const NodeType::TypeMask mask = NodeType::NODE_BUILTIN_TYPE | + NodeType::NODE_MODULE | NodeType::NODE_NAMESPACE | NodeType::NODE_PACKAGE | NodeType::NODE_STRUCT | @@ -327,6 +334,8 @@ Tree NodeType::getOverviewBundleTree() const )); return tree; } + case NodeType::NODE_MODULE: + return Tree(BundleInfo(L"Modules")); case NodeType::NODE_PACKAGE: return Tree(BundleInfo(L"Packages")); case NodeType::NODE_CLASS: @@ -401,6 +410,7 @@ NodeType::StyleType NodeType::getNodeStyle() const { switch (m_type) { + case NodeType::NODE_MODULE: case NodeType::NODE_NAMESPACE: case NodeType::NODE_PACKAGE: return STYLE_PACKAGE; diff --git a/src/lib/data/NodeType.h b/src/lib/data/NodeType.h index 83d771e3..2989a16b 100644 --- a/src/lib/data/NodeType.h +++ b/src/lib/data/NodeType.h @@ -21,25 +21,26 @@ public: NODE_TYPE = 1 << 1, NODE_BUILTIN_TYPE = 1 << 2, - NODE_NAMESPACE = 1 << 3, - NODE_PACKAGE = 1 << 4, - NODE_STRUCT = 1 << 5, - NODE_CLASS = 1 << 6, - NODE_INTERFACE = 1 << 7, - NODE_ANNOTATION = 1 << 8, - NODE_GLOBAL_VARIABLE = 1 << 9, - NODE_FIELD = 1 << 10, - NODE_FUNCTION = 1 << 11, - NODE_METHOD = 1 << 12, - NODE_ENUM = 1 << 13, - NODE_ENUM_CONSTANT = 1 << 14, - NODE_TYPEDEF = 1 << 15, - NODE_TEMPLATE_PARAMETER = 1 << 16, - NODE_TYPE_PARAMETER = 1 << 17, + NODE_MODULE = 1 << 3, + NODE_NAMESPACE = 1 << 4, + NODE_PACKAGE = 1 << 5, + NODE_STRUCT = 1 << 6, + NODE_CLASS = 1 << 7, + NODE_INTERFACE = 1 << 8, + NODE_ANNOTATION = 1 << 9, + NODE_GLOBAL_VARIABLE = 1 << 10, + NODE_FIELD = 1 << 11, + NODE_FUNCTION = 1 << 12, + NODE_METHOD = 1 << 13, + NODE_ENUM = 1 << 14, + NODE_ENUM_CONSTANT = 1 << 15, + NODE_TYPEDEF = 1 << 16, + NODE_TEMPLATE_PARAMETER = 1 << 17, + NODE_TYPE_PARAMETER = 1 << 18, - NODE_FILE = 1 << 18, - NODE_MACRO = 1 << 19, - NODE_UNION = 1 << 20, + NODE_FILE = 1 << 19, + NODE_MACRO = 1 << 20, + NODE_UNION = 1 << 21, NODE_MAX_VALUE = NODE_UNION }; diff --git a/src/lib/data/NodeTypeSet.cpp b/src/lib/data/NodeTypeSet.cpp index b12c7379..63c3bff5 100644 --- a/src/lib/data/NodeTypeSet.cpp +++ b/src/lib/data/NodeTypeSet.cpp @@ -176,6 +176,7 @@ const std::vector NodeTypeSet::s_allNodeTypes = { NodeType(NodeType::NODE_SYMBOL), NodeType(NodeType::NODE_TYPE), NodeType(NodeType::NODE_BUILTIN_TYPE), + NodeType(NodeType::NODE_MODULE), NodeType(NodeType::NODE_NAMESPACE), NodeType(NodeType::NODE_PACKAGE), NodeType(NodeType::NODE_STRUCT), diff --git a/src/lib/data/parser/ParserClientImpl.cpp b/src/lib/data/parser/ParserClientImpl.cpp index bd72c502..b96d441f 100644 --- a/src/lib/data/parser/ParserClientImpl.cpp +++ b/src/lib/data/parser/ParserClientImpl.cpp @@ -120,6 +120,8 @@ NodeType ParserClientImpl::symbolKindToNodeType(SymbolKind symbolKind) const return NodeType::NODE_MACRO; case SYMBOL_METHOD: return NodeType::NODE_METHOD; + case SYMBOL_MODULE: + return NodeType::NODE_MODULE; case SYMBOL_NAMESPACE: return NodeType::NODE_NAMESPACE; case SYMBOL_PACKAGE: diff --git a/src/lib/data/parser/SymbolKind.cpp b/src/lib/data/parser/SymbolKind.cpp index 86b948fe..3615902a 100644 --- a/src/lib/data/parser/SymbolKind.cpp +++ b/src/lib/data/parser/SymbolKind.cpp @@ -22,18 +22,16 @@ SymbolKind intToSymbolKind(int v) return SYMBOL_GLOBAL_VARIABLE; case SYMBOL_INTERFACE: return SYMBOL_INTERFACE; - case SYMBOL_LOCAL_VARIABLE: - return SYMBOL_LOCAL_VARIABLE; case SYMBOL_MACRO: return SYMBOL_MACRO; case SYMBOL_METHOD: return SYMBOL_METHOD; + case SYMBOL_MODULE: + return SYMBOL_MODULE; case SYMBOL_NAMESPACE: return SYMBOL_NAMESPACE; case SYMBOL_PACKAGE: return SYMBOL_PACKAGE; - case SYMBOL_PARAMETER: - return SYMBOL_PARAMETER; case SYMBOL_STRUCT: return SYMBOL_STRUCT; case SYMBOL_TEMPLATE_PARAMETER: @@ -52,4 +50,3 @@ int symbolKindToInt(SymbolKind t) { return t; } - diff --git a/src/lib/data/parser/SymbolKind.h b/src/lib/data/parser/SymbolKind.h index 685fe278..17e51702 100644 --- a/src/lib/data/parser/SymbolKind.h +++ b/src/lib/data/parser/SymbolKind.h @@ -12,18 +12,17 @@ enum SymbolKind SYMBOL_FUNCTION = 7, SYMBOL_GLOBAL_VARIABLE = 8, SYMBOL_INTERFACE = 9, - SYMBOL_LOCAL_VARIABLE = 10, - SYMBOL_MACRO = 11, - SYMBOL_METHOD = 12, + SYMBOL_MACRO = 10, + SYMBOL_METHOD = 11, + SYMBOL_MODULE = 12, SYMBOL_NAMESPACE = 13, SYMBOL_PACKAGE = 14, - SYMBOL_PARAMETER = 15, - SYMBOL_STRUCT = 16, - SYMBOL_TEMPLATE_PARAMETER = 17, - SYMBOL_TYPEDEF = 18, - SYMBOL_TYPE_PARAMETER = 19, - SYMBOL_UNION = 20, - SYMBOL_KIND_MAX = 21 + SYMBOL_STRUCT = 15, + SYMBOL_TEMPLATE_PARAMETER = 16, + SYMBOL_TYPEDEF = 17, + SYMBOL_TYPE_PARAMETER = 18, + SYMBOL_UNION = 19, + SYMBOL_KIND_MAX = 20 }; SymbolKind intToSymbolKind(int v); diff --git a/src/lib/data/storage/sqlite/SqliteIndexStorage.cpp b/src/lib/data/storage/sqlite/SqliteIndexStorage.cpp index 5e1de877..51b8a301 100644 --- a/src/lib/data/storage/sqlite/SqliteIndexStorage.cpp +++ b/src/lib/data/storage/sqlite/SqliteIndexStorage.cpp @@ -11,7 +11,7 @@ #include "SourceLocationFile.h" #include "utilityString.h" -const size_t SqliteIndexStorage::s_storageVersion = 21; +const size_t SqliteIndexStorage::s_storageVersion = 22; namespace { diff --git a/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp b/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp index 42e38c06..c8e8d9e7 100644 --- a/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp +++ b/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp @@ -122,8 +122,7 @@ void CxxAstVisitorComponentIndexer::beginTraverseLambdaCapture(clang::LambdaExpr if ((!lambdaExpr->isInitCapture(capture)) && (capture->capturesVariable())) { clang::VarDecl* d = capture->getCapturedVar(); - SymbolKind symbolKind = utility::getSymbolKind(d); - if (symbolKind == SYMBOL_LOCAL_VARIABLE || symbolKind == SYMBOL_PARAMETER) + if (utility::isLocalVariable(d) || utility::isParameter(d)) { if (!d->getNameAsString().empty()) // don't record anonymous parameters { @@ -205,8 +204,7 @@ void CxxAstVisitorComponentIndexer::visitVarDecl(clang::VarDecl* d) { if (getAstVisitor()->shouldVisitDecl(d)) { - SymbolKind symbolKind = utility::getSymbolKind(d); - if (symbolKind == SYMBOL_LOCAL_VARIABLE || symbolKind == SYMBOL_PARAMETER) + if (utility::isLocalVariable(d) || utility::isParameter(d)) { if (!d->getNameAsString().empty()) // don't record anonymous parameters { @@ -215,6 +213,7 @@ void CxxAstVisitorComponentIndexer::visitVarDecl(clang::VarDecl* d) } else { + const SymbolKind symbolKind = utility::getSymbolKind(d); const ParseLocation location = getParseLocation(d->getLocation()); Id symbolId = getOrCreateSymbolId(d); diff --git a/src/lib_cxx/data/parser/cxx/utilityClang.cpp b/src/lib_cxx/data/parser/cxx/utilityClang.cpp index d02974a5..2f6470e6 100644 --- a/src/lib_cxx/data/parser/cxx/utilityClang.cpp +++ b/src/lib_cxx/data/parser/cxx/utilityClang.cpp @@ -85,15 +85,25 @@ SymbolKind utility::convertTagKind(const clang::TagTypeKind tagKind) } } +bool utility::isLocalVariable(const clang::VarDecl* d) +{ + if (!llvm::isa(d) && !(d->getParentFunctionOrMethod() == nullptr)) + { + return true; + } + return false; +} + +bool utility::isParameter(const clang::VarDecl* d) +{ + return llvm::isa(d); +} + SymbolKind utility::getSymbolKind(const clang::VarDecl* d) { SymbolKind symbolKind = SYMBOL_KIND_MAX; - if (llvm::isa(d)) - { - symbolKind = SYMBOL_PARAMETER; - } - else if (d->getParentFunctionOrMethod() == nullptr) + if (d->getParentFunctionOrMethod() == nullptr) { if (d->getAccess() == clang::AS_none) { @@ -104,10 +114,6 @@ SymbolKind utility::getSymbolKind(const clang::VarDecl* d) symbolKind = SYMBOL_FIELD; } } - else - { - symbolKind = SYMBOL_LOCAL_VARIABLE; - } return symbolKind; } diff --git a/src/lib_cxx/data/parser/cxx/utilityClang.h b/src/lib_cxx/data/parser/cxx/utilityClang.h index 80c11173..0fad3b06 100644 --- a/src/lib_cxx/data/parser/cxx/utilityClang.h +++ b/src/lib_cxx/data/parser/cxx/utilityClang.h @@ -24,6 +24,8 @@ namespace utility bool isImplicit(const clang::Decl* d); AccessKind convertAccessSpecifier(clang::AccessSpecifier access); SymbolKind convertTagKind(const clang::TagTypeKind tagKind); + bool isLocalVariable(const clang::VarDecl* d); + bool isParameter(const clang::VarDecl* d); SymbolKind getSymbolKind(const clang::VarDecl* d); std::wstring getFileNameOfFileEntry(const clang::FileEntry* entry); diff --git a/src/lib_gui/qt/view/QtGraphView.cpp b/src/lib_gui/qt/view/QtGraphView.cpp index 5cacac8c..154ef315 100644 --- a/src/lib_gui/qt/view/QtGraphView.cpp +++ b/src/lib_gui/qt/view/QtGraphView.cpp @@ -171,7 +171,7 @@ void QtGraphView::initView() m_groupNamespaceButton->setObjectName("group_left_button"); m_groupFileButton->setToolTip("group by file"); - m_groupNamespaceButton->setToolTip("group by package/namespace"); + m_groupNamespaceButton->setToolTip("group by package/namespace/module"); m_groupFileButton->setCheckable(true); m_groupNamespaceButton->setCheckable(true); diff --git a/src/test/helper/TestIntermediateStorage.h b/src/test/helper/TestIntermediateStorage.h index 716566eb..1a1e09c6 100644 --- a/src/test/helper/TestIntermediateStorage.h +++ b/src/test/helper/TestIntermediateStorage.h @@ -299,6 +299,7 @@ public: std::vector globalVariables; std::vector methods; std::vector namespaces; + std::vector modules; std::vector structs; std::vector macros; std::vector templateParameterTypes; @@ -349,6 +350,8 @@ private: return L"SYMBOL_MACRO"; case NodeType::NODE_METHOD: return L"SYMBOL_METHOD"; + case NodeType::NODE_MODULE: + return L"SYMBOL_MODULE"; case NodeType::NODE_NAMESPACE: return L"SYMBOL_NAMESPACE"; case NodeType::NODE_PACKAGE: @@ -437,6 +440,8 @@ private: return &globalVariables; case NodeType::NODE_METHOD: return &methods; + case NodeType::NODE_MODULE: + return &modules; case NodeType::NODE_NAMESPACE: return &namespaces; case NodeType::NODE_STRUCT: