예제 #1
0
 def attr_complete(self, prefix, ctx):
     """Complete attributes of an object."""
     attrs = set()
     m = RE_ATTR.match(prefix)
     if m is None:
         return attrs
     expr, attr = m.group(1, 3)
     expr = subexpr_from_unbalanced(expr, '(', ')')
     expr = subexpr_from_unbalanced(expr, '[', ']')
     expr = subexpr_from_unbalanced(expr, '{', '}')
     try:
         val = builtins.evalx(expr, glbs=ctx)
     except:  # pylint:disable=bare-except
         try:
             val = builtins.evalx(expr, glbs=builtins.__dict__)
         except:  # pylint:disable=bare-except
             return attrs  # anything could have gone wrong!
     opts = dir(val)
     if len(attr) == 0:
         opts = [o for o in opts if not o.startswith('_')]
     else:
         opts = [o for o in opts if o.startswith(attr)]
     prelen = len(prefix)
     for opt in opts:
         a = getattr(val, opt)
         rpl = opt + '(' if callable(a) else opt
         # note that prefix[:prelen-len(attr)] != prefix[:-len(attr)]
         # when len(attr) == 0.
         comp = prefix[:prelen-len(attr)] + rpl
         attrs.add(comp)
     return attrs
예제 #2
0
 def attr_complete(self, prefix, ctx):
     """Complete attributes of an object."""
     attrs = set()
     m = RE_ATTR.match(prefix)
     if m is None:
         return attrs
     expr, attr = m.group(1, 3)
     expr = subexpr_from_unbalanced(expr, '(', ')')
     expr = subexpr_from_unbalanced(expr, '[', ']')
     expr = subexpr_from_unbalanced(expr, '{', '}')
     try:
         val = builtins.evalx(expr, glbs=ctx)
     except:  # pylint:disable=bare-except
         try:
             val = builtins.evalx(expr, glbs=builtins.__dict__)
         except:  # pylint:disable=bare-except
             return attrs  # anything could have gone wrong!
     opts = dir(val)
     if len(attr) == 0:
         opts = [o for o in opts if not o.startswith('_')]
     else:
         csc = builtins.__xonsh_env__.get('CASE_SENSITIVE_COMPLETIONS')
         startswither = startswithnorm if csc else startswithlow
         attrlow = attr.lower()
         opts = [o for o in opts if startswither(o, attr, attrlow)]
     prelen = len(prefix)
     for opt in opts:
         a = getattr(val, opt)
         rpl = opt + '(' if callable(a) else opt
         # note that prefix[:prelen-len(attr)] != prefix[:-len(attr)]
         # when len(attr) == 0.
         comp = prefix[:prelen - len(attr)] + rpl
         attrs.add(comp)
     return attrs
예제 #3
0
파일: python.py 프로젝트: janschulz/xonsh
def attr_complete(prefix, ctx, filter_func):
    """Complete attributes of an object."""
    attrs = set()
    m = RE_ATTR.match(prefix)
    if m is None:
        return attrs
    expr, attr = m.group(1, 3)
    expr = xt.subexpr_from_unbalanced(expr, '(', ')')
    expr = xt.subexpr_from_unbalanced(expr, '[', ']')
    expr = xt.subexpr_from_unbalanced(expr, '{', '}')
    _ctx = None
    xonsh_safe_eval = builtins.__xonsh_execer__.eval
    try:
        val = xonsh_safe_eval(expr, ctx, transform=False)
        _ctx = ctx
    except:  # pylint:disable=bare-except
        try:
            val = xonsh_safe_eval(expr, builtins.__dict__, transform=False)
            _ctx = builtins.__dict__
        except:  # pylint:disable=bare-except
            return attrs  # anything could have gone wrong!
    if len(attr) == 0:
        opts = [o for o in dir(val) if not o.startswith('_')]
    else:
        opts = [o for o in dir(val) if filter_func(o, attr)]
    prelen = len(prefix)
    for opt in opts:
        # check whether these options actually work (e.g., disallow 7.imag)
        try:
            _val = '{0}.{1}'.format(expr, opt)
            xonsh_safe_eval(_val, _ctx, transform=False)
        except:  # pylint:disable=bare-except
            continue
        a = getattr(val, opt)
        if builtins.__xonsh_env__['COMPLETIONS_BRACKETS']:
            if callable(a):
                rpl = opt + '('
            elif isinstance(a, (cabc.Sequence, cabc.Mapping)):
                rpl = opt + '['
            else:
                rpl = opt
        else:
            rpl = opt
        # note that prefix[:prelen-len(attr)] != prefix[:-len(attr)]
        # when len(attr) == 0.
        comp = prefix[:prelen - len(attr)] + rpl
        attrs.add(comp)
    return attrs
