Skip to content

Commit 587052b

Browse files
Fix file_rules globbing (#1453)
* Issue#1446: Fixed comment indentation at end of scope * config: Refactored glob_filenames * config: Fixed error message construction in validate_file_exists * config: Fixed process_file_list_key to use key parameter * Issue#1425: Fixed missing globbing of "file_rules" * Adding tests. * Revert "Issue#1446: Fixed comment indentation at end of scope" This reverts commit 7106e12. --------- Co-authored-by: Jeremiah Leary <jeremiah.c.leary@gmail.com>
1 parent e02087d commit 587052b

File tree

3 files changed

+58
-16
lines changed

3 files changed

+58
-16
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
---
2+
rule:
3+
entity_008:
4+
disable : True
5+
entity_012:
6+
disable : True
7+
port_010:
8+
disable : True
9+
architecture_011:
10+
disable : True
11+
architecture_013:
12+
disable : True
13+
architecture_014:
14+
disable : True
15+
file_rules:
16+
- tests/**/entity1.vhd :
17+
rule:
18+
port_007:
19+
disable : True
20+
- tests/**/*2.vhd :
21+
rule:
22+
port_008:
23+
disable : True
24+
...

tests/vsg/test_vsg.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,21 @@ def test_configuration_with_file_rules_and_no_file_list_entity1(self):
565565

566566
self.assertEqual(lActual, lExpected)
567567

568+
def test_configuration_with_globbing_in_file_rules(self):
569+
lExpected = []
570+
571+
lActual = []
572+
573+
try:
574+
subprocess.check_output(
575+
[*utils.vsg_exec(), "--configuration", "tests/vsg/config_file_rules_w_globbing.yaml", "-f", "tests/vsg/*.vhd", "--output_format", "syntastic"],
576+
)
577+
except subprocess.CalledProcessError as e:
578+
lActual = str(e.output.decode("utf-8")).splitlines()
579+
iExitStatus = e.returncode
580+
581+
self.assertEqual(lActual, lExpected)
582+
568583
def test_file_as_stdin(self):
569584
with open("tests/vsg/entity1.vhd") as file1:
570585
lExpected = []

vsg/config.py

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ def validate_file_exists(sFilename, sConfigName):
5454
sExpandedFilename = list(sFilename.keys())[0]
5555
else:
5656
sExpandedFilename = sFilename
57-
lFileNames = glob.glob(utils.expand_filename(sExpandedFilename), recursive=True)
57+
lFileNames = glob_filenames(sExpandedFilename)
5858
if len(lFileNames) == 0:
59-
print("ERROR: Could not find file " + sFilename + " in configuration file " + sConfigName)
59+
print("ERROR: Could not find file " + sExpandedFilename + " in configuration file " + sConfigName)
6060
sys.exit(1)
6161

6262

@@ -75,9 +75,8 @@ def read_configuration_files(dStyle, commandLineArguments):
7575
def process_config_file(dConfiguration, tempConfiguration, sConfigFilename):
7676
dReturn = dConfiguration
7777
for sKey in tempConfiguration.keys():
78-
if sKey == "file_list":
78+
if sKey == "file_list" or sKey == "file_rules":
7979
dReturn = process_file_list_key(dReturn, tempConfiguration, sKey, sConfigFilename)
80-
8180
elif sKey == "rule":
8281
for sRule in tempConfiguration[sKey]:
8382
try:
@@ -135,25 +134,29 @@ def search_list(lDict, lDeprecatedKeys, sConfigFilename, lMessages):
135134

136135
def process_file_list_key(dConfig, tempConfiguration, sKey, sConfigFilename):
137136
dReturn = dConfig
138-
if "file_list" not in dConfig:
139-
dReturn["file_list"] = []
140-
for iIndex, sFilename in enumerate(tempConfiguration["file_list"]):
137+
if sKey not in dConfig:
138+
dReturn[sKey] = []
139+
for iIndex, sFilename in enumerate(tempConfiguration[sKey]):
141140
validate_file_exists(sFilename, sConfigFilename)
142141
try:
143-
for sGlobbedFilename in glob_filenames(sFilename):
144-
dReturn["file_list"].append(sGlobbedFilename)
142+
for sGlobbedFilename in glob_filenames_clean(sFilename):
143+
dReturn[sKey].append(sGlobbedFilename)
145144
except TypeError:
146-
sKey = list(sFilename.keys())[0]
147-
for sGlobbedFilename in glob_filenames(sKey):
145+
sFilename = list(sFilename.keys())[0]
146+
for sGlobbedFilename in glob_filenames_clean(sFilename):
148147
dTemp = {}
149148
dTemp[sGlobbedFilename] = {}
150-
dTemp[sGlobbedFilename].update(tempConfiguration["file_list"][iIndex][sKey])
151-
dReturn["file_list"].append(dTemp)
149+
dTemp[sGlobbedFilename].update(tempConfiguration[sKey][iIndex][sFilename])
150+
dReturn[sKey].append(dTemp)
152151
return dReturn
153152

154153

155154
def glob_filenames(sFilename):
156-
files = glob.glob(utils.expand_filename(sFilename), recursive=True)
155+
return glob.glob(utils.expand_filename(sFilename), recursive=True)
156+
157+
158+
def glob_filenames_clean(sFilename):
159+
files = glob_filenames(sFilename)
157160
return replace_backslash_with_forward_slash(files)
158161

159162

@@ -378,12 +381,12 @@ def update_command_line_arguments(commandLineArguments, configuration):
378381
if isinstance(sFilename, dict):
379382
sFilename = list(sFilename.keys())[0]
380383
try:
381-
lFileNames = glob.glob(utils.expand_filename(sFilename), recursive=True)
384+
lFileNames = glob_filenames(sFilename)
382385
for sFileName in lFileNames:
383386
if sFileName not in commandLineArguments.filename:
384387
commandLineArguments.filename.append(sFileName)
385388
except:
386-
commandLineArguments.filename = glob.glob(utils.expand_filename(sFilename), recursive=True)
389+
commandLineArguments.filename = glob_filenames(sFilename)
387390

388391
if "local_rules" in configuration:
389392
commandLineArguments.local_rules = utils.expand_filename(configuration["local_rules"])

0 commit comments

Comments
 (0)