ROSE 0.11.145.321
Analyzer.h
1#ifndef ROSE_SourceCode_Analysis_Analyzer_H
2#define ROSE_SourceCode_Analysis_Analyzer_H
3
4#include <RoseFirst.h>
5#include <Rose/SourceCode/Sarif.h>
6
7#include <ostream>
8
9class SgProject;
10class SgLocatedNode;
11
12namespace Rose {
13namespace SourceCode {
14namespace Analysis {
15
16class Analyzer {
17 public:
18 template <typename Analyzer>
19 static int run(std::vector<std::string> & args);
20
21 private:
22 SgProject * project;
23 Sarif::LogPtr log;
24 std::string sarif_file;
25
26 protected:
27 Sarif::AnalysisPtr analysis;
28
29 private:
30 std::string name;
31 std::string version;
32 std::map<std::string, Sarif::RulePtr> rules;
33
34 protected:
35 Analyzer(std::string const & name, std::string const & version);
36 ~Analyzer();
37
38 Sarif::RulePtr add_rule(std::string const & name, std::string const & desc);
39
40 Sarif::ResultPtr add_note (std::string const & rule_id, std::string const & message, SgLocatedNode * loc=nullptr);
41 Sarif::ResultPtr add_warning (std::string const & rule_id, std::string const & message, SgLocatedNode * loc=nullptr);
42 Sarif::ResultPtr add_error (std::string const & rule_id, std::string const & message, SgLocatedNode * loc=nullptr);
43 Sarif::ResultPtr add_pass (std::string const & rule_id, std::string const & message, SgLocatedNode * loc=nullptr);
44
45 virtual int apply() = 0;
46
47 virtual void parse_args(std::vector<std::string> & args) = 0;
48
49 private:
50 Sarif::ResultPtr add_result(Sarif::ResultPtr result, std::string const & rule_id, SgLocatedNode * loc);
51 Sarif::ResultPtr add_fail(std::string const & rule_id, std::string const & message, SgLocatedNode * loc, Sarif::Severity severity);
52
53 bool parse_args__(std::vector<std::string> & args);
54 int apply__();
55};
56
57template <typename AnalyzerT>
58int Analyzer::run(std::vector<std::string> & args) {
59 int status = 0;
60 AnalyzerT analyzer;
61 if (analyzer.parse_args__(args)) {
62 status = analyzer.apply__();
63 }
64 return status;
65}
66
67}
68}
69}
70
71#endif /* ROSE_SourceCode_Analysis_Analyzer_H */
This class represents the notion of an expression or statement which has a position within the source...
This class represents a source project, with a list of SgFile objects and global information about th...
Severity
Analysis result severity.
The ROSE library.