Skip to content

Commit f3ea6fb

Browse files
committed
Add config infrastructure and file-filter config
-c/--config can be used to add configuration for the parsers. It can be used repeatedly and each time have a key=value pair As first config setting, add "file-filter" that will check for a prefix in the filename and filter that out.
1 parent 72247cd commit f3ea6fb

File tree

5 files changed

+28
-12
lines changed

5 files changed

+28
-12
lines changed

edalogparser/base.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ def __init__(self, *, severity=None, msg=None, file=None, line=None, col=None, c
99
self.line = line
1010
self.col = col
1111
self.code = code
12+
1213
def as_dict(self, full=False):
1314
d = { "severity": self.severity, "msg": self.msg }
1415
if self.file is not None or full:
@@ -67,10 +68,15 @@ def as_ghaction(self):
6768
return "\n".join([l.as_ghaction() for l in self])
6869

6970
class LogParser(ABC):
70-
def __init__(self):
71-
pass
71+
def __init__(self, config):
72+
self.config = config if config else {}
7273

7374
@abstractmethod
7475
def parse(self, log):
7576
pass
7677

78+
def filter_filename(self, name):
79+
if "file-filter" in self.config:
80+
if name.startswith(self.config["file-filter"]):
81+
return name[len(self.config["file-filter"]):]
82+
return name

edalogparser/main.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,22 @@
99
"verilator": VerilatorLogParser,
1010
"vivado": VivadoLogParser }
1111

12+
class parse_dict_args(argparse.Action):
13+
def __call__(self, parser, namespace, values, option_string=None):
14+
d = {}
15+
for val in values:
16+
k, v = val.split('=')
17+
d[k] = v
18+
setattr(namespace, self.dest, d)
19+
20+
1221
def main():
1322
parser = argparse.ArgumentParser()
1423
parser.add_argument("-t", "--tool", required=True, choices=tools.keys())
1524
parser.add_argument("-f", "--format", choices=["json", "azure", "ghaction"], default="json")
25+
parser.add_argument("-c", "--config", nargs='*', action=parse_dict_args)
1626
parser.add_argument("input", nargs='?', help="", type=argparse.FileType('r'),
1727
default=sys.stdin)
1828
args = parser.parse_args()
1929

20-
print(tools[args.tool]().parse(args.input.readlines()).get_as(args.format))
30+
print(tools[args.tool](args.config).parse(args.input.readlines()).get_as(args.format))

edalogparser/verible.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
class VeribleLintLogParser(LogParser):
55
regex = re.compile(r"^(.*?):(\d+):(\d+): (.*) \[Style: (.*?)\]")
66

7-
def __init__(self):
8-
super().__init__()
7+
def __init__(self, config):
8+
super().__init__(config)
99

1010
def parse(self, log):
1111
entries = Log()
@@ -14,7 +14,7 @@ def parse(self, log):
1414
if m:
1515
severity = "warning"
1616
msg = m.group(4)
17-
file = m.group(1)
17+
file = self.filter_filename(m.group(1))
1818
line = m.group(2)
1919
col = m.group(3)
2020
code = m.group(5)

edalogparser/verilator.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ class VerilatorLogParser(LogParser):
55
regex_nofl = re.compile(r"%((Warning|Error)-\w+: ([^%]*))")
66
regex_fl = re.compile(r"(.*?):(\d+):(\d+): (.*)")
77

8-
def __init__(self):
9-
super().__init__()
8+
def __init__(self, config):
9+
super().__init__(config)
1010

1111
def parse(self, log):
1212
log = "".join(log)
@@ -16,7 +16,7 @@ def parse(self, log):
1616
msg = m.group(3).replace("\n", "\\n")
1717
m = self.regex_fl.match(msg)
1818
if m:
19-
file = m.group(1)
19+
file = self.filter_filename(m.group(1))
2020
line = int(m.group(2))
2121
col = int(m.group(3))
2222
msg = m.group(4)

edalogparser/vivado.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
class VivadoLogParser(LogParser):
55
regex = re.compile(r"^((INFO|WARNING|ERROR): \[(.*?)\] (.*?)( \[(.*?)\])?)\n$")
66

7-
def __init__(self):
8-
super().__init__()
7+
def __init__(self, config):
8+
super().__init__(config)
99

1010
def parse(self, log):
1111
entries = Log()
@@ -18,7 +18,7 @@ def parse(self, log):
1818
line = None
1919
if m.group(6):
2020
colon = m.group(6).rfind(":")
21-
file = m.group(6)[0:colon]
21+
file = self.filter_filename(m.group(6)[0:colon])
2222
line = m.group(6)[colon+1:]
2323
code = m.group(3)
2424
entries.append(LogEntry(severity=severity, msg=msg, file=file, line=line, code=code))

0 commit comments

Comments
 (0)