diff --git a/src/plugins/clangcodemodel/clangtextmark.cpp b/src/plugins/clangcodemodel/clangtextmark.cpp index 1a886c248ed..166a55e4f31 100644 --- a/src/plugins/clangcodemodel/clangtextmark.cpp +++ b/src/plugins/clangcodemodel/clangtextmark.cpp @@ -7,7 +7,6 @@ #include "clangconstants.h" #include "clangdclient.h" #include "clangdiagnostictooltipwidget.h" -#include "clangeditordocumentprocessor.h" #include "clangutils.h" #include @@ -49,46 +48,15 @@ Project *projectForCurrentEditor() if (filePath.isEmpty()) return nullptr; - if (auto processor = ClangEditorDocumentProcessor::get(filePath)) { - if (ProjectPart::ConstPtr projectPart = processor->projectPart()) - return projectForProjectPart(*projectPart); - } + if (ProjectPart::ConstPtr projectPart = projectPartForFile(filePath)) + return projectForProjectPart(*projectPart); return nullptr; } -enum class DiagnosticType { Clang, Tidy, Clazy }; -DiagnosticType diagnosticType(const ClangDiagnostic &diagnostic) - -{ - if (!diagnostic.disableOption.isEmpty()) - return DiagnosticType::Clang; - - const DiagnosticTextInfo textInfo(diagnostic.text); - if (DiagnosticTextInfo::isClazyOption(textInfo.option())) - return DiagnosticType::Clazy; - return DiagnosticType::Tidy; -} - void disableDiagnosticInConfig(ClangDiagnosticConfig &config, const ClangDiagnostic &diagnostic) { - switch (diagnosticType(diagnostic)) { - case DiagnosticType::Clang: - config.setClangOptions(config.clangOptions() + QStringList(diagnostic.disableOption)); - break; - case DiagnosticType::Tidy: - config.setChecks(ClangToolType::Tidy, config.checks(ClangToolType::Tidy) + QString(",-") - + DiagnosticTextInfo(diagnostic.text).option()); - break; - case DiagnosticType::Clazy: { - const DiagnosticTextInfo textInfo(diagnostic.text); - const QString checkName = DiagnosticTextInfo::clazyCheckName(textInfo.option()); - QStringList newChecks = config.checks(ClangToolType::Clazy).split(','); - newChecks.removeOne(checkName); - config.setChecks(ClangToolType::Clazy, newChecks.join(',')); - break; - } - } + config.setClangOptions(config.clangOptions() + QStringList(diagnostic.disableOption)); } ClangDiagnosticConfig diagnosticConfig() @@ -210,8 +178,10 @@ ClangDiagnostic convertDiagnostic(const ClangdDiagnostic &src, target.severity = convertSeverity(*src.severity()); const Diagnostic::Code code = src.code().value_or(Diagnostic::Code()); const QString * const codeString = std::get_if(&code); - if (codeString && codeString->startsWith("-W")) + if (codeString && codeString->startsWith("-W")) { target.enableOption = *codeString; + target.disableOption = "-Wno-" + codeString->mid(2); + } for (const CodeAction &codeAction : src.codeActions().value_or(QList())) { const std::optional edit = codeAction.edit(); if (!edit) @@ -304,15 +274,17 @@ ClangdTextMark::ClangdTextMark(TextEditor::TextDocument *doc, actions << action; // Remove diagnostic warning action - Project *project = projectForCurrentEditor(); - if (project && isDiagnosticConfigChangable(project)) { - action = new QAction(); - action->setIcon(Icons::BROKEN.icon()); - action->setToolTip(Tr::tr("Disable Diagnostic in Current Project")); - QObject::connect(action, &QAction::triggered, [diag] { - disableDiagnosticInCurrentProjectConfig(diag); - }); - actions << action; + if (!diag.disableOption.isEmpty()) { + if (Project * const project = projectForCurrentEditor(); + project && isDiagnosticConfigChangable(project)) { + action = new QAction(); + action->setIcon(Icons::BROKEN.icon()); + action->setToolTip(Tr::tr("Disable Diagnostic in Current Project")); + QObject::connect(action, &QAction::triggered, [diag] { + disableDiagnosticInCurrentProjectConfig(diag); + }); + actions << action; + } } return actions; }); diff --git a/src/plugins/cppeditor/cppcodemodelsettings.cpp b/src/plugins/cppeditor/cppcodemodelsettings.cpp index d0976b8128d..7a32011cf54 100644 --- a/src/plugins/cppeditor/cppcodemodelsettings.cpp +++ b/src/plugins/cppeditor/cppcodemodelsettings.cpp @@ -492,6 +492,7 @@ void ClangdProjectSettings::setDiagnosticConfigId(Utils::Id configId) { m_customSettings.diagnosticConfigId = configId; saveSettings(); + emit ClangdSettings::instance().changed(); } void ClangdProjectSettings::blockIndexing()