def _load_faked_module(module): module_name = module.__name__ if module_name == '__builtin__' and not is_py3: module_name = 'builtins' try: return modules[module_name] except KeyError: path = os.path.dirname(os.path.abspath(__file__)) try: with open(os.path.join(path, 'fake', module_name) + '.pym') as f: source = f.read() except IOError: modules[module_name] = None return grammar = load_grammar('grammar3.4') module = Parser(grammar, unicode(source), module_name).module modules[module_name] = module if module_name == 'builtins' and not is_py3: # There are two implementations of `open` for either python 2/3. # -> Rename the python2 version (`look at fake/builtins.pym`). open_func = search_scope(module, 'open') open_func.children[1] = FakeName('open_python3') open_func = search_scope(module, 'open_python2') open_func.children[1] = FakeName('open') return module
def get_param_names(self): for name, default in self._get_param_name_and_default_values(): children = [FakeName(name, (0, 0))] if default: children.extend([ Operator('=', (0, 0)), FakeName(default), ]) name_node = FakeName(name, parent=Param(children, self)) yield ParamName(self, name_node)
def params(self): params_str, ret = self._parse_function_doc() tokens = params_str.split(',') params = [] for p in tokens: parts = [FakeName(part) for part in p.strip().split('=')] if len(parts) > 1: parts.insert(1, Operator(zero_position_modifier, '=', (0, 0))) params.append(Param(parts, self)) return params
def __getitem__(self, name): try: getattr(self._compiled_obj.obj, name) except AttributeError: raise KeyError('%s in %s not found.' % (name, self._compiled_obj)) except Exception: # This is a bit ugly. We're basically returning this to make # lookups possible without having the actual attribute. However # this makes proper completion possible. return [FakeName(name, create(self._evaluator, None), is_definition=True)] return [self.name_class(self._evaluator, self._compiled_obj, name)]
def get_params(self): return [] # TODO Fix me. params_str, ret = self._parse_function_doc() tokens = params_str.split(',') if inspect.ismethoddescriptor(self.obj): tokens.insert(0, 'self') params = [] for p in tokens: parts = [FakeName(part) for part in p.strip().split('=')] if len(parts) > 1: parts.insert(1, Operator('=', (0, 0))) params.append(Param(parts, self)) return params
def params(self): params_str, ret = self._parse_function_doc() tokens = params_str.split(',') params = [] module = SubModule(self.get_parent_until().name) # it seems like start_pos/end_pos is always (0, 0) for a compiled # object start_pos, end_pos = (0, 0), (0, 0) for p in tokens: parts = [FakeName(part) for part in p.strip().split('=')] if len(parts) >= 2: parts.insert(1, Operator('=', (0, 0))) params.append(Param(module, parts, start_pos, end_pos, builtin)) return params
def _simple_complete(self, path, like): user_stmt = self._parser.user_stmt_with_whitespace() is_simple_path = not path or re.search('^[\w][\w\d.]*$', path) if isinstance(user_stmt, pr.Import) or not is_simple_path: return super(type(self), self)._simple_complete(path, like) else: class NamespaceModule(object): def __getattr__(_, name): for n in self.namespaces: try: return n[name] except KeyError: pass raise AttributeError() def __dir__(_): return list( set( chain.from_iterable(n.keys() for n in self.namespaces))) paths = path.split('.') if path else [] namespaces = (NamespaceModule(), builtins) for p in paths: old, namespaces = namespaces, [] for n in old: try: namespaces.append(getattr(n, p)) except AttributeError: pass completions = [] for namespace in namespaces: for name in dir(namespace): if name.lower().startswith(like.lower()): scope = self._parser.module() n = FakeName(name, scope) completions.append((n, scope)) return completions
def name(self): return FakeName(str(self._original_param.name), self, self.start_pos)
def name(self): # might not exist sometimes (raises AttributeError) return FakeName(self._cls().obj.__name__, self)
def __init__(self, evaluator, name, pos): self.name = FakeName(name, self, pos) self.start_pos = pos self.parent = evaluator.BUILTINS
def __init__(self, name, pos): self.name = FakeName(name, self, pos) self.start_pos = pos self.parent = compiled.builtin
def name(self): try: name = self._get_class().__name__ except AttributeError: name = repr(self.obj) return FakeName(name, self)