28
28
import textwrap
29
29
import types
30
30
from tokenize import detect_encoding
31
- from typing import List , Optional , Union
31
+ from typing import List , Optional , Tuple , Union
32
32
33
33
from astroid import bases , modutils , nodes , raw_building , rebuilder , util
34
34
from astroid ._ast import get_parser_module
@@ -147,36 +147,40 @@ def file_build(self, path, modname=None):
147
147
except ImportError :
148
148
modname = os .path .splitext (os .path .basename (path ))[0 ]
149
149
# build astroid representation
150
- module = self ._data_build (data , modname , path )
151
- return self ._post_build (module , encoding )
150
+ module , builder = self ._data_build (data , modname , path )
151
+ return self ._post_build (module , builder , encoding )
152
152
153
153
def string_build (self , data , modname = "" , path = None ):
154
154
"""Build astroid from source code string."""
155
- module = self ._data_build (data , modname , path )
155
+ module , builder = self ._data_build (data , modname , path )
156
156
module .file_bytes = data .encode ("utf-8" )
157
- return self ._post_build (module , "utf-8" )
157
+ return self ._post_build (module , builder , "utf-8" )
158
158
159
- def _post_build (self , module , encoding ):
159
+ def _post_build (
160
+ self , module : nodes .Module , builder : rebuilder .TreeRebuilder , encoding : str
161
+ ) -> nodes .Module :
160
162
"""Handles encoding and delayed nodes after a module has been built"""
161
163
module .file_encoding = encoding
162
164
self ._manager .cache_module (module )
163
165
# post tree building steps after we stored the module in the cache:
164
- for from_node in module ._import_from_nodes :
166
+ for from_node in builder ._import_from_nodes :
165
167
if from_node .modname == "__future__" :
166
168
for symbol , _ in from_node .names :
167
169
module .future_imports .add (symbol )
168
170
self .add_from_names_to_locals (from_node )
169
171
# handle delayed assattr nodes
170
- for delayed in module ._delayed_assattr :
172
+ for delayed in builder ._delayed_assattr :
171
173
self .delayed_assattr (delayed )
172
174
173
175
# Visit the transforms
174
176
if self ._apply_transforms :
175
177
module = self ._manager .visit_transforms (module )
176
178
return module
177
179
178
- def _data_build (self , data : str , modname , path ):
179
- """Build tree node from data and add some information"""
180
+ def _data_build (
181
+ self , data : str , modname , path
182
+ ) -> Tuple [nodes .Module , rebuilder .TreeRebuilder ]:
183
+ """Build tree node from data and add some informations"""
180
184
try :
181
185
node , parser_module = _parse_string (data , type_comments = True )
182
186
except (TypeError , ValueError , SyntaxError ) as exc :
@@ -202,9 +206,7 @@ def _data_build(self, data: str, modname, path):
202
206
)
203
207
builder = rebuilder .TreeRebuilder (self ._manager , parser_module , data )
204
208
module = builder .visit_module (node , modname , node_file , package )
205
- module ._import_from_nodes = builder ._import_from_nodes
206
- module ._delayed_assattr = builder ._delayed_assattr
207
- return module
209
+ return module , builder
208
210
209
211
def add_from_names_to_locals (self , node ):
210
212
"""Store imported names to the locals
0 commit comments