Skip to content

Commit fa209c0

Browse files
authored
Merge pull request #6 from FSoft-AI4Code/dev/extended
Python: Handle class definitions with empty argument list
2 parents 66616c4 + 0d16fb9 commit fa209c0

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

src/codetext/parser/python_parser.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,9 @@ def get_class_metadata(class_node, blob: str=None) -> Dict[str, str]:
114114
argument_list = get_node_text(child).split(',')
115115
for arg in argument_list:
116116
item = re.sub(r'[^a-zA-Z0-9\_]', ' ', arg).split()
117-
metadata['parameters'][item[0].strip()] = None
117+
# Handle class definitions with empty argument list class ABC()
118+
if len(item) > 0:
119+
metadata['parameters'][item[0].strip()] = None
118120

119121
# get __init__ function
120122
return metadata

tests/test_parser/test_python.py

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ def test_get_class_list(self):
2727
root = self.root_node
2828

2929
class_list = PythonParser.get_class_list(root)
30-
3130
self.assertEqual(len(class_list), 1)
3231

3332
def test_get_docstring(self):
@@ -59,21 +58,41 @@ def test_sample(arg1: str = "string", arg2 = "another_string"):
5958

6059
def test_get_class_metadata(self):
6160
code_sample = '''
61+
class ABC():
62+
pass
63+
6264
class Sample(ABC):
6365
def __init__(self):
6466
pass
6567
6668
def test_sample(self, arg1: str = "string", arg2 = "another_string"):
6769
return NotImplement()
70+
71+
class ThisIsalsoAclass(ABC, Sample):
72+
pass
6873
'''
6974
root = parse_code(code_sample, 'python').root_node
7075

71-
classes = list(PythonParser.get_class_list(root))[0]
72-
metadata = PythonParser.get_class_metadata(classes)
73-
76+
77+
classes = list(PythonParser.get_class_list(root))
78+
self.assertEqual(len(classes), 3)
79+
80+
metadata = PythonParser.get_class_metadata(classes[0])
81+
self.assertEqual(metadata['parameters'], {})
82+
self.assertEqual(metadata['identifier'], 'ABC')
83+
84+
85+
metadata = PythonParser.get_class_metadata(classes[1])
7486
self.assertEqual(metadata['parameters'], {'ABC': None})
7587
self.assertEqual(metadata['identifier'], 'Sample')
7688

89+
90+
metadata = PythonParser.get_class_metadata(classes[2])
91+
self.assertEqual(metadata['parameters'], {'ABC': None, 'Sample': None})
92+
self.assertEqual(metadata['identifier'], 'ThisIsalsoAclass')
93+
94+
95+
7796
def test_get_comment_list(self):
7897
root = self.root_node
7998

0 commit comments

Comments
 (0)