MCPcopy Index your code
hub / github.com/Tencent/CodeAnalysis / scan_file

Method scan_file

client/tool/regexscan.py:63–116  ·  view source on GitHub ↗

对单个代码文件进行正则匹配 :param source_dir: 项目代码根目录 :param file_path: 单个代码文件路径 :param rules: { rule_name: { 'reg_pattern': reg_pattern, 'exclude': exclude_paths, 'include': include_paths, 'msg': msg,

(source_dir, file_path, rules)

Source from the content-addressed store, hash-verified

61
62 @staticmethod
63 def scan_file(source_dir, file_path, rules):
64 """对单个代码文件进行正则匹配
65 :param source_dir: 项目代码根目录
66 :param file_path: 单个代码文件路径
67 :param rules: {
68 rule_name: {
69 'reg_pattern': reg_pattern,
70 'exclude': exclude_paths,
71 'include': include_paths,
72 'msg': msg,
73 'ignore_comment': True|False
74 }
75 }
76 :return: [{
77 "path":文件相对路径,
78 "line":行号,
79 "column":列号,
80 "msg":提示信息,
81 "rule":规则名
82 },
83 ...
84 ]
85 """
86 source_dir = source_dir.replace(os.sep, '/').rstrip('/')
87 file_path = file_path.replace(os.sep, '/')
88 relpos = len(source_dir) + 1
89 relative_path = file_path[relpos:]
90 rules_exclude_comment = {}
91 rules_include_comment = {}
92
93 for rule_name, params in rules.items():
94 filter_util = WildcardPathFilter(path_include=params['include'], path_exclude=params['exclude'])
95 if filter_util.should_filter_path(relative_path):
96 continue
97 if params['ignore_comment']:
98 rules_exclude_comment[rule_name] = params
99 else:
100 rules_include_comment[rule_name] = params
101 if not rules_exclude_comment and not rules_include_comment:
102 return []
103 results = []
104 if not os.path.isfile(file_path):
105 logger.debug("%s is not a file,filter!" % file_path)
106 return []
107 with io.open(file_path, 'rb') as fp:
108 file_text = CodecClient().decode(fp.read())
109 if rules_exclude_comment:
110 code_nocomment = CommentsManager(file_path, file_text).remove_comments()
111 issues = RegexScanner.scan_file_text(relative_path, code_nocomment, rules_exclude_comment)
112 results.extend(issues)
113 if rules_include_comment:
114 issues = RegexScanner.scan_file_text(relative_path, file_text, rules_include_comment)
115 results.extend(issues)
116 return results
117
118 @staticmethod
119 def scan_file_text(rel_path, file_text, rules):

Callers 1

analyzeMethod · 0.45

Calls 3

debugMethod · 0.80
scan_file_textMethod · 0.80
readMethod · 0.45

Tested by

no test coverage detected