예제 #4
0
def attr_complete(prefix, ctx, filter_func):
    """Complete attributes of an object."""
    attrs = set()
    m = RE_ATTR.match(prefix)
    if m is None:
        return attrs
    expr, attr = m.group(1, 3)
    expr = xt.subexpr_from_unbalanced(expr, '(', ')')
    expr = xt.subexpr_from_unbalanced(expr, '[', ']')
    expr = xt.subexpr_from_unbalanced(expr, '{', '}')
    _ctx = None
    xonsh_safe_eval = builtins.__xonsh_execer__.eval
    try:
        val = xonsh_safe_eval(expr, ctx, transform=False)
        _ctx = ctx
    except:  # pylint:disable=bare-except
        try:
            val = xonsh_safe_eval(expr, builtins.__dict__, transform=False)
            _ctx = builtins.__dict__
        except:  # pylint:disable=bare-except
            return attrs  # anything could have gone wrong!
    if len(attr) == 0:
        opts = [o for o in dir(val) if not o.startswith('_')]
    else:
        opts = [o for o in dir(val) if filter_func(o, attr)]
    prelen = len(prefix)
    for opt in opts:
        # check whether these options actually work (e.g., disallow 7.imag)
        try:
            _val = '{0}.{1}'.format(expr, opt)
            xonsh_safe_eval(_val, _ctx, transform=False)
        except:  # pylint:disable=bare-except
            continue
        a = getattr(val, opt)
        if builtins.__xonsh_env__['COMPLETIONS_BRACKETS']:
            if callable(a):
                rpl = opt + '('
            elif isinstance(a, (cabc.Sequence, cabc.Mapping)):
                rpl = opt + '['
            else:
                rpl = opt
        else:
            rpl = opt
        # note that prefix[:prelen-len(attr)] != prefix[:-len(attr)]
        # when len(attr) == 0.
        comp = prefix[:prelen - len(attr)] + rpl
        attrs.add(comp)
    return attrs
예제 #5
0
파일: completer.py 프로젝트: mwiebe/xonsh
 def attr_complete(self, prefix, ctx):
     """Complete attributes of an object."""
     attrs = set()
     m = RE_ATTR.match(prefix)
     if m is None:
         return attrs
     expr, attr = m.group(1, 3)
     expr = subexpr_from_unbalanced(expr, '(', ')')
     expr = subexpr_from_unbalanced(expr, '[', ']')
     expr = subexpr_from_unbalanced(expr, '{', '}')
     _ctx = None
     try:
         val = eval(expr, ctx)
         _ctx = ctx
     except:  # pylint:disable=bare-except
         try:
             val = eval(expr, builtins.__dict__)
             _ctx = builtins.__dict__
         except:  # pylint:disable=bare-except
             return attrs  # anything could have gone wrong!
     _opts = dir(val)
     # check whether these options actually work (e.g., disallow 7.imag)
     opts = []
     for i in _opts:
         try:
             eval('{0}.{1}'.format(expr, i), _ctx)
         except:  # pylint:disable=bare-except
             continue
         else:
             opts.append(i)
     if len(attr) == 0:
         opts = [o for o in opts if not o.startswith('_')]
     else:
         csc = builtins.__xonsh_env__.get('CASE_SENSITIVE_COMPLETIONS')
         startswither = startswithnorm if csc else startswithlow
         attrlow = attr.lower()
         opts = [o for o in opts if startswither(o, attr, attrlow)]
     prelen = len(prefix)
     for opt in opts:
         a = getattr(val, opt)
         rpl = opt + '(' if callable(a) else opt
         # note that prefix[:prelen-len(attr)] != prefix[:-len(attr)]
         # when len(attr) == 0.
         comp = prefix[:prelen - len(attr)] + rpl
         attrs.add(comp)
     return attrs
예제 #6
0
def test_subexpr_from_unbalanced_parens():
    cases = [
        ('f(x.', 'x.'),
        ('f(1,x.', 'x.'),
        ('f((1,10),x.y', 'x.y'),
        ]
    for expr, exp in cases:
        obs = subexpr_from_unbalanced(expr, '(', ')')
        yield assert_equal, exp, obs
예제 #7
0
def test_subexpr_from_unbalanced_parens():
    cases = [
        ('f(x.', 'x.'),
        ('f(1,x.', 'x.'),
        ('f((1,10),x.y', 'x.y'),
    ]
    for expr, exp in cases:
        obs = subexpr_from_unbalanced(expr, '(', ')')
        yield assert_equal, exp, obs
