From ff1928bd96607deb70396e268b6b54dbbe9967e7 Mon Sep 17 00:00:00 2001 From: Terry Yin Date: Thu, 31 Oct 2024 10:03:05 +0800 Subject: [PATCH] fix the elseif statement for fortran --- lizard_languages/fortran.py | 7 ++++--- test/test_languages/testFortran.py | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lizard_languages/fortran.py b/lizard_languages/fortran.py index fe2dd498..be5f9d44 100644 --- a/lizard_languages/fortran.py +++ b/lizard_languages/fortran.py @@ -35,11 +35,10 @@ def generate_tokens(source_code, addition='', token_class=None): _until_end = r'(?:\\\n|[^\n])*' return CodeReader.generate_tokens( source_code, - r'(?i)' + - r'|\/\/' + + r'(?i)' + r'\/\/' + r'|\#' + _until_end + r'|\!' + _until_end + - r'|^C' + _until_end + r'|^\*' + _until_end + r'|\.OR\.' + r'|\.AND\.' + @@ -124,6 +123,8 @@ def _state_global(self, token): self.context.add_bare_nesting() elif token_upper.replace(' ', '') == 'ELSEIF': self.context.pop_nesting() + if token_upper == 'ELSEIF': + self.context.add_condition() self._state = self._if elif token_upper == 'END' or self._ends.match(token): self.context.pop_nesting() diff --git a/test/test_languages/testFortran.py b/test/test_languages/testFortran.py index 263201f9..917c4863 100644 --- a/test/test_languages/testFortran.py +++ b/test/test_languages/testFortran.py @@ -185,3 +185,18 @@ def test_macro_branched(self): self.assertEqual(2, len(result)) self.assertEqual('test', result[0].name) self.assertEqual('test7', result[1].name) + + def test_case_insensitive_tokens(self): + '''Test that tokens are matched case-insensitively''' + result = get_fortran_function_list(''' + subroutine test + If (a) Then + CALL sub(a) + elseIF (b) THEN + call SUB(b) + END IF + ENDsubroutine test + ''') + self.assertEqual(1, len(result)) + self.assertEqual('test', result[0].name) + self.assertEqual(2, result[0].cyclomatic_complexity)