File indexing completed on 2024-04-28 04:38:07

0001 /*
0002     SPDX-FileCopyrightText: 2015 Sergey Kalinichev <kalinichev.so.0@gmail.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "clanghighlighting.h"
0008 
0009 #include "duchain/macrodefinition.h"
0010 
0011 #include <language/duchain/topducontext.h>
0012 
0013 using namespace KDevelop;
0014 
0015 class ClangHighlighting::Instance : public KDevelop::CodeHighlightingInstance
0016 {
0017 public:
0018     explicit Instance(const KDevelop::CodeHighlighting* highlighting);
0019 
0020     CodeHighlightingType typeForDeclaration(KDevelop::Declaration* dec, KDevelop::DUContext* context) const override
0021     {
0022         if (auto macro = dynamic_cast<MacroDefinition*>(dec)) {
0023             if (macro->isFunctionLike()) {
0024                 return CodeHighlightingType::MacroFunctionLike;
0025             }
0026         }
0027 
0028         return CodeHighlightingInstance::typeForDeclaration(dec, context);
0029     }
0030 
0031     bool useRainbowColor(KDevelop::Declaration* dec) const override
0032     {
0033         return dec->context()->type() == DUContext::Function || dec->context()->type() == DUContext::Other;
0034     }
0035 
0036 };
0037 
0038 ClangHighlighting::Instance::Instance(const KDevelop::CodeHighlighting* highlighting)
0039     : KDevelop::CodeHighlightingInstance(highlighting)
0040 {
0041 }
0042 
0043 ClangHighlighting::ClangHighlighting(QObject* parent)
0044     : KDevelop::CodeHighlighting(parent)
0045 {
0046 }
0047 
0048 KDevelop::CodeHighlightingInstance* ClangHighlighting::createInstance() const
0049 {
0050     return new Instance(this);
0051 }
0052 
0053 #include "moc_clanghighlighting.cpp"