diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2022-06-27 15:13:59 +0200 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2022-06-28 19:30:39 +0200 |
commit | 6045a6d15738b3104e34cc05a9c5624f3f98bd03 (patch) | |
tree | e24979e32191cbfc4c636eaf0e262ec2523552b1 | |
parent | c29b5de236525b04a852d06d53e76ff341a86fa3 (diff) | |
download | justbuild-6045a6d15738b3104e34cc05a9c5624f3f98bd03.tar.gz |
Support more verbose error reporting
-rw-r--r-- | share/man/just.1.org | 5 | ||||
-rw-r--r-- | src/buildtool/build_engine/expression/evaluator.cpp | 2 | ||||
-rw-r--r-- | src/buildtool/build_engine/expression/evaluator.hpp | 17 | ||||
-rw-r--r-- | src/buildtool/common/TARGETS | 3 | ||||
-rw-r--r-- | src/buildtool/common/cli.hpp | 8 | ||||
-rw-r--r-- | src/buildtool/main/main.cpp | 5 |
6 files changed, 37 insertions, 3 deletions
diff --git a/share/man/just.1.org b/share/man/just.1.org index 48cbe25d..14bd8183 100644 --- a/share/man/just.1.org +++ b/share/man/just.1.org @@ -339,6 +339,11 @@ well-defined graph file. See *just-graph-file(5)* for more details. Log limit (higher is more verbose) in interval [0,6] (Default: 3).\\ Supported by: analyse|build|describe|install|rebuild|traverse. + *--expression-log-limit* NUM\\ + In error messages, truncate the entries in the enumeration of the active + environment to the specified number of characters (default: 320).\\ + Supported by: analyse|build|install + *-P*, *--print-to-stdout* LOGICAL_PATH\\ After building, print the specified artifact to stdout.\\ diff --git a/src/buildtool/build_engine/expression/evaluator.cpp b/src/buildtool/build_engine/expression/evaluator.cpp index 9789c519..0097bd27 100644 --- a/src/buildtool/build_engine/expression/evaluator.cpp +++ b/src/buildtool/build_engine/expression/evaluator.cpp @@ -922,7 +922,7 @@ auto Evaluator::EvaluationError::WhileEvaluating(ExpressionPtr const& expr, } ss << expr->ToString() << std::endl; ss << " environment " << std::endl; - ss << env.Enumerate(" - ", kLineWidth) << std::endl; + ss << env.Enumerate(" - ", Config().expression_log_limit) << std::endl; ss << ex.what(); return EvaluationError{ss.str(), true /* while_eval */}; } diff --git a/src/buildtool/build_engine/expression/evaluator.hpp b/src/buildtool/build_engine/expression/evaluator.hpp index b4cd5979..e709de43 100644 --- a/src/buildtool/build_engine/expression/evaluator.hpp +++ b/src/buildtool/build_engine/expression/evaluator.hpp @@ -10,7 +10,17 @@ class Configuration; class Evaluator { + struct ConfigData { + std::size_t expression_log_limit{kDefaultExpressionLogLimit}; + }; + public: + /// \brief Set the limit for the size of logging a single expression + /// in an error message. + static void SetExpressionLogLimit(std::size_t width) { + Config().expression_log_limit = width; + } + class EvaluationError : public std::exception { public: explicit EvaluationError(std::string const& msg, @@ -65,12 +75,17 @@ class Evaluator { std::function<void(void)> const& note_user_context = []() {}) noexcept -> ExpressionPtr; + constexpr static std::size_t kDefaultExpressionLogLimit = 320; + private: - constexpr static std::size_t kLineWidth = 80; [[nodiscard]] static auto Evaluate(ExpressionPtr const& expr, Configuration const& env, FunctionMapPtr const& functions) -> ExpressionPtr; + [[nodiscard]] static auto Config() noexcept -> ConfigData& { + static ConfigData instance{}; + return instance; + } }; #endif // INCLUDED_SRC_BUILDTOOL_BUILD_ENGINE_EXPRESSION_EVALUATOR_HPP diff --git a/src/buildtool/common/TARGETS b/src/buildtool/common/TARGETS index 4f297a12..4cc2dcbf 100644 --- a/src/buildtool/common/TARGETS +++ b/src/buildtool/common/TARGETS @@ -3,7 +3,8 @@ , "name": ["cli"] , "hdrs": ["cli.hpp"] , "deps": - [ ["src/buildtool/compatibility", "compatibility"] + [ ["src/buildtool/build_engine/expression", "expression"] + , ["src/buildtool/compatibility", "compatibility"] , ["src/buildtool/logging", "log_level"] , ["@", "cli11", "", "cli11"] , ["@", "json", "", "json"] diff --git a/src/buildtool/common/cli.hpp b/src/buildtool/common/cli.hpp index adfa3445..b2bd4576 100644 --- a/src/buildtool/common/cli.hpp +++ b/src/buildtool/common/cli.hpp @@ -12,6 +12,7 @@ #include "fmt/core.h" #include "gsl-lite/gsl-lite.hpp" #include "nlohmann/json.hpp" +#include "src/buildtool/build_engine/expression/evaluator.hpp" #include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/logging/log_level.hpp" @@ -30,6 +31,7 @@ struct CommonArguments { /// \brief Arguments required for analysing targets. struct AnalysisArguments { + std::optional<std::size_t> expression_log_limit{}; std::string defines{}; std::filesystem::path config_file{}; std::optional<nlohmann::json> target{}; @@ -137,6 +139,12 @@ static inline auto SetupAnalysisArguments( gsl::not_null<CLI::App*> const& app, gsl::not_null<AnalysisArguments*> const& clargs, bool with_graph = true) { + app->add_option("--expression-log-limit", + clargs->expression_log_limit, + fmt::format("Maximal size for logging a single expression " + "in error messages (Default {})", + Evaluator::kDefaultExpressionLogLimit)) + ->type_name("NUM"); app->add_option( "-D,--defines", clargs->defines, diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp index d6d999ab..e1630e31 100644 --- a/src/buildtool/main/main.cpp +++ b/src/buildtool/main/main.cpp @@ -15,6 +15,7 @@ #include "src/buildtool/build_engine/base_maps/rule_map.hpp" #include "src/buildtool/build_engine/base_maps/source_map.hpp" #include "src/buildtool/build_engine/base_maps/targets_file_map.hpp" +#include "src/buildtool/build_engine/expression/evaluator.hpp" #include "src/buildtool/build_engine/expression/expression.hpp" #include "src/buildtool/build_engine/target_map/target_cache.hpp" #include "src/buildtool/build_engine/target_map/target_map.hpp" @@ -1333,6 +1334,10 @@ auto main(int argc, char* argv[]) -> int { } SetupLogging(arguments.common); + if (arguments.analysis.expression_log_limit) { + Evaluator::SetExpressionLogLimit( + *arguments.analysis.expression_log_limit); + } #ifndef BOOTSTRAP_BUILD_TOOL SetupHashFunction(); SetupExecutionConfig( |