Add debug logging facility
This commit is contained in:
parent
251e9abf5f
commit
da5b46fdb7
4 changed files with 27 additions and 0 deletions
|
|
@ -66,6 +66,7 @@ namespace cppast
|
||||||
/// The severity of a [cppast::diagnostic]().
|
/// The severity of a [cppast::diagnostic]().
|
||||||
enum class severity
|
enum class severity
|
||||||
{
|
{
|
||||||
|
debug, //< A debug diagnostic that is just for debugging purposes.
|
||||||
warning, //< A warning that doesn't impact AST generation.
|
warning, //< A warning that doesn't impact AST generation.
|
||||||
error, //< A non-critical error that does impact AST generation but not critically.
|
error, //< A non-critical error that does impact AST generation but not critically.
|
||||||
critical, //< A critical error where AST generation isn't possible.
|
critical, //< A critical error where AST generation isn't possible.
|
||||||
|
|
@ -77,6 +78,8 @@ namespace cppast
|
||||||
{
|
{
|
||||||
switch (s)
|
switch (s)
|
||||||
{
|
{
|
||||||
|
case severity::debug:
|
||||||
|
return "debug";
|
||||||
case severity::warning:
|
case severity::warning:
|
||||||
return "warning";
|
return "warning";
|
||||||
case severity::error:
|
case severity::error:
|
||||||
|
|
|
||||||
|
|
@ -43,10 +43,23 @@ namespace cppast
|
||||||
return error_;
|
return error_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// \effects Sets whether or not the logger prints debugging diagnostics.
|
||||||
|
void set_verbose(bool value) noexcept
|
||||||
|
{
|
||||||
|
verbose_ = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// \returns Whether or not the logger prints debugging diagnostics.
|
||||||
|
bool is_verbose() const noexcept
|
||||||
|
{
|
||||||
|
return verbose_;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual bool do_log(const char* source, const diagnostic& d) const = 0;
|
virtual bool do_log(const char* source, const diagnostic& d) const = 0;
|
||||||
|
|
||||||
mutable std::atomic<bool> error_;
|
mutable std::atomic<bool> error_;
|
||||||
|
bool verbose_ = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// A [cppast::diagnostic_logger]() that logs to `stderr`.
|
/// A [cppast::diagnostic_logger]() that logs to `stderr`.
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,15 @@ std::unique_ptr<cpp_entity> detail::parse_entity(const detail::parse_context& co
|
||||||
const CXCursor& cur,
|
const CXCursor& cur,
|
||||||
const CXCursor& parent_cur) try
|
const CXCursor& parent_cur) try
|
||||||
{
|
{
|
||||||
|
if (context.logger->is_verbose())
|
||||||
|
{
|
||||||
|
auto message = detail::format("parsing cursor of type '",
|
||||||
|
detail::get_cursor_kind_spelling(cur).c_str(), "'");
|
||||||
|
context.logger->log("libclang parser",
|
||||||
|
diagnostic{std::move(message), detail::make_location(cur),
|
||||||
|
severity::debug});
|
||||||
|
}
|
||||||
|
|
||||||
auto kind = clang_getCursorKind(cur);
|
auto kind = clang_getCursorKind(cur);
|
||||||
switch (kind)
|
switch (kind)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,8 @@ bool diagnostic_logger::log(const char* source, const diagnostic& d) const
|
||||||
{
|
{
|
||||||
if (d.severity == severity::error)
|
if (d.severity == severity::error)
|
||||||
error_ = true;
|
error_ = true;
|
||||||
|
else if (!verbose_ && d.severity == severity::debug)
|
||||||
|
return false;
|
||||||
return do_log(source, d);
|
return do_log(source, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue