From 9570b9d2625ee526db4f8c0f29252994cbcbe39d Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Tue, 10 Feb 2015 13:58:35 +0100 Subject: [PATCH] Improve error reporting for "icinga2 console" refs #8133 --- lib/cli/consolecommand.cpp | 43 +++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/lib/cli/consolecommand.cpp b/lib/cli/consolecommand.cpp index 7e2c2c26e..d8249ff2f 100644 --- a/lib/cli/consolecommand.cpp +++ b/lib/cli/consolecommand.cpp @@ -130,16 +130,39 @@ incomplete: DebugInfo di = ex.GetDebugInfo(); if (lines.find(di.Path) != lines.end()) { - int offset; - - if (di.Path != fileName) { - std::cout << di.Path << ": " << lines[di.Path] << "\n"; - offset = 2; - } else - offset = 4; - - std::cout << String(di.Path.GetLength() + offset, ' '); - std::cout << String(di.FirstColumn, ' ') << String(di.LastColumn - di.FirstColumn + 1, '^') << "\n"; + String text = lines[di.Path]; + + std::vector ulines; + boost::algorithm::split(ulines, text, boost::is_any_of("\n")); + + for (int i = 1; i <= ulines.size(); i++) { + int start, len; + + if (i == di.FirstLine) { + start = di.FirstColumn; + if (start > 0) + start--; + } else + start = 0; + + if (i == di.LastLine) + len = di.LastColumn - di.FirstColumn + 1; + else + len = ulines[i].GetLength(); + + int offset; + + if (di.Path != fileName) { + std::cout << di.Path << ": " << ulines[i - 1] << "\n"; + offset = 2; + } else + offset = 4; + + if (i >= di.FirstLine && i <= di.LastLine) { + std::cout << String(di.Path.GetLength() + offset, ' '); + std::cout << String(start, ' ') << String(len, '^') << "\n"; + } + } } else { ShowCodeFragment(std::cout, di); } -- 2.40.0