File indexing completed on 2024-04-28 16:57:50
0001 /* 0002 This file is part of the clazy static checker. 0003 0004 Copyright (C) 2019 Christian Gagneraud <chgans@gmail.com> 0005 0006 This library is free software; you can redistribute it and/or 0007 modify it under the terms of the GNU Library General Public 0008 License as published by the Free Software Foundation; either 0009 version 2 of the License, or (at your option) any later version. 0010 0011 This library is distributed in the hope that it will be useful, 0012 but WITHOUT ANY WARRANTY; without even the implied warranty of 0013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0014 Library General Public License for more details. 0015 0016 You should have received a copy of the GNU Library General Public License 0017 along with this library; see the file COPYING.LIB. If not, write to 0018 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 0019 Boston, MA 02110-1301, USA. 0020 */ 0021 0022 #ifndef CLAZY_FIX_IT_EXPORTER_H 0023 #define CLAZY_FIX_IT_EXPORTER_H 0024 0025 #include <clang/Basic/Diagnostic.h> 0026 #include <clang/Tooling/Core/Diagnostic.h> 0027 0028 namespace clang { 0029 class FixItOptions; 0030 } 0031 0032 class FixItExporter 0033 : public clang::DiagnosticConsumer 0034 { 0035 public: 0036 explicit FixItExporter(clang::DiagnosticsEngine &DiagEngine, clang::SourceManager &SourceMgr, 0037 const clang::LangOptions &LangOpts, const std::string &exportFixes, 0038 bool isClazyStandalone); 0039 0040 ~FixItExporter() override; 0041 0042 bool IncludeInDiagnosticCounts() const override; 0043 0044 void BeginSourceFile(const clang::LangOptions &LangOpts, 0045 const clang::Preprocessor *PP = nullptr) override; 0046 0047 void EndSourceFile() override; 0048 0049 void HandleDiagnostic(clang::DiagnosticsEngine::Level DiagLevel, 0050 const clang::Diagnostic &Info) override; 0051 0052 void Export(); 0053 0054 /// Emit a diagnostic via the adapted diagnostic client. 0055 void Diag(clang::SourceLocation Loc, unsigned DiagID); 0056 0057 private: 0058 clang::DiagnosticsEngine &DiagEngine; 0059 clang::SourceManager &SourceMgr; 0060 const clang::LangOptions &LangOpts; 0061 const std::string exportFixes; 0062 DiagnosticConsumer *Client = nullptr; 0063 std::unique_ptr<DiagnosticConsumer> Owner; 0064 bool m_recordNotes = false; 0065 clang::tooling::Diagnostic ConvertDiagnostic(const clang::Diagnostic &Info); 0066 clang::tooling::Replacement ConvertFixIt(const clang::FixItHint &Hint); 0067 }; 0068 0069 #endif // CLAZY_FIX_IT_EXPORTER_H