From 325e704ea225c71e4fd88186ab6d630ee94762f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Cser=C3=A9p?= Date: Tue, 9 Apr 2024 06:36:13 +0200 Subject: [PATCH] Skip parsing Objective-C++ files as standard C++. --- plugins/cpp/parser/include/cppparser/cppparser.h | 1 + plugins/cpp/parser/src/cppparser.cpp | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/plugins/cpp/parser/include/cppparser/cppparser.h b/plugins/cpp/parser/include/cppparser/cppparser.h index fa6d10d29..db43ba2fa 100644 --- a/plugins/cpp/parser/include/cppparser/cppparser.h +++ b/plugins/cpp/parser/include/cppparser/cppparser.h @@ -103,6 +103,7 @@ class CppParser : public AbstractParser bool isParsed(const clang::tooling::CompileCommand& command_); bool isSourceFile(const std::string& file_) const; bool isNonSourceFlag(const std::string& arg_) const; + bool isObjectiveCpp(const clang::tooling::CompileCommand& command_) const; bool parseByJson(const std::string& jsonFile_, std::size_t threadNum_); int parseWorker(const clang::tooling::CompileCommand& command_); diff --git a/plugins/cpp/parser/src/cppparser.cpp b/plugins/cpp/parser/src/cppparser.cpp index 16ae1d6c0..a06f553b4 100644 --- a/plugins/cpp/parser/src/cppparser.cpp +++ b/plugins/cpp/parser/src/cppparser.cpp @@ -170,6 +170,16 @@ bool CppParser::isNonSourceFlag(const std::string& arg_) const return arg_.find("-Wl,") == 0; } +bool CppParser::isObjectiveCpp(const clang::tooling::CompileCommand& command_) const +{ + for (std::size_t i = 1; i < command_.CommandLine.size(); ++i) + { + if (command_.CommandLine[i - 1] == "-x" && command_.CommandLine[i] == "objective-c++") + return true; + } + return false; +} + std::map CppParser::extractInputOutputs( const clang::tooling::CompileCommand& command_) const { @@ -755,7 +765,7 @@ bool CppParser::parseByJson( std::remove_if(compileCommands.begin(), compileCommands.end(), [&](const clang::tooling::CompileCommand& c) { - return !isSourceFile(c.Filename); + return !isSourceFile(c.Filename) || isObjectiveCpp(c); }), compileCommands.end());