mirror of
https://github.com/qodo-ai/pr-agent.git
synced 2025-07-04 12:50:38 +08:00
fix: support root-level matching for '**/' globs
- generate an additional regex to match root-level files alongside '**/' patterns. - ensure files in the repo root are correctly excluded from analysis.
This commit is contained in:
@ -17,14 +17,14 @@ def filter_ignored(files, platform = 'github'):
|
|||||||
glob_setting = get_settings().ignore.glob
|
glob_setting = get_settings().ignore.glob
|
||||||
if isinstance(glob_setting, str): # --ignore.glob=[.*utils.py], --ignore.glob=.*utils.py
|
if isinstance(glob_setting, str): # --ignore.glob=[.*utils.py], --ignore.glob=.*utils.py
|
||||||
glob_setting = glob_setting.strip('[]').split(",")
|
glob_setting = glob_setting.strip('[]').split(",")
|
||||||
patterns += [fnmatch.translate(glob) for glob in glob_setting]
|
patterns += translate_globs_to_regexes(glob_setting)
|
||||||
|
|
||||||
code_generators = get_settings().config.get('ignore_language_framework', [])
|
code_generators = get_settings().config.get('ignore_language_framework', [])
|
||||||
for cg in code_generators:
|
for cg in code_generators:
|
||||||
glob_patterns = get_settings().generated_code.get(cg, [])
|
glob_patterns = get_settings().generated_code.get(cg, [])
|
||||||
if isinstance(glob_patterns, str):
|
if isinstance(glob_patterns, str):
|
||||||
glob_patterns = [glob_patterns]
|
glob_patterns = [glob_patterns]
|
||||||
patterns += [fnmatch.translate(glob) for glob in glob_patterns]
|
patterns += translate_globs_to_regexes(glob_patterns)
|
||||||
|
|
||||||
# compile all valid patterns
|
# compile all valid patterns
|
||||||
compiled_patterns = []
|
compiled_patterns = []
|
||||||
@ -73,3 +73,11 @@ def filter_ignored(files, platform = 'github'):
|
|||||||
print(f"Could not filter file list: {e}")
|
print(f"Could not filter file list: {e}")
|
||||||
|
|
||||||
return files
|
return files
|
||||||
|
|
||||||
|
def translate_globs_to_regexes(globs: list):
|
||||||
|
regexes = []
|
||||||
|
for pattern in globs:
|
||||||
|
regexes.append(fnmatch.translate(pattern))
|
||||||
|
if pattern.startswith("**/"): # cover root-level files
|
||||||
|
regexes.append(fnmatch.translate(pattern[3:]))
|
||||||
|
return regexes
|
||||||
|
@ -92,7 +92,8 @@ class TestIgnoreFilter:
|
|||||||
type('', (object,), {'filename': 'dir1/service.pb.go'})(),
|
type('', (object,), {'filename': 'dir1/service.pb.go'})(),
|
||||||
type('', (object,), {'filename': 'dir1/dir/data_pb2.py'})(),
|
type('', (object,), {'filename': 'dir1/dir/data_pb2.py'})(),
|
||||||
type('', (object,), {'filename': 'file.py'})(),
|
type('', (object,), {'filename': 'file.py'})(),
|
||||||
type('', (object,), {'filename': 'dir2/file_gen.go'})()
|
type('', (object,), {'filename': 'dir2/file_gen.go'})(),
|
||||||
|
type('', (object,), {'filename': 'file.generated.go'})()
|
||||||
]
|
]
|
||||||
expected = [
|
expected = [
|
||||||
files[0],
|
files[0],
|
||||||
|
Reference in New Issue
Block a user