njames93 created this revision. njames93 added reviewers: alexfh, aaron.ballman, gribozavr2. Herald added a subscriber: xazax.hun. njames93 requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Currently errors detected when parsing the YAML for .clang-tidy files are always printed to errs. For clang-tidy binary workflows this usually isn't an issue, but using clang-tidy as a library for integrations may want to handle displaying those errors in their own specific way. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D92920 Files: clang-tools-extra/clang-tidy/ClangTidyOptions.cpp clang-tools-extra/clang-tidy/ClangTidyOptions.h Index: clang-tools-extra/clang-tidy/ClangTidyOptions.h =================================================================== --- clang-tools-extra/clang-tidy/ClangTidyOptions.h +++ clang-tools-extra/clang-tidy/ClangTidyOptions.h @@ -313,6 +313,11 @@ /// error. llvm::ErrorOr<ClangTidyOptions> parseConfiguration(llvm::StringRef Config); +using DiagCallback = llvm::function_ref<void(const llvm::SMDiagnostic &)>; + +llvm::ErrorOr<ClangTidyOptions> +parseConfigurationWithDiags(llvm::StringRef Config, DiagCallback Handler); + /// Serializes configuration to a YAML-encoded string. std::string configurationAsText(const ClangTidyOptions &Options); Index: clang-tools-extra/clang-tidy/ClangTidyOptions.cpp =================================================================== --- clang-tools-extra/clang-tidy/ClangTidyOptions.cpp +++ clang-tools-extra/clang-tidy/ClangTidyOptions.cpp @@ -389,6 +389,22 @@ return Options; } +static void diagHandlerImpl(const llvm::SMDiagnostic &Diag, void *Ctx) { + (*reinterpret_cast<DiagCallback *>(Ctx))(Diag); +}; + +llvm::ErrorOr<ClangTidyOptions> +parseConfigurationWithDiags(StringRef Config, DiagCallback Handler) { + if (!Handler) + return parseConfiguration(Config); + llvm::yaml::Input Input(Config, nullptr, diagHandlerImpl, &Handler); + ClangTidyOptions Options; + Input >> Options; + if (Input.error()) + return Input.error(); + return Options; +} + std::string configurationAsText(const ClangTidyOptions &Options) { std::string Text; llvm::raw_string_ostream Stream(Text);
Index: clang-tools-extra/clang-tidy/ClangTidyOptions.h =================================================================== --- clang-tools-extra/clang-tidy/ClangTidyOptions.h +++ clang-tools-extra/clang-tidy/ClangTidyOptions.h @@ -313,6 +313,11 @@ /// error. llvm::ErrorOr<ClangTidyOptions> parseConfiguration(llvm::StringRef Config); +using DiagCallback = llvm::function_ref<void(const llvm::SMDiagnostic &)>; + +llvm::ErrorOr<ClangTidyOptions> +parseConfigurationWithDiags(llvm::StringRef Config, DiagCallback Handler); + /// Serializes configuration to a YAML-encoded string. std::string configurationAsText(const ClangTidyOptions &Options); Index: clang-tools-extra/clang-tidy/ClangTidyOptions.cpp =================================================================== --- clang-tools-extra/clang-tidy/ClangTidyOptions.cpp +++ clang-tools-extra/clang-tidy/ClangTidyOptions.cpp @@ -389,6 +389,22 @@ return Options; } +static void diagHandlerImpl(const llvm::SMDiagnostic &Diag, void *Ctx) { + (*reinterpret_cast<DiagCallback *>(Ctx))(Diag); +}; + +llvm::ErrorOr<ClangTidyOptions> +parseConfigurationWithDiags(StringRef Config, DiagCallback Handler) { + if (!Handler) + return parseConfiguration(Config); + llvm::yaml::Input Input(Config, nullptr, diagHandlerImpl, &Handler); + ClangTidyOptions Options; + Input >> Options; + if (Input.error()) + return Input.error(); + return Options; +} + std::string configurationAsText(const ClangTidyOptions &Options) { std::string Text; llvm::raw_string_ostream Stream(Text);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits