执行扫描任务 :param params: 需包含下面键值: 'rules': lint扫描的规则列表 'incr_scan' : 是否增量扫描 :return: return a :py:class:`IssueResponse`
(self, params)
| 186 | return rules |
| 187 | |
| 188 | def analyze(self, params): |
| 189 | """执行扫描任务 |
| 190 | |
| 191 | :param params: 需包含下面键值: |
| 192 | 'rules': lint扫描的规则列表 |
| 193 | 'incr_scan' : 是否增量扫描 |
| 194 | |
| 195 | :return: return a :py:class:`IssueResponse` |
| 196 | """ |
| 197 | source_dir = params['source_dir'] |
| 198 | incr_scan = params['incr_scan'] |
| 199 | rules = self.__format_rules(params['rule_list']) |
| 200 | |
| 201 | if incr_scan: |
| 202 | diffs = SCMMgr(params).get_scm_diff() |
| 203 | toscans = [os.path.join(source_dir, diff.path) for diff in diffs if diff.state != 'del'] |
| 204 | else: |
| 205 | toscans = PathMgr().get_dir_files(source_dir) |
| 206 | |
| 207 | # filter include and exclude path |
| 208 | relpos = len(source_dir) + 1 |
| 209 | toscans = FilterPathUtil(params).get_include_files(toscans, relpos) |
| 210 | |
| 211 | if not toscans: |
| 212 | logger.debug("To-be-scanned files is empty ") |
| 213 | return [] |
| 214 | |
| 215 | logger.debug("files to scan: %d" % len(toscans)) |
| 216 | |
| 217 | # 执行扫描工具 |
| 218 | issues = [] |
| 219 | for file_path in toscans: |
| 220 | file_issues = RegexScanner.scan_file(source_dir, file_path, rules) |
| 221 | if file_issues: |
| 222 | issues.extend(file_issues) |
| 223 | |
| 224 | if not issues: |
| 225 | logger.info("result is empty.") |
| 226 | |
| 227 | logger.debug(issues) |
| 228 | return issues |
| 229 | |
| 230 | def set_filter_type_list(self): |
| 231 | """ |
nothing calls this directly
no test coverage detected