def test_simple(): e = _evaluator() bltn = compiled.CompiledObject(e, builtins) obj = compiled.CompiledObject(e, '_str_', bltn) upper, = obj.py__getattribute__('upper') objs = list(upper.execute_evaluated()) assert len(objs) == 1 assert isinstance(objs[0], instance.CompiledInstance)
def test_simple(): e = Evaluator() bltn = compiled.CompiledObject(builtins) obj = compiled.CompiledObject('_str_', bltn) upper = e.find_types(obj, 'upper') assert len(upper) == 1 objs = list(e.execute(upper[0])) assert len(objs) == 1 assert objs[0].obj is str
def test_simple(): e = _evaluator() bltn = compiled.CompiledObject(e, builtins) obj = compiled.CompiledObject(e, '_str_', bltn) upper = e.find_types(obj, 'upper') assert len(upper) == 1 objs = list(e.execute(list(upper)[0])) assert len(objs) == 1 assert isinstance(objs[0], representation.Instance)
def test_doc(): """ Even CompiledObject docs always return empty docstrings - not None, that's just a Jedi API definition. """ obj = compiled.CompiledObject(_evaluator(), ''.__getnewargs__) assert obj.py__doc__() == ''
def test_parent_context(same_process_evaluator, attribute, expected_name, expected_parent): import math import decimal import datetime class C: x = 1 y = int z = True cos = math.cos dec = decimal.Decimal(1) dt = datetime.datetime(2000, 1, 1) ret_int = _return_int o = compiled.CompiledObject( same_process_evaluator, DirectObjectAccess(same_process_evaluator, C) ) x, = o.py__getattribute__(attribute) assert x.py__name__() == expected_name module_name = x.parent_context.py__name__() if module_name == '__builtin__': module_name = 'builtins' # Python 2 assert module_name == expected_parent assert x.parent_context.parent_context is None
def parent(self): obj = self._value parser_path = [] if inspect.ismodule(obj): module = obj else: class FakeParent(pr.Base): parent = None # To avoid having no parent for NamePart. path = None names = [] try: o = obj.__objclass__ names.append(obj.__name__) obj = o except AttributeError: pass try: module_name = obj.__module__ names.insert(0, obj.__name__) except AttributeError: # Unfortunately in some cases like `int` there's no __module__ module = builtins else: module = __import__(module_name) fake_name = helpers.FakeName(names, FakeParent()) parser_path = fake_name.names raw_module = get_module(self._value) try: path = module.__file__ except AttributeError: pass else: path = re.sub('c$', '', path) if path.endswith('.py'): # cut the `c` from `.pyc` with open(path) as f: source = source_to_unicode(f.read()) mod = FastParser(source, path[:-1]).module if not parser_path: return mod found = self._evaluator.eval_call_path(iter(parser_path), mod, None) if found: return found[0] debug.warning('Interpreter lookup for Python code failed %s', mod) module = compiled.CompiledObject(raw_module) if raw_module == builtins: # The builtins module is special and always cached. module = compiled.builtin return compiled.create(self._evaluator, self._value, module, module)
def parent(self): parser_path = [] obj = self._value if inspect.ismodule(obj): module = obj else: try: o = obj.__objclass__ parser_path.append( pr.NamePart(obj.__name__, None, (None, None))) obj = o except AttributeError: pass try: module_name = obj.__module__ parser_path.insert( 0, pr.NamePart(obj.__name__, None, (None, None))) except AttributeError: # Unfortunately in some cases like `int` there's no __module__ module = builtins else: module = __import__(module_name) raw_module = get_module(self._value) try: path = module.__file__ except AttributeError: pass else: path = re.sub('c$', '', path) if path.endswith('.py'): # cut the `c` from `.pyc` with open(path) as f: source = source_to_unicode(f.read()) mod = FastParser(source, path[:-1]).module if not parser_path: return mod found = self._evaluator.eval_call_path(iter(parser_path), mod, None) if found: return found[0] debug.warning('Interpreter lookup for Python code failed %s', mod) module = compiled.CompiledObject(raw_module) return compiled.create(self._value, module, module)
def test_qualified_names(same_process_evaluator, obj, expected_names): o = compiled.CompiledObject( same_process_evaluator, DirectObjectAccess(same_process_evaluator, obj)) assert o.get_qualified_names() == tuple(expected_names)
def parent(self): """ Creating fake statements for the interpreter. """ obj = self._value parser_path = [] if inspect.ismodule(obj): module = obj else: names = [] try: o = obj.__objclass__ names.append(obj.__name__) obj = o except AttributeError: pass try: module_name = obj.__module__ names.insert(0, obj.__name__) except AttributeError: # Unfortunately in some cases like `int` there's no __module__ module = builtins else: # TODO this import is wrong. Yields x for x.y.z instead of z module = __import__(module_name) parser_path = names raw_module = get_module(self._value) found = [] try: path = module.__file__ except AttributeError: pass else: path = re.sub('c$', '', path) if path.endswith('.py'): # cut the `c` from `.pyc` with open(path) as f: source = source_to_unicode(f.read()) mod = FastParser(load_grammar(), source, path[:-1]).module if parser_path: assert len(parser_path) == 1 found = self._evaluator.find_types(mod, parser_path[0], search_global=True) else: found = [er.wrap(self._evaluator, mod)] if not found: debug.warning( 'Possibly an interpreter lookup for Python code failed %s', parser_path) if not found: evaluated = compiled.CompiledObject(obj) if evaluated == builtins: # The builtins module is special and always cached. evaluated = compiled.builtin found = [evaluated] content = iterable.AlreadyEvaluated(found) stmt = pt.ExprStmt([ self, pt.Operator(pt.zero_position_modifier, '=', (0, 0), ''), content ]) stmt.parent = self._module return stmt