diff --git a/include/cppast/parser.hpp b/include/cppast/parser.hpp index 5d4abab..ef35fbb 100644 --- a/include/cppast/parser.hpp +++ b/include/cppast/parser.hpp @@ -21,7 +21,8 @@ namespace cppast class diagnostic_logger { public: - diagnostic_logger() noexcept : verbose_(false) + /// \effects Creates it either as verbose or not. + explicit diagnostic_logger(bool is_verbose = false) noexcept : verbose_(is_verbose) { } @@ -52,11 +53,20 @@ namespace cppast bool verbose_; }; + /// \returns The default logger object. + type_safe::object_ref default_logger() noexcept; + + /// \returns The default verbose logger object. + type_safe::object_ref default_verbose_logger() noexcept; + /// A [cppast::diagnostic_logger]() that logs to `stderr`. /// /// It prints all diagnostics in an implementation-defined format. class stderr_diagnostic_logger final : public diagnostic_logger { + public: + using diagnostic_logger::diagnostic_logger; + private: bool do_log(const char* source, const diagnostic& d) const override; }; diff --git a/src/parser.cpp b/src/parser.cpp index 05b7789..172f628 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -18,6 +18,18 @@ bool diagnostic_logger::log(const char* source, const diagnostic& d) const return do_log(source, d); } +type_safe::object_ref cppast::default_logger() noexcept +{ + static const stderr_diagnostic_logger logger(false); + return type_safe::ref(logger); +} + +type_safe::object_ref cppast::default_verbose_logger() noexcept +{ + static const stderr_diagnostic_logger logger(true); + return type_safe::ref(logger); +} + bool stderr_diagnostic_logger::do_log(const char* source, const diagnostic& d) const { auto loc = d.location.to_string(); diff --git a/test/test_parser.hpp b/test/test_parser.hpp index 09ade72..aa4cf0d 100644 --- a/test/test_parser.hpp +++ b/test/test_parser.hpp @@ -31,8 +31,7 @@ inline std::unique_ptr parse_file(const cppast::cpp_entity_ind libclang_compile_config config; config.set_flags(cpp_standard::cpp_latest); - stderr_diagnostic_logger logger; - libclang_parser p(type_safe::ref(logger)); + libclang_parser p(default_logger()); std::unique_ptr result; REQUIRE_NOTHROW(result = p.parse(idx, name, config));