@@ -49,7 +49,7 @@ class CppcheckError:
4949 verbose : str
5050
5151
52- def parse_arguments () -> argparse .Namespace :
52+ def parse_arguments (args : List [ str ] ) -> argparse .Namespace :
5353 parser = argparse .ArgumentParser (
5454 description = "Converts Cppcheck XML version 2 to JUnit XML format.\n "
5555 "Usage:\n "
@@ -63,11 +63,11 @@ def parse_arguments() -> argparse.Namespace:
6363 "error_exitcode" ,
6464 type = int ,
6565 nargs = "?" ,
66- const = 0 ,
66+ default = ExitStatus . success ,
6767 help = "If errors are found, "
6868 f"integer <n> is returned instead of default { ExitStatus .success } ." ,
6969 )
70- return parser .parse_args ()
70+ return parser .parse_args (args )
7171
7272
7373def parse_cppcheck (file_name : str ) -> Dict [str , List [CppcheckError ]]:
@@ -86,36 +86,36 @@ def parse_cppcheck(file_name: str) -> Dict[str, List[CppcheckError]]:
8686 """
8787 root : ElementTree .Element = ElementTree .parse (file_name ).getroot ()
8888
89- if root .get ("version" ) is None or int ( root . get ( "version " )) != 2 :
89+ if int ( root .get ("version" , "0 " )) != 2 :
9090 raise ValueError ("Parser only supports Cppcheck XML version 2. Use --xml-version=2." )
9191
9292 error_root = root .find ("errors" )
93-
9493 errors = collections .defaultdict (list )
95- for error_element in error_root :
96- file = error_element .get ("file0" , "" )
97- locations = []
98- for location in error_element .findall ("location" ):
99- if not file :
100- file = location .get ("file" , "" )
101- locations .append (
102- CppcheckLocation (
103- location .get ("file" , "" ),
104- int (location .get ("line" , 0 )),
105- int (location .get ("column" , 0 )),
106- location .get ("info" , "" ),
94+ if error_root is not None :
95+ for error_element in error_root :
96+ file = error_element .get ("file0" , "" )
97+ locations = []
98+ for location in error_element .findall ("location" ):
99+ if not file :
100+ file = location .get ("file" , "" )
101+ locations .append (
102+ CppcheckLocation (
103+ location .get ("file" , "" ),
104+ int (location .get ("line" , 0 )),
105+ int (location .get ("column" , 0 )),
106+ location .get ("info" , "" ),
107+ )
107108 )
108- )
109109
110- error = CppcheckError (
111- file = file ,
112- locations = locations ,
113- message = error_element .get ("msg" , "" ),
114- severity = error_element .get ("severity" , "" ),
115- error_id = error_element .get ("id" , "" ),
116- verbose = error_element .get ("verbose" , "" ),
117- )
118- errors [error .file ].append (error )
110+ error = CppcheckError (
111+ file = file ,
112+ locations = locations ,
113+ message = error_element .get ("msg" , "" ),
114+ severity = error_element .get ("severity" , "" ),
115+ error_id = error_element .get ("id" , "" ),
116+ verbose = error_element .get ("verbose" , "" ),
117+ )
118+ errors [error .file ].append (error )
119119
120120 return errors
121121
@@ -187,13 +187,13 @@ def generate_test_suite(errors: Dict[str, List[CppcheckError]]) -> TestSuite:
187187 return test_suite
188188
189189
190- def main () -> ExitStatus : # pragma: no cover
190+ def main () -> int : # pragma: no cover
191191 """Main function.
192192
193193 Returns:
194194 Exit code.
195195 """
196- args = parse_arguments ()
196+ args = parse_arguments (sys . argv [ 1 :] )
197197
198198 try :
199199 errors = parse_cppcheck (args .input_file )
@@ -210,7 +210,7 @@ def main() -> ExitStatus: # pragma: no cover
210210 tree = JUnitXml ("Cppcheck" )
211211 tree .add_testsuite (generate_test_suite (errors ))
212212 tree .write (args .output_file )
213- return args .error_exitcode if len (errors ) > 0 else ExitStatus .success
213+ return int ( args .error_exitcode ) if len (errors ) > 0 else ExitStatus .success
214214
215215
216216if __name__ == "__main__" : # pragma: no cover
0 commit comments