def convert_leaf(self, grammar, type, value, prefix, start_pos):
        # print('leaf', repr(value), token.tok_name[type])
        if type == tokenize.NAME:
            if value in grammar.keywords:
                if value in ('def', 'class', 'lambda'):
                    self._scope_names_stack.append({})

                return pt.Keyword(self.position_modifier, value, start_pos,
                                  prefix)
            else:
                name = pt.Name(self.position_modifier, value, start_pos,
                               prefix)
                # Keep a listing of all used names
                arr = self._used_names.setdefault(name.value, [])
                arr.append(name)
                arr = self._scope_names_stack[-1].setdefault(name.value, [])
                arr.append(name)
                return name
        elif type == STRING:
            return pt.String(self.position_modifier, value, start_pos, prefix)
        elif type == NUMBER:
            return pt.Number(self.position_modifier, value, start_pos, prefix)
        elif type == NEWLINE:
            return pt.Newline(self.position_modifier, value, start_pos, prefix)
        elif type == INDENT:
            return pt.Indent(self.position_modifier, value, start_pos, prefix)
        elif type == DEDENT:
            return pt.Dedent(self.position_modifier, value, start_pos, prefix)
        elif type == ENDMARKER:
            return pt.EndMarker(self.position_modifier, value, start_pos,
                                prefix)
        else:
            return pt.Operator(self.position_modifier, value, start_pos,
                               prefix)
Exemple #2
0
    def convert_leaf(self, grammar, type, value, prefix, start_pos):
        #print('leaf', value, pytree.type_repr(type))
        if type == tokenize.NAME:
            if value in grammar.keywords:
                if value in ('def', 'class', 'lambda'):
                    self._scope_names_stack.append({})

                return pt.Keyword(self.position_modifier, value, start_pos,
                                  prefix)
            else:
                name = pt.Name(self.position_modifier, value, start_pos,
                               prefix)
                # Keep a listing of all used names
                arr = self._used_names.setdefault(name.value, [])
                arr.append(name)
                arr = self._scope_names_stack[-1].setdefault(name.value, [])
                arr.append(name)
                return name
        elif type == STRING:
            return pt.String(self.position_modifier, value, start_pos, prefix)
        elif type == NUMBER:
            return pt.Number(self.position_modifier, value, start_pos, prefix)
        elif type in (NEWLINE, ENDMARKER):
            return pt.Whitespace(self.position_modifier, value, start_pos,
                                 prefix)
        else:
            return pt.Operator(self.position_modifier, value, start_pos,
                               prefix)
Exemple #3
0
def _find_type_from_comment_hint(context, node, varlist, name):
    index = None
    if varlist.type in ("testlist_star_expr", "exprlist"):
        # something like "a, b = 1, 2"
        index = 0
        for child in varlist.children:
            if child == name:
                break
            if child.type == "operator":
                continue
            index += 1
        else:
            return []

    comment = node.get_following_comment_same_line()
    if comment is None:
        return []
    match = re.match(r"^#\s*type:\s*([^#]*)", comment)
    if not match:
        return []
    annotation = tree.String(
        repr(str(match.group(1).strip())),
        node.start_pos)
    annotation.parent = node.parent
    return _evaluate_for_annotation(context, annotation, index)
Exemple #4
0
def get_faked(module, obj, name=None):
    obj = obj.__class__ if is_class_instance(obj) else obj
    result = _faked(module, obj, name)
    # TODO may this ever happen? result None? if so, document!
    if not isinstance(result, pt.Class) and result is not None:
        # Set the docstr which was previously not set (faked modules don't
        # contain it).
        doc = '"""%s"""' % obj.__doc__  # TODO need escapes.
        suite = result.children[-1]
        string = pt.String(pt.zero_position_modifier, doc, (0, 0), '')
        new_line = pt.Whitespace('\n', (0, 0), '')
        docstr_node = pt.Node('simple_stmt', [string, new_line])
        suite.children.insert(2, docstr_node)
        return result
Exemple #5
0
def get_faked(module, obj, name=None):
    obj = obj.__class__ if is_class_instance(obj) else obj
    result = _faked(module, obj, name)
    if result is None or isinstance(result, pt.Class):
        # We're not interested in classes. What we want is functions.
        return None
    else:
        # Set the docstr which was previously not set (faked modules don't
        # contain it).
        doc = '"""%s"""' % obj.__doc__  # TODO need escapes.
        suite = result.children[-1]
        string = pt.String(pt.zero_position_modifier, doc, (0, 0), '')
        new_line = pt.Whitespace('\n', (0, 0), '')
        docstr_node = pt.Node('simple_stmt', [string, new_line])
        suite.children.insert(2, docstr_node)
        return result
def _get_faked(module, obj, name=None):
    result, fake_module = _faked(module, obj, name)
    if result is None:
        # We're not interested in classes. What we want is functions.
        raise FakeDoesNotExist
    elif result.type == 'classdef':
        return result, fake_module
    else:
        # Set the docstr which was previously not set (faked modules don't
        # contain it).
        assert result.type == 'funcdef'
        doc = '"""%s"""' % obj.__doc__  # TODO need escapes.
        suite = result.children[-1]
        string = pt.String(doc, (0, 0), '')
        new_line = pt.Newline('\n', (0, 0))
        docstr_node = pt.Node('simple_stmt', [string, new_line])
        suite.children.insert(1, docstr_node)
        return result, fake_module
Exemple #7
0
 def convert_leaf(self, grammar, type, value, prefix, start_pos):
     # print('leaf', repr(value), token.tok_name[type])
     if type == tokenize.NAME:
         if value in grammar.keywords:
             return pt.Keyword(value, start_pos, prefix)
         else:
             name = pt.Name(value, start_pos, prefix)
             # Keep a listing of all used names
             arr = self._used_names.setdefault(name.value, [])
             arr.append(name)
             return name
     elif type == STRING:
         return pt.String(value, start_pos, prefix)
     elif type == NUMBER:
         return pt.Number(value, start_pos, prefix)
     elif type == NEWLINE:
         return pt.Newline(value, start_pos, prefix)
     elif type == ENDMARKER:
         return pt.EndMarker(value, start_pos, prefix)
     else:
         return pt.Operator(value, start_pos, prefix)
Exemple #8
0
def test_unicode_string():
    s = pt.String(None, u('bö'), (0, 0))
    assert repr(s)  # Should not raise an Error!