File tree Expand file tree Collapse file tree 2 files changed +69
-1
lines changed
src/python_minifier/transforms Expand file tree Collapse file tree 2 files changed +69
-1
lines changed Original file line number Diff line number Diff line change @@ -73,7 +73,25 @@ def is_dataclass_field(node):
7373
7474 return False
7575
76- if is_dataclass_field (node ):
76+ def is_named_tuple (node ):
77+ if sys .version_info < (3 , 5 ):
78+ return False
79+
80+ if not isinstance (node .parent , ast .ClassDef ):
81+ return False
82+
83+ if len (node .parent .bases ) == 0 :
84+ return False
85+
86+ for node in node .parent .bases :
87+ if isinstance (node , ast .Name ) and node .id == 'NamedTuple' :
88+ return True
89+ elif isinstance (node , ast . Attribute ) and node .attr == 'NamedTuple' :
90+ return True
91+
92+ return False
93+
94+ if is_dataclass_field (node ) or is_named_tuple (node ):
7795 return node
7896 elif node .value :
7997 return self .add_child (ast .Assign ([node .target ], node .value ), parent = node .parent )
Original file line number Diff line number Diff line change @@ -107,3 +107,53 @@ class MyClass:
107107 expected_ast = ast .parse (expected )
108108 actual_ast = remove_annotations (source )
109109 compare_ast (expected_ast , actual_ast )
110+
111+
112+ def test_no_remove_namedtuple ():
113+ if sys .version_info < (3 , 6 ):
114+ pytest .skip ('annotations unavailable in python < 3.6' )
115+
116+ source = '''
117+ class MyClass(NamedTuple):
118+ myfield: int
119+ mysecondfile: str
120+
121+ class MyClass2(typing.NamedTuple):
122+ myfield: int
123+ mysecondfile: str
124+
125+ class MyClass2(blah.NamedTuple):
126+ myfield: int
127+ mysecondfile: str
128+ '''
129+ expected = source
130+
131+ expected_ast = ast .parse (expected )
132+ actual_ast = remove_annotations (source )
133+ compare_ast (expected_ast , actual_ast )
134+
135+ def test_remove ():
136+ if sys .version_info < (3 , 6 ):
137+ pytest .skip ('annotations unavailable in python < 3.6' )
138+
139+ source = '''
140+ class Dummy(NermedTupel):
141+ myfield: int
142+ mysecondfile: str
143+
144+ class Dummy(typing.NermedTupel):
145+ myfield: int
146+ mysecondfile: str
147+ '''
148+ expected = '''
149+ class Dummy(NermedTupel):
150+ myfield: 0
151+ mysecondfile: 0
152+
153+ class Dummy(typing.NermedTupel):
154+ myfield: 0
155+ mysecondfile: 0
156+ '''
157+ expected_ast = ast .parse (expected )
158+ actual_ast = remove_annotations (source )
159+ compare_ast (expected_ast , actual_ast )
You can’t perform that action at this time.
0 commit comments