예제 #8
0
def attr_complete(prefix, ctx, filter_func):
    """Complete attributes of an object."""
    attrs = set()
    m = RE_ATTR.match(prefix)
    if m is None:
        return attrs
    expr, attr = m.group(1, 3)
    expr = xt.subexpr_from_unbalanced(expr, '(', ')')
    expr = xt.subexpr_from_unbalanced(expr, '[', ']')
    expr = xt.subexpr_from_unbalanced(expr, '{', '}')
    val, _ctx = _safe_eval(expr, ctx)
    if val is None and _ctx is None:
        return attrs
    if len(attr) == 0:
        opts = [o for o in dir(val) if not o.startswith('_')]
    else:
        opts = [o for o in dir(val) if filter_func(o, attr)]
    prelen = len(prefix)
    for opt in opts:
        # check whether these options actually work (e.g., disallow 7.imag)
        _expr = '{0}.{1}'.format(expr, opt)
        _val_, _ctx_ = _safe_eval(_expr, _ctx)
        if _val_ is None and _ctx_ is None:
            continue
        a = getattr(val, opt)
        if builtins.__xonsh_env__['COMPLETIONS_BRACKETS']:
            if callable(a):
                rpl = opt + '('
            elif isinstance(a, (cabc.Sequence, cabc.Mapping)):
                rpl = opt + '['
            else:
                rpl = opt
        else:
            rpl = opt
        # note that prefix[:prelen-len(attr)] != prefix[:-len(attr)]
        # when len(attr) == 0.
        comp = prefix[:prelen - len(attr)] + rpl
        attrs.add(comp)
    return attrs
예제 #9
0
def attr_complete(prefix, ctx, filter_func):
    """Complete attributes of an object."""
    attrs = set()
    m = RE_ATTR.match(prefix)
    if m is None:
        return attrs
    expr, attr = m.group(1, 3)
    expr = xt.subexpr_from_unbalanced(expr, "(", ")")
    expr = xt.subexpr_from_unbalanced(expr, "[", "]")
    expr = xt.subexpr_from_unbalanced(expr, "{", "}")
    val, _ctx = _safe_eval(expr, ctx)
    if val is None and _ctx is None:
        return attrs
    if len(attr) == 0:
        opts = [o for o in dir(val) if not o.startswith("_")]
    else:
        opts = [o for o in dir(val) if filter_func(o, attr)]
    prelen = len(prefix)
    for opt in opts:
        # check whether these options actually work (e.g., disallow 7.imag)
        _expr = f"{expr}.{opt}"
        _val_, _ctx_ = _safe_eval(_expr, _ctx)
        if _val_ is None and _ctx_ is None:
            continue
        a = getattr(val, opt)
        if XSH.env["COMPLETIONS_BRACKETS"]:
            if callable(a):
                rpl = opt + "("
            elif isinstance(a, (cabc.Sequence, cabc.Mapping)):
                rpl = opt + "["
            else:
                rpl = opt
        else:
            rpl = opt
        # note that prefix[:prelen-len(attr)] != prefix[:-len(attr)]
        # when len(attr) == 0.
        comp = prefix[: prelen - len(attr)] + rpl
        attrs.add(comp)
    return attrs
예제 #10
0
파일: python.py 프로젝트: laerus/xonsh
def attr_complete(prefix, ctx, filter_func):
    """Complete attributes of an object."""
    attrs = set()
    m = RE_ATTR.match(prefix)
    if m is None:
        return attrs
    expr, attr = m.group(1, 3)
    expr = xt.subexpr_from_unbalanced(expr, '(', ')')
    expr = xt.subexpr_from_unbalanced(expr, '[', ']')
    expr = xt.subexpr_from_unbalanced(expr, '{', '}')
    val, _ctx = _safe_eval(expr, ctx)
    if val is None and _ctx is None:
        return attrs
    if len(attr) == 0:
        opts = [o for o in dir(val) if not o.startswith('_')]
    else:
        opts = [o for o in dir(val) if filter_func(o, attr)]
    prelen = len(prefix)
    for opt in opts:
        # check whether these options actually work (e.g., disallow 7.imag)
        _expr = '{0}.{1}'.format(expr, opt)
        _val_, _ctx_ = _safe_eval(_expr, _ctx)
        if _val_ is None and _ctx_ is None:
            continue
        a = getattr(val, opt)
        if builtins.__xonsh_env__['COMPLETIONS_BRACKETS']:
            if callable(a):
                rpl = opt + '('
            elif isinstance(a, (cabc.Sequence, cabc.Mapping)):
                rpl = opt + '['
            else:
                rpl = opt
        else:
            rpl = opt
        # note that prefix[:prelen-len(attr)] != prefix[:-len(attr)]
        # when len(attr) == 0.
        comp = prefix[:prelen - len(attr)] + rpl
        attrs.add(comp)
    return attrs
예제 #11
0
def test_subexpr_from_unbalanced_parens(inp, exp):
    obs = subexpr_from_unbalanced(inp, "(", ")")
    assert exp == obs
예제 #12
0
def test_subexpr_from_unbalanced_parens(inp, exp):
    obs = subexpr_from_unbalanced(inp, '(', ')')
    assert exp == obs
예제 #13
0
파일: test_tools.py 프로젝트: mitnk/xonsh
def test_subexpr_from_unbalanced_parens(inp, exp):
    obs = subexpr_from_unbalanced(inp, "(", ")")
    assert exp == obs
예제 #14
0
def test_subexpr_from_unbalanced_parens(inp, exp):
    obs = subexpr_from_unbalanced(inp, '(', ')')
    assert exp == obs