1313import  warnings 
1414import  sys 
1515
16+ from  jedi ._compatibility  import  unicode 
1617from  jedi .parser  import  load_grammar 
1718from  jedi .parser  import  tree 
18- from  jedi .parser .diff  import  FastParser 
19+ from  jedi .parser .fast  import  FastParser 
1920from  jedi .parser .utils  import  save_parser 
2021from  jedi  import  debug 
2122from  jedi  import  settings 
3334from  jedi .evaluate .helpers  import  get_module_names 
3435from  jedi .evaluate .sys_path  import  get_venv_path 
3536from  jedi .evaluate .iterable  import  unpack_tuple_to_dict 
36- from  jedi .evaluate .filters  import  TreeNameDefinition 
3737
3838# Jedi uses lots and lots of recursion. By setting this a little bit higher, we 
3939# can remove some "maximum recursion depth" errors. 
@@ -135,20 +135,15 @@ def __init__(self, source=None, line=None, column=None, path=None,
135135 self ._evaluator  =  Evaluator (self ._grammar , sys_path = sys_path )
136136 debug .speed ('init' )
137137
138-  @cache .memoize_method  
139-  def  _get_module_node (self ):
138+  def  _get_module (self ):
140139 cache .invalidate_star_import_cache (self ._path )
141140 parser  =  FastParser (self ._grammar , self ._source , self .path )
142141 save_parser (self .path , parser , pickling = False )
143142
143+  module  =  self ._evaluator .wrap (parser .module )
144+  imports .add_module (self ._evaluator , unicode (module .name ), module )
144145 return  parser .module 
145146
146-  @cache .memoize_method  
147-  def  _get_module (self ):
148-  module  =  er .ModuleContext (self ._evaluator , self ._get_module_node ())
149-  imports .add_module (self ._evaluator , module .name .string_name , module )
150-  return  module 
151- 
152147 @property  
153148 def  source_path (self ):
154149 """ 
@@ -191,15 +186,12 @@ def goto_definitions(self):
191186
192187 :rtype: list of :class:`classes.Definition` 
193188 """ 
194-  module_node  =  self ._get_module_node ()
195-  leaf  =  module_node .name_for_position (self ._pos )
189+  leaf  =  self ._get_module ().name_for_position (self ._pos )
196190 if  leaf  is  None :
197-  leaf  =  module_node .get_leaf_for_position (self ._pos )
191+  leaf  =  self . _get_module () .get_leaf_for_position (self ._pos )
198192 if  leaf  is  None :
199193 return  []
200- 
201-  context  =  self ._evaluator .create_context (self ._get_module (), leaf )
202-  definitions  =  helpers .evaluate_goto_definition (self ._evaluator , context , leaf )
194+  definitions  =  helpers .evaluate_goto_definition (self ._evaluator , leaf )
203195
204196 names  =  [s .name  for  s  in  definitions ]
205197 defs  =  [classes .Definition (self ._evaluator , name ) for  name  in  names ]
@@ -219,9 +211,11 @@ def goto_assignments(self, follow_imports=False):
219211 """ 
220212 def  filter_follow_imports (names ):
221213 for  name  in  names :
222-  if  isinstance (name , (imports .ImportName , TreeNameDefinition )):
223-  for  context  in  name .infer ():
224-  yield  context .name 
214+  definition  =  name .get_definition ()
215+  if  definition .type  in  ('import_name' , 'import_from' ):
216+  imp  =  imports .ImportWrapper (self ._evaluator , name )
217+  for  name  in  filter_follow_imports (imp .follow (is_goto = True )):
218+  yield  name 
225219 else :
226220 yield  name 
227221
@@ -236,11 +230,10 @@ def _goto(self):
236230 """ 
237231 Used for goto_assignments and usages. 
238232 """ 
239-  name  =  self ._get_module_node ().name_for_position (self ._pos )
233+  name  =  self ._get_module ().name_for_position (self ._pos )
240234 if  name  is  None :
241235 return  []
242-  context  =  self ._evaluator .create_context (self ._get_module (), name )
243-  return  list (self ._evaluator .goto (context , name ))
236+  return  list (self ._evaluator .goto (name ))
244237
245238 def  usages (self , additional_module_paths = ()):
246239 """ 
@@ -256,33 +249,37 @@ def usages(self, additional_module_paths=()):
256249 temp , settings .dynamic_flow_information  =  \
257250 settings .dynamic_flow_information , False 
258251 try :
259-  module_node  =  self ._get_module_node ()
260-  user_stmt  =  module_node .get_statement_for_position (self ._pos )
261-  definition_names  =  self ._goto ()
262-  if  not  definition_names  and  isinstance (user_stmt , tree .Import ):
252+  user_stmt  =  self ._get_module ().get_statement_for_position (self ._pos )
253+  definitions  =  self ._goto ()
254+  if  not  definitions  and  isinstance (user_stmt , tree .Import ):
263255 # For not defined imports (goto doesn't find something, we take 
264256 # the name as a definition. This is enough, because every name 
265257 # points to it. 
266258 name  =  user_stmt .name_for_position (self ._pos )
267259 if  name  is  None :
268260 # Must be syntax 
269261 return  []
270-  definition_names  =  [TreeNameDefinition ( self . _get_module (),  name ) ]
262+  definitions  =  [name ]
271263
272-  if  not  definition_names :
264+  if  not  definitions :
273265 # Without a definition for a name we cannot find references. 
274266 return  []
275267
276-  definition_names  =  usages .resolve_potential_imports (self ._evaluator ,
277-  definition_names )
268+  if  not  isinstance (user_stmt , tree .Import ):
269+  # import case is looked at with add_import_name option 
270+  definitions  =  usages .usages_add_import_modules (self ._evaluator ,
271+  definitions )
272+ 
273+  module  =  set ([d .get_parent_until () for  d  in  definitions ])
274+  module .add (self ._get_module ())
275+  names  =  usages .usages (self ._evaluator , definitions , module )
278276
279-  modules  =  set ([d .get_root_context () for  d  in  definition_names ])
280-  modules .add (self ._get_module ())
281-  definitions  =  usages .usages (self ._evaluator , definition_names , modules )
277+  for  d  in  set (definitions ):
278+  names .append (classes .Definition (self ._evaluator , d ))
282279 finally :
283280 settings .dynamic_flow_information  =  temp 
284281
285-  return  helpers .sorted_definitions (set (definitions ))
282+  return  helpers .sorted_definitions (set (names ))
286283
287284 def  call_signatures (self ):
288285 """ 
@@ -301,18 +298,13 @@ def call_signatures(self):
301298 :rtype: list of :class:`classes.CallSignature` 
302299 """ 
303300 call_signature_details  =  \
304-  helpers .get_call_signature_details (self ._get_module_node (), self ._pos )
301+  helpers .get_call_signature_details (self ._get_module (), self ._pos )
305302 if  call_signature_details  is  None :
306303 return  []
307304
308-  context  =  self ._evaluator .create_context (
309-  self ._get_module (),
310-  call_signature_details .bracket_leaf 
311-  )
312305 with  common .scale_speed_settings (settings .scale_call_signatures ):
313306 definitions  =  helpers .cache_call_signatures (
314307 self ._evaluator ,
315-  context ,
316308 call_signature_details .bracket_leaf ,
317309 self ._code_lines ,
318310 self ._pos 
@@ -327,29 +319,27 @@ def call_signatures(self):
327319
328320 def  _analysis (self ):
329321 self ._evaluator .is_analysis  =  True 
330-  module_node  =  self ._get_module_node ()
331-  self ._evaluator .analysis_modules  =  [module_node ]
322+  self ._evaluator .analysis_modules  =  [self ._get_module ()]
332323 try :
333-  for  node  in  module_node .nodes_to_execute ():
334-  context  =  self ._get_module ().create_context (node )
324+  for  node  in  self ._get_module ().nodes_to_execute ():
335325 if  node .type  in  ('funcdef' , 'classdef' ):
336-  # TODO This is stupid, should be private 
337-  from   jedi . evaluate . finder   import   _name_to_types 
338-  # Resolve the decorators. 
339-  _name_to_types (self ._evaluator , context ,  node . children [ 1 ] )
326+  if   node . type   ==   'classdef' : 
327+    continue 
328+    raise   NotImplementedError 
329+  er . Function (self ._evaluator , node ). get_decorated_func ( )
340330 elif  isinstance (node , tree .Import ):
341331 import_names  =  set (node .get_defined_names ())
342332 if  node .is_nested ():
343333 import_names  |=  set (path [- 1 ] for  path  in  node .paths ())
344334 for  n  in  import_names :
345-  imports .infer_import ( context , n )
335+  imports .ImportWrapper ( self . _evaluator , n ). follow ( )
346336 elif  node .type  ==  'expr_stmt' :
347-  types  =  context . eval_node (node )
337+  types  =  self . _evaluator . eval_element (node )
348338 for  testlist  in  node .children [:- 1 :2 ]:
349339 # Iterate tuples. 
350340 unpack_tuple_to_dict (self ._evaluator , types , testlist )
351341 else :
352-  try_iter_content (self ._evaluator .goto_definitions (context ,  node ))
342+  try_iter_content (self ._evaluator .goto_definitions (node ))
353343 self ._evaluator .reset_recursion_limitations ()
354344
355345 ana  =  [a  for  a  in  self ._evaluator .analysis  if  self .path  ==  a .path ]
@@ -396,13 +386,11 @@ def __init__(self, source, namespaces, **kwds):
396386 super (Interpreter , self ).__init__ (source , ** kwds )
397387 self .namespaces  =  namespaces 
398388
389+  parser_module  =  super (Interpreter , self )._get_module ()
390+  self ._module  =  interpreter .MixedModule (self ._evaluator , parser_module , self .namespaces )
391+ 
399392 def  _get_module (self ):
400-  parser_module  =  super (Interpreter , self )._get_module_node ()
401-  return  interpreter .MixedModuleContext (
402-  self ._evaluator ,
403-  parser_module ,
404-  self .namespaces 
405-  )
393+  return  self ._module 
406394
407395
408396def  defined_names (source , path = None , encoding = 'utf-8' ):
@@ -442,21 +430,13 @@ def names(source=None, path=None, encoding='utf-8', all_scopes=False,
442430 ``definitions=True``. E.g. ``a = b`` returns ``b``. 
443431 """ 
444432 def  def_ref_filter (_def ):
445-  is_def  =  _def ._name . tree_name . is_definition ()
433+  is_def  =  _def .is_definition ()
446434 return  definitions  and  is_def  or  references  and  not  is_def 
447435
448436 # Set line/column to a random position, because they don't matter. 
449437 script  =  Script (source , line = 1 , column = 0 , path = path , encoding = encoding )
450-  module_context  =  script ._get_module ()
451-  defs  =  [
452-  classes .Definition (
453-  script ._evaluator ,
454-  TreeNameDefinition (
455-  module_context .create_context (name .parent ),
456-  name 
457-  )
458-  ) for  name  in  get_module_names (script ._get_module_node (), all_scopes )
459-  ]
438+  defs  =  [classes .Definition (script ._evaluator , name_part )
439+  for  name_part  in  get_module_names (script ._get_module (), all_scopes )]
460440 return  sorted (filter (def_ref_filter , defs ), key = lambda  x : (x .line , x .column ))
461441
462442
0 commit comments