Skip to content

Commit 1410d61

Browse files
committed
FilenameBear.py: Provide multiple patches
This will provide multiple patches to the user when the file naming convention cannot be guessed.
1 parent c3ae6bc commit 1410d61

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

bears/general/FilenameBear.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ def run(self, filename, file,
5858
"""
5959
head, tail = os.path.split(filename)
6060
filename_without_extension, extension = os.path.splitext(tail)
61+
alternate_conventions = []
6162

6263
if file_naming_convention is None:
6364
self.warn('Please specify a file naming convention explicitly'
@@ -74,12 +75,20 @@ def run(self, filename, file,
7475
self.warn('The file naming convention could not be guessed. '
7576
'Using the default "snake" naming convention.')
7677
file_naming_convention = 'snake'
78+
alternate_conventions += ['camel', 'kebab', 'pascal', 'space']
7779

7880
messages = []
7981

8082
try:
8183
new_name = self._naming_convention[file_naming_convention](
8284
filename_without_extension)
85+
alternate_names = [self._naming_convention[alternate_convention](
86+
filename_without_extension)
87+
for alternate_convention in
88+
alternate_conventions]
89+
alternate_names = [alternate_name
90+
for alternate_name in alternate_names
91+
if alternate_name != filename_without_extension]
8392
except KeyError:
8493
self.err('Invalid file-naming-convention provided: ' +
8594
file_naming_convention)
@@ -92,12 +101,16 @@ def run(self, filename, file,
92101

93102
if not filename_without_extension.startswith(filename_prefix):
94103
new_name = filename_prefix + new_name
104+
alternate_names = [filename_prefix + alternate_name
105+
for alternate_name in alternate_names]
95106
messages.append(
96107
'Filename does not use the prefix {!r}.'.format(
97108
filename_prefix))
98109

99110
if not filename_without_extension.endswith(filename_suffix):
100111
new_name = new_name + filename_suffix
112+
alternate_names = [alternate_name + filename_suffix
113+
for alternate_name in alternate_names]
101114
messages.append(
102115
'Filename does not use the suffix {!r}.'.format(
103116
filename_suffix))
@@ -121,4 +134,11 @@ def run(self, filename, file,
121134
rename=os.path.join(head, new_name + extension))
122135
result_kwargs['diffs'] = {filename: diff}
123136

137+
if alternate_names:
138+
alternate_diffs = [{filename: Diff(
139+
file, rename=os.path.join(
140+
head, alternate_name + extension))}
141+
for alternate_name in alternate_names]
142+
result_kwargs['alternate_diffs'] = alternate_diffs
143+
124144
yield Result.from_values(self, **result_kwargs)

tests/general/FilenameBearTest.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,30 @@ def test_auto_file_naming_convention_warning(self):
110110
'The file naming convention could not be guessed. '
111111
'Using the default "snake" naming convention.')
112112

113+
def test_multiple_patches(self):
114+
self.section['file_naming_convention'] = 'auto'
115+
116+
filename_test1 = 'FileName.xyz'
117+
msg = 'Filename does not follow snake naming-convention.'
118+
expected_diffs = {filename_test1: Diff(['\n'], rename='file_name.xyz')}
119+
120+
alternate_diffs = [{filename_test1: Diff(
121+
['\n'], rename='fileName.xyz')},
122+
{filename_test1: Diff(
123+
['\n'], rename='file-name.xyz')},
124+
{filename_test1: Diff(
125+
['\n'], rename='File Name.xyz')}]
126+
127+
expected_result = Result.from_values('FilenameBear',
128+
msg,
129+
severity=RESULT_SEVERITY.NORMAL,
130+
file=filename_test1,
131+
diffs=expected_diffs,
132+
alternate_diffs=alternate_diffs)
133+
134+
self.check_results(
135+
self.uut, [''], [expected_result], filename=filename_test1)
136+
113137
def test_file_prefix(self):
114138
self.section['filename_prefix'] = 'pre'
115139
self.check_invalidity(

0 commit comments

Comments
 (0)