Example #1
0
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
Example #2
0
    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)
Example #3
0
 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
Example #4
0
 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)]
Example #5
0
 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
Example #6
0
 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
Example #7
0
    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
Example #8
0
 def name(self):
     return FakeName(str(self._original_param.name), self, self.start_pos)
Example #9
0
 def name(self):
     # might not exist sometimes (raises AttributeError)
     return FakeName(self._cls().obj.__name__, self)
Example #10
0
 def __init__(self, evaluator, name, pos):
     self.name = FakeName(name, self, pos)
     self.start_pos = pos
     self.parent = evaluator.BUILTINS
Example #11
0
 def __init__(self, name, pos):
     self.name = FakeName(name, self, pos)
     self.start_pos = pos
     self.parent = compiled.builtin
Example #12
0
 def name(self):
     try:
         name = self._get_class().__name__
     except AttributeError:
         name = repr(self.obj)
     return FakeName(name, self)