From 2640089e8bc31afaf0acf96ab3e918357b2a71f2 Mon Sep 17 00:00:00 2001 From: ArmaanjeetSandhu Date: Thu, 2 Jul 2026 20:22:00 +0530 Subject: [PATCH] fix(csv): emit columns for extensions with multiple FUNCTION_INFO fields --- lizard_ext/csvoutput.py | 7 +++---- test/testOutputCSV.py | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/lizard_ext/csvoutput.py b/lizard_ext/csvoutput.py index 4bef5cf8..fcd58847 100644 --- a/lizard_ext/csvoutput.py +++ b/lizard_ext/csvoutput.py @@ -23,10 +23,9 @@ def csv_output(result, options): extension_variables = [] extension_captions = [] for extension in options.extensions: - if extension.__class__.__name__ == 'LizardExtension': - if hasattr(extension, 'FUNCTION_INFO') and \ - len(list(extension.FUNCTION_INFO)) == 1: - extension_variable = list(extension.FUNCTION_INFO)[0] + if extension.__class__.__name__ == 'LizardExtension' and \ + hasattr(extension, 'FUNCTION_INFO'): + for extension_variable in extension.FUNCTION_INFO: extension_variables.append(extension_variable) var_extension = extension.FUNCTION_INFO[extension_variable] extension_caption = var_extension['caption'] \ diff --git a/test/testOutputCSV.py b/test/testOutputCSV.py index 685f8081..37ae0111 100644 --- a/test/testOutputCSV.py +++ b/test/testOutputCSV.py @@ -66,6 +66,45 @@ def test_csv_no_header_with_extension(self): sys.stdout.stream.splitlines()[0] ) + def test_csv_header_with_multi_field_extension(self): + options_mock = Mock() + options_mock.verbose = True + extension_mock = Mock() + extension_mock.__class__.__name__ = 'LizardExtension' + extension_mock.FUNCTION_INFO = { + "metric_one": {"caption": " metric_one "}, + "metric_two": {"caption": " metric_two "}, + } + options_mock.extensions = [extension_mock] + results = AllResult([self.fileSummary]) + results.result[0].function_list[0].metric_one = 12.5 + results.result[0].function_list[0].metric_two = 99.0 + csv_output(results, options_mock) + self.assertRegex( + sys.stdout.stream, + r"NLOC,CCN,token,PARAM,length,location,file,function," + r"long_name,start,end, metric_one , metric_two ") + + def test_csv_row_with_multi_field_extension(self): + options_mock = Mock() + options_mock.verbose = False + extension_mock = Mock() + extension_mock.__class__.__name__ = 'LizardExtension' + extension_mock.FUNCTION_INFO = { + "metric_one": {"caption": " metric_one "}, + "metric_two": {"caption": " metric_two "}, + } + options_mock.extensions = [extension_mock] + results = AllResult([self.fileSummary]) + results.result[0].function_list[0].metric_one = 12.5 + results.result[0].function_list[0].metric_two = 99.0 + csv_output(results, options_mock) + self.assertEqual( + '1,1,1,0,1,"foo@100-100@FILENAME","FILENAME","foo","foo",' + '100,100,12.5,99.0', + sys.stdout.stream.splitlines()[0] + ) + def test_print_fileinfo(self): options_mock = Mock() options_mock.verbose = True