执行扫描任务 :param params: 需包含下面键值: 'rules': lint扫描的规则列表 'incr_scan' : 是否增量扫描 :return: return a :py:class:`IssueResponse`
(self, params)
| 155 | return issues |
| 156 | |
| 157 | def analyze(self, params): |
| 158 | '''执行扫描任务 |
| 159 | |
| 160 | :param params: 需包含下面键值: |
| 161 | 'rules': lint扫描的规则列表 |
| 162 | 'incr_scan' : 是否增量扫描 |
| 163 | |
| 164 | :return: return a :py:class:`IssueResponse` |
| 165 | ''' |
| 166 | source_dir = params['source_dir'] |
| 167 | incr_scan = params['incr_scan'] |
| 168 | rules = self.__format_rules(params['rule_list']) |
| 169 | |
| 170 | logger.info('获取需要扫描的文件') |
| 171 | code_file_suffixs = () |
| 172 | res_file_suffixs = () |
| 173 | for rule_name, rule_param in rules.items(): |
| 174 | code_file_suffixs += rule_param['code_suffix'] |
| 175 | res_file_suffixs += rule_param['res_suffix'] |
| 176 | code_file_suffixs = tuple(set(code_file_suffixs)) # 去重 |
| 177 | res_file_suffixs = tuple(set(res_file_suffixs)) # 去重 |
| 178 | code_files, res_files = self.__get_scan_files(source_dir, code_file_suffixs, res_file_suffixs) |
| 179 | |
| 180 | # 增量扫描过滤资源文件 |
| 181 | if incr_scan: |
| 182 | diffs = SCMMgr(params).get_scm_diff() |
| 183 | diff_files = [os.path.join(source_dir, diff.path).replace(os.sep, '/') |
| 184 | for diff in diffs if diff.state != 'del'] |
| 185 | res_files = [p for p in res_files if p in diff_files] |
| 186 | |
| 187 | # 根据项目的include和exclude配置,过滤资源文件 |
| 188 | relpos = len(source_dir) + 1 |
| 189 | res_files = FilterPathUtil(params).get_include_files(res_files, relpos) |
| 190 | |
| 191 | if not res_files: |
| 192 | logger.debug("To-be-scanned files is empty ") |
| 193 | return [] |
| 194 | |
| 195 | logger.debug("resource files to scan: %d" % len(res_files)) |
| 196 | |
| 197 | # 执行扫描工具 |
| 198 | logger.info('查找未使用的资源文件') |
| 199 | issues = self.__scan_unused_resources(source_dir, code_files, res_files, rules) |
| 200 | |
| 201 | if not issues: |
| 202 | logger.info("result is empty ") |
| 203 | |
| 204 | logger.debug(issues) |
| 205 | return issues |
| 206 | |
| 207 | def set_filter_type_list(self): |
| 208 | ''' |
nothing calls this directly
no test coverage detected