Vuo 2.4.4
Loading...
Searching...
No Matches
VuoClangIssues.cc
Go to the documentation of this file.
1
10#include "VuoClangIssues.hh"
11#include "VuoStringUtilities.hh"
12#include <sstream>
13
17void VuoClangIssues::addIssue(const string &location, clang::DiagnosticsEngine::Level level, const string &message)
18{
19 vector<string> locationParts = VuoStringUtilities::split(location, ':');
20 string path;
21 int line = -1;
22 int column = -1;
23 if (locationParts.size() == 3)
24 {
25 path = locationParts[0];
26 line = std::stoi(locationParts[1]);
27 column = std::stoi(locationParts[2]);
28 }
29 else
30 path = location;
31
32 Issue issue = {path, line, column, level, message};
33 issues.push_back(issue);
34}
35
39string VuoClangIssues::getDescription(const string &lineBreak)
40{
41 ostringstream s;
42 size_t i = 0;
43
44 for (Issue issue : issues)
45 {
46 if (! issue.path.empty())
47 {
48 s << issue.path << ":";
49
50 if (issue.line >= 0)
51 {
52 s << issue.line << ":";
53 if (issue.column >= 0)
54 s << issue.column << ":";
55 }
56
57 s << " ";
58 }
59
60 string levelName;
61 if (issue.level == clang::DiagnosticsEngine::Ignored)
62 levelName = "ignored";
63 else if (issue.level == clang::DiagnosticsEngine::Note)
64 levelName = "note";
65 else if (issue.level == clang::DiagnosticsEngine::Remark)
66 levelName = "remark";
67 else if (issue.level == clang::DiagnosticsEngine::Warning)
68 levelName = "warning";
69 else if (issue.level == clang::DiagnosticsEngine::Error)
70 levelName = "error";
71 else if (issue.level == clang::DiagnosticsEngine::Fatal)
72 levelName = "fatal error";
73
74 if (! levelName.empty())
75 s << levelName << ": ";
76
77 s << issue.message;
78
79 if (++i < issues.size())
80 s << lineBreak;
81 }
82
83 return s.str();
84}
85
90{
91 return issues.empty();
92}
93
98{
99 auto isError = [](const Issue &issue)
100 {
101 return issue.level == clang::DiagnosticsEngine::Error || issue.level == clang::DiagnosticsEngine::Fatal;
102 };
103
104 return std::find_if(issues.begin(), issues.end(), isError) != issues.end();
105}