add some comments
This commit is contained in:
parent
721943e1d4
commit
94427ffee3
|
@ -10,13 +10,16 @@ namespace nix {
|
||||||
|
|
||||||
const std::string nativeSystem = SYSTEM;
|
const std::string nativeSystem = SYSTEM;
|
||||||
|
|
||||||
|
// addPrefix is used for show-trace. Strings added with addPrefix
|
||||||
|
// will print ahead of the error itself.
|
||||||
BaseError & BaseError::addPrefix(const FormatOrString & fs)
|
BaseError & BaseError::addPrefix(const FormatOrString & fs)
|
||||||
{
|
{
|
||||||
prefix_ = fs.s + prefix_;
|
prefix_ = fs.s + prefix_;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// c++ std::exception descendants must have a 'const char* what()' function.
|
||||||
|
// This stringifies the error and caches it for use by what(), or similarly by msg().
|
||||||
const string& BaseError::calcWhat() const
|
const string& BaseError::calcWhat() const
|
||||||
{
|
{
|
||||||
if (what_.has_value())
|
if (what_.has_value())
|
||||||
|
@ -53,6 +56,7 @@ string showErrPos(const ErrPos &errPos)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if nixCode contains lines of code, print them to the ostream, indicating the error column.
|
||||||
void printCodeLines(std::ostream &out, const string &prefix, const NixCode &nixCode)
|
void printCodeLines(std::ostream &out, const string &prefix, const NixCode &nixCode)
|
||||||
{
|
{
|
||||||
// previous line of code.
|
// previous line of code.
|
||||||
|
|
|
@ -22,6 +22,23 @@
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
This file defines two main structs/classes used in nix error handling.
|
||||||
|
|
||||||
|
ErrorInfo provides a standard payload of error information, with conversion to string
|
||||||
|
happening in the logger rather than at the call site.
|
||||||
|
|
||||||
|
BaseError is the ancestor of nix specific exceptions (and Interrupted), and contains
|
||||||
|
an ErrorInfo.
|
||||||
|
|
||||||
|
ErrorInfo structs are sent to the logger as part of an exception, or directly with the
|
||||||
|
logError or logWarning macros.
|
||||||
|
|
||||||
|
See the error-demo.cc program for usage examples.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
lvlError = 0,
|
lvlError = 0,
|
||||||
lvlWarn,
|
lvlWarn,
|
||||||
|
@ -32,6 +49,7 @@ typedef enum {
|
||||||
lvlVomit
|
lvlVomit
|
||||||
} Verbosity;
|
} Verbosity;
|
||||||
|
|
||||||
|
// ErrPos indicates the location of an error in a nix file.
|
||||||
struct ErrPos {
|
struct ErrPos {
|
||||||
int line = 0;
|
int line = 0;
|
||||||
int column = 0;
|
int column = 0;
|
||||||
|
@ -42,6 +60,7 @@ struct ErrPos {
|
||||||
return line != 0;
|
return line != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// convert from the Pos struct, found in libexpr.
|
||||||
template <class P>
|
template <class P>
|
||||||
ErrPos& operator=(const P &pos)
|
ErrPos& operator=(const P &pos)
|
||||||
{
|
{
|
||||||
|
@ -65,8 +84,6 @@ struct NixCode {
|
||||||
std::optional<string> nextLineOfCode;
|
std::optional<string> nextLineOfCode;
|
||||||
};
|
};
|
||||||
|
|
||||||
// -------------------------------------------------
|
|
||||||
// ErrorInfo.
|
|
||||||
struct ErrorInfo {
|
struct ErrorInfo {
|
||||||
Verbosity level;
|
Verbosity level;
|
||||||
string name;
|
string name;
|
||||||
|
|
|
@ -150,9 +150,23 @@ bool handleJSONLogMessage(const std::string & msg,
|
||||||
|
|
||||||
extern Verbosity verbosity; /* suppress msgs > this */
|
extern Verbosity verbosity; /* suppress msgs > this */
|
||||||
|
|
||||||
/* Print a message if the current log level is at least the specified
|
/* Print a message with the standard ErrorInfo format.
|
||||||
level. Note that this has to be implemented as a macro to ensure
|
In general, use these 'log' macros for reporting problems that may require user
|
||||||
that the arguments are evaluated lazily. */
|
intervention or that need more explanation. Use the 'print' macros for more
|
||||||
|
lightweight status messages. */
|
||||||
|
#define logErrorInfo(level, errorInfo...) \
|
||||||
|
do { \
|
||||||
|
if (level <= nix::verbosity) { \
|
||||||
|
logger->logEI(level, errorInfo); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define logError(errorInfo...) logErrorInfo(lvlError, errorInfo)
|
||||||
|
#define logWarning(errorInfo...) logErrorInfo(lvlWarn, errorInfo)
|
||||||
|
|
||||||
|
/* Print a string message if the current log level is at least the specified
|
||||||
|
level. Note that this has to be implemented as a macro to ensure that the
|
||||||
|
arguments are evaluated lazily. */
|
||||||
#define printMsg(level, args...) \
|
#define printMsg(level, args...) \
|
||||||
do { \
|
do { \
|
||||||
if (level <= nix::verbosity) { \
|
if (level <= nix::verbosity) { \
|
||||||
|
@ -166,18 +180,7 @@ extern Verbosity verbosity; /* suppress msgs > this */
|
||||||
#define debug(args...) printMsg(lvlDebug, args)
|
#define debug(args...) printMsg(lvlDebug, args)
|
||||||
#define vomit(args...) printMsg(lvlVomit, args)
|
#define vomit(args...) printMsg(lvlVomit, args)
|
||||||
|
|
||||||
#define logErrorInfo(level, errorInfo...) \
|
/* if verbosity >= lvlWarn, print a message with a yellow 'warning:' prefix. */
|
||||||
do { \
|
|
||||||
if (level <= nix::verbosity) { \
|
|
||||||
logger->logEI(level, errorInfo); \
|
|
||||||
} \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define logError(errorInfo...) logErrorInfo(lvlError, errorInfo)
|
|
||||||
#define logWarning(errorInfo...) logErrorInfo(lvlWarn, errorInfo)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
inline void warn(const std::string & fs, const Args & ... args)
|
inline void warn(const std::string & fs, const Args & ... args)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue