File indexing completed on 2024-05-12 05:52:05
0001 /* 0002 SPDX-FileCopyrightText: 2019 Mark Nauwelaerts <mark.nauwelaerts@gmail.com> 0003 SPDX-FileCopyrightText: 2022 Waqar Ahmed <waqar.17a@gmail.com> 0004 SPDX-License-Identifier: MIT 0005 */ 0006 #pragma once 0007 0008 #include <KConfigGroup> 0009 #include <QList> 0010 #include <QSet> 0011 #include <QString> 0012 0013 class SessionDiagnosticSuppressions 0014 { 0015 // file -> suppression 0016 // (empty file matches any file) 0017 QHash<QString, QSet<QString>> m_suppressions; 0018 const QString ENTRY_PREFIX{QStringLiteral("File_")}; 0019 0020 public: 0021 void readSessionConfig(const KConfigGroup &cg) 0022 { 0023 const auto groups = cg.keyList(); 0024 for (const auto &fkey : groups) { 0025 if (fkey.startsWith(ENTRY_PREFIX)) { 0026 QString fname = fkey.mid(ENTRY_PREFIX.size()); 0027 QStringList entries = cg.readEntry(fkey, QStringList()); 0028 if (entries.size()) { 0029 m_suppressions[fname] = {entries.begin(), entries.end()}; 0030 } 0031 } 0032 } 0033 } 0034 0035 void writeSessionConfig(KConfigGroup &cg) 0036 { 0037 // clear existing entries 0038 cg.deleteGroup(QLatin1String()); 0039 for (auto it = m_suppressions.begin(); it != m_suppressions.end(); ++it) { 0040 QStringList entries = it.value().values(); 0041 if (entries.size()) { 0042 cg.writeEntry(ENTRY_PREFIX + it.key(), entries); 0043 } 0044 } 0045 } 0046 0047 void add(const QString &file, const QString &diagnostic) 0048 { 0049 m_suppressions[file].insert(diagnostic); 0050 } 0051 0052 void remove(const QString &file, const QString &diagnostic) 0053 { 0054 auto it = m_suppressions.find(file); 0055 if (it != m_suppressions.end()) { 0056 it->remove(diagnostic); 0057 } 0058 } 0059 0060 bool hasSuppression(const QString &file, const QString &diagnostic) 0061 { 0062 auto it = m_suppressions.find(file); 0063 if (it != m_suppressions.end()) { 0064 return it->contains(diagnostic); 0065 } else { 0066 return false; 0067 } 0068 } 0069 0070 std::vector<QString> getSuppressions(const QString &file) 0071 { 0072 std::vector<QString> result; 0073 0074 for (const auto &entry : {QString(), file}) { 0075 auto it = m_suppressions.find(entry); 0076 if (it != m_suppressions.end()) { 0077 const auto ds = it.value(); 0078 for (const auto &d : ds) { 0079 result.push_back(d); 0080 } 0081 } 0082 } 0083 return result; 0084 } 0085 };