diff options
Diffstat (limited to 'clang-tools-extra')
7 files changed, 24 insertions, 26 deletions
diff --git a/clang-tools-extra/clang-tidy/ClangTidy.cpp b/clang-tools-extra/clang-tidy/ClangTidy.cpp index e44dab3faef..8b3506a81c4 100644 --- a/clang-tools-extra/clang-tidy/ClangTidy.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidy.cpp @@ -40,7 +40,6 @@ #include "llvm/Support/Signals.h" #include <algorithm> #include <utility> -#include <vector> using namespace clang::ast_matchers; using namespace clang::driver; @@ -292,8 +291,7 @@ void ClangTidyCheck::setName(StringRef Name) { } std::vector<std::string> getCheckNames(const ClangTidyOptions &Options) { - SmallVector<ClangTidyError, 8> Errors; - clang::tidy::ClangTidyContext Context(&Errors, Options); + clang::tidy::ClangTidyContext Context(Options); ClangTidyASTConsumerFactory Factory(Context, Options); return Factory.getCheckNames(); } @@ -301,11 +299,11 @@ std::vector<std::string> getCheckNames(const ClangTidyOptions &Options) { ClangTidyStats runClangTidy(const ClangTidyOptions &Options, const tooling::CompilationDatabase &Compilations, ArrayRef<std::string> Ranges, - SmallVectorImpl<ClangTidyError> *Errors) { + std::vector<ClangTidyError> *Errors) { // FIXME: Ranges are currently full files. Support selecting specific // (line-)ranges. ClangTool Tool(Compilations, Ranges); - clang::tidy::ClangTidyContext Context(Errors, Options); + clang::tidy::ClangTidyContext Context(Options); ClangTidyDiagnosticConsumer DiagConsumer(Context); Tool.setDiagnosticConsumer(&DiagConsumer); @@ -333,10 +331,11 @@ ClangTidyStats runClangTidy(const ClangTidyOptions &Options, }; Tool.run(new ActionFactory(new ClangTidyASTConsumerFactory(Context, Options))); + *Errors = Context.getErrors(); return Context.getStats(); } -void handleErrors(SmallVectorImpl<ClangTidyError> &Errors, bool Fix) { +void handleErrors(const std::vector<ClangTidyError> &Errors, bool Fix) { ErrorReporter Reporter(Fix); for (const ClangTidyError &Error : Errors) { Reporter.reportDiagnostic(Error.Message, DiagnosticsEngine::Warning, diff --git a/clang-tools-extra/clang-tidy/ClangTidy.h b/clang-tools-extra/clang-tidy/ClangTidy.h index 1bc3e29592d..a0ae18d24a9 100644 --- a/clang-tools-extra/clang-tidy/ClangTidy.h +++ b/clang-tools-extra/clang-tidy/ClangTidy.h @@ -16,6 +16,7 @@ #include "clang/Basic/Diagnostic.h" #include "clang/Basic/SourceManager.h" #include "clang/Tooling/Refactoring.h" +#include <vector> namespace clang { @@ -124,14 +125,14 @@ std::vector<std::string> getCheckNames(const ClangTidyOptions &Options); ClangTidyStats runClangTidy(const ClangTidyOptions &Options, const tooling::CompilationDatabase &Compilations, ArrayRef<std::string> Ranges, - SmallVectorImpl<ClangTidyError> *Errors); + std::vector<ClangTidyError> *Errors); // FIXME: This interface will need to be significantly extended to be useful. // FIXME: Implement confidence levels for displaying/fixing errors. // /// \brief Displays the found \p Errors to the users. If \p Fix is true, \p /// Errors containing fixes are automatically applied. -void handleErrors(SmallVectorImpl<ClangTidyError> &Errors, bool Fix); +void handleErrors(const std::vector<ClangTidyError> &Errors, bool Fix); } // end namespace tidy } // end namespace clang diff --git a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp index ad30898e489..d70305e2d46 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp @@ -119,9 +119,8 @@ bool ChecksFilter::isCheckEnabled(StringRef Name) { return EnableChecks.match(Name) && !DisableChecks.match(Name); } -ClangTidyContext::ClangTidyContext(SmallVectorImpl<ClangTidyError> *Errors, - const ClangTidyOptions &Options) - : Errors(Errors), DiagEngine(nullptr), Options(Options), Filter(Options) {} +ClangTidyContext::ClangTidyContext(const ClangTidyOptions &Options) + : DiagEngine(nullptr), Options(Options), Filter(Options) {} DiagnosticBuilder ClangTidyContext::diag( StringRef CheckName, SourceLocation Loc, StringRef Description, @@ -158,7 +157,7 @@ void ClangTidyContext::setSourceManager(SourceManager *SourceMgr) { /// \brief Store a \c ClangTidyError. void ClangTidyContext::storeError(const ClangTidyError &Error) { - Errors->push_back(Error); + Errors.push_back(Error); } StringRef ClangTidyContext::getCheckName(unsigned DiagnosticID) const { @@ -201,6 +200,7 @@ void ClangTidyDiagnosticConsumer::HandleDiagnostic( assert(!Errors.empty() && "A diagnostic note can only be appended to a message."); } else { + // FIXME: Pass all errors here regardless of filters and non-user code. finalizeLastError(); StringRef WarningOption = Context.DiagEngine->getDiagnosticIDs()->getWarningOptionForDiag( diff --git a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h index c030a67013a..c208717bc8d 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h +++ b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h @@ -90,8 +90,7 @@ struct ClangTidyStats { /// \endcode class ClangTidyContext { public: - ClangTidyContext(SmallVectorImpl<ClangTidyError> *Errors, - const ClangTidyOptions &Options); + ClangTidyContext(const ClangTidyOptions &Options); /// \brief Report any errors detected using this method. /// @@ -120,6 +119,7 @@ public: ChecksFilter &getChecksFilter() { return Filter; } const ClangTidyOptions &getOptions() const { return Options; } const ClangTidyStats &getStats() const { return Stats; } + const std::vector<ClangTidyError> &getErrors() const { return Errors; } private: friend class ClangTidyDiagnosticConsumer; // Calls storeError(). @@ -127,7 +127,7 @@ private: /// \brief Store a \c ClangTidyError. void storeError(const ClangTidyError &Error); - SmallVectorImpl<ClangTidyError> *Errors; + std::vector<ClangTidyError> Errors; DiagnosticsEngine *DiagEngine; ClangTidyOptions Options; ChecksFilter Filter; diff --git a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp index 624e6c05f9b..5c136bc3a52 100644 --- a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp +++ b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp @@ -102,7 +102,7 @@ int main(int argc, const char **argv) { return 0; } - SmallVector<clang::tidy::ClangTidyError, 16> Errors; + std::vector<clang::tidy::ClangTidyError> Errors; clang::tidy::ClangTidyStats Stats = clang::tidy::runClangTidy(Options, OptionsParser.getCompilations(), OptionsParser.getSourcePathList(), &Errors); diff --git a/clang-tools-extra/unittests/clang-tidy/ClangTidyDiagnosticConsumerTest.cpp b/clang-tools-extra/unittests/clang-tidy/ClangTidyDiagnosticConsumerTest.cpp index 08255a62ef9..81e90715903 100644 --- a/clang-tools-extra/unittests/clang-tidy/ClangTidyDiagnosticConsumerTest.cpp +++ b/clang-tools-extra/unittests/clang-tidy/ClangTidyDiagnosticConsumerTest.cpp @@ -20,8 +20,8 @@ public: }; TEST(ClangTidyDiagnosticConsumer, SortsErrors) { - SmallVector<ClangTidyError, 8> Errors; - runCheckOnCode<TestCheck>("int a;", Errors); + std::vector<ClangTidyError> Errors; + runCheckOnCode<TestCheck>("int a;", &Errors); EXPECT_EQ(2ul, Errors.size()); // FIXME: Remove " []" once the check name is removed from the message text. EXPECT_EQ("type specifier []", Errors[0].Message.Message); diff --git a/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h b/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h index b18a0767f47..7c97e73af50 100644 --- a/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h +++ b/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h @@ -41,9 +41,10 @@ private: template <typename T> std::string runCheckOnCode(StringRef Code, - SmallVectorImpl<ClangTidyError> &Errors) { + std::vector<ClangTidyError> *Errors = nullptr) { T Check; - ClangTidyContext Context(&Errors, ClangTidyOptions()); + ClangTidyOptions Options; + ClangTidyContext Context(Options); ClangTidyDiagnosticConsumer DiagConsumer(Context); Check.setContext(&Context); std::vector<std::string> ArgCXX11(1, "-std=c++11"); @@ -59,16 +60,13 @@ std::string runCheckOnCode(StringRef Code, return ""; DiagConsumer.finish(); tooling::Replacements Fixes; - for (const ClangTidyError &Error : Errors) + for (const ClangTidyError &Error : Context.getErrors()) Fixes.insert(Error.Fix.begin(), Error.Fix.end()); + if (Errors) + *Errors = Context.getErrors(); return tooling::applyAllReplacements(Code, Fixes); } -template <typename T> std::string runCheckOnCode(StringRef Code) { - SmallVector<ClangTidyError, 16> Errors; - return runCheckOnCode<T>(Code, Errors); -} - } // namespace test } // namespace tidy } // namespace clang |

