MCPcopy Create free account
hub / github.com/Tencent/CodeAnalysis / CpplintRunner

Class CpplintRunner

client/tool/cpplint.py:100–142  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

98
99
100class CpplintRunner(object):
101 def __init__(self):
102 self.cmd_output = []
103
104 def __collect_result_callback__(self, line):
105 """单行输出回调,收集结果"""
106 self.cmd_output.append(line)
107
108 def run_cpplint_on_files(self, toscans, cmd_args, regex_client, source_dir, rules):
109 """逐个扫描多个文件"""
110 issues = []
111 for file_path in toscans:
112 file_issues = self.run_cpplint_on_file(file_path, cmd_args, regex_client, source_dir, rules)
113 if file_issues:
114 issues.extend(file_issues)
115 return issues
116
117 def run_cpplint_on_file(self, file_path, cmd_args, regex_client, source_dir, rules):
118 """扫描单个文件"""
119 # 先置空,以免上一个影响
120 self.cmd_output = []
121 cmd = cmd_args + ["\"%s\"" % file_path]
122 logger.info("scan file: %s" % file_path)
123 # cpplint的error信息通过stderr通道输出,结果统计信息通过stdout通道输出,可以只解析stderr结果
124 subProC = SubProcController(cmd, stderr_line_callback=self.__collect_result_callback__)
125 try:
126 subProC.wait(timeout=300) # 设置cpplint分析单个文件超时为5分钟,避免cpplint卡死的情况
127 except Exception as err:
128 if "SubProcControllerTimeout" in str(err):
129 logger.error(
130 "timeout when run on file(%s): %s. Kill this process(%s)..." % (file_path, str(err), subProC.pid)
131 )
132 ProcMgr().kill_proc_famliy(subProC.pid)
133 else:
134 logger.error("error on file(%s): %s" % (file_path, err))
135 raise
136
137 # 解析cpplint原始结果
138 scan_result = ResultMgr().parse_result(regex_client, self.cmd_output)
139
140 # 转换成codedog最终结果格式
141 file_issues = ResultMgr().format_result(source_dir, scan_result, rules)
142 return file_issues
143
144
145class ThreadRunner(object):

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected