Example #1
0
def children_of_for_loop_are_checked():
    _assert_child_expression_is_checked(lambda generate:
        nodes.for_(
            nodes.attr(generate.unbound_ref(), "blah"),
            nodes.list_literal([]),
            [],
            []
        )
    )
    _assert_child_expression_is_checked(lambda generate:
        nodes.for_(
            generate.target(),
            generate.unbound_ref(),
            [],
            []
        ),
    )
    _assert_child_statement_is_checked(lambda generate:
        nodes.for_(
            generate.target(),
            nodes.list_literal([]),
            [generate.unbound_ref_statement()],
            []
        ),
    )
    _assert_child_statement_is_checked(lambda generate:
        nodes.for_(
            generate.target(),
            nodes.list_literal([]),
            [],
            [generate.unbound_ref_statement()],
        ),
    )
Example #2
0
def error_is_raised_if_all_is_redeclared():
    try:
        all_node = nodes.assign(["__all__"], nodes.list_literal([]))
        second_all_node = nodes.assign(["__all__"], nodes.list_literal([]))
        _exported_names(nodes.module([all_node, second_all_node]))
        assert False, "Expected error"
    except errors.AllAssignmentError as error:
        assert_equal(second_all_node, error.node)
        assert_equal("__all__ cannot be redeclared", str(error))
def for_loop_has_child_names_resolved():
    _assert_children_resolved(
        lambda ref: nodes.for_(ref, nodes.list_literal([]), [], []),
    )
    _assert_children_resolved(
        lambda ref: nodes.for_(nodes.ref("target"), ref, [], []),
        other_names=["target"]
    )
    _assert_children_resolved(
        lambda ref: nodes.for_(nodes.ref("target"), nodes.list_literal([]), [nodes.expression_statement(ref)], []),
        other_names=["target"]
    )
    _assert_children_resolved(
        lambda ref: nodes.for_(nodes.ref("target"), nodes.list_literal([]), [], [nodes.expression_statement(ref)]),
        other_names=["target"]
    )
Example #4
0
def list_comprehension_target_is_definitely_bound():
    node = nodes.list_comprehension(
        nodes.ref("x"),
        nodes.ref("x"),
        nodes.list_literal([]),
    )
    
    _updated_bindings(node)
Example #5
0
def error_is_raised_if_all_does_not_contain_only_string_literals():
    try:
        all_node = nodes.assign(["__all__"], nodes.list_literal([nodes.none()]))
        _exported_names(nodes.module([all_node]))
        assert False, "Expected error"
    except errors.AllAssignmentError as error:
        assert_equal(all_node, error.node)
        assert_equal("__all__ must be a list of string literals", str(error))
Example #6
0
def declarations_in_both_body_and_else_body_of_for_loop_are_not_definitely_bound():
    _assert_name_is_not_definitely_bound(lambda generate:
        nodes.for_(
            generate.target(),
            nodes.list_literal([]),
            [generate.assignment()],
            [generate.assignment()]
        ),
    )
Example #7
0
def when_target_has_explicit_type_that_type_is_used_as_type_hint():
    node = nodes.assign(
        [nodes.ref("x")],
        nodes.list_literal([nodes.str_literal("Hello")]),
        type=nodes.type_apply(nodes.ref("list"), [nodes.ref("object")])
    )
    context = update_context(node, type_bindings={
        "list": types.meta_type(types.list_type),
        "object": types.meta_type(types.object_type),
    })
    assert_equal(types.list_type(types.object_type), context.lookup_name("x"))
Example #8
0
def module_exports_are_specified_using_all():
    module_node = nodes.module([
        nodes.assign(["__all__"], nodes.list_literal([nodes.str_literal("x"), nodes.str_literal("z")])),
        nodes.assign(["x"], nodes.str_literal("one")),
        nodes.assign(["y"], nodes.str_literal("two")),
        nodes.assign(["z"], nodes.int_literal(3)),
    ])
    
    module, type_lookup = _check(LocalModule(None, module_node))
    assert_equal(types.str_type, module.attrs.type_of("x"))
    assert_equal(None, module.attrs.get("y"))
    assert_equal(types.int_type, module.attrs.type_of("z"))
Example #9
0
def children_of_list_comprehension_are_checked():
    _assert_child_expression_is_checked(lambda generate:
        nodes.list_comprehension(
            generate.unbound_ref(),
            generate.bound_ref("x", types.int_type),
            nodes.list_literal([]),
        )
    )
    _assert_child_expression_is_checked(lambda generate:
        nodes.list_comprehension(
            nodes.none(),
            nodes.attr(generate.unbound_ref(), "x"),
            nodes.list_literal([]),
        )
    )
    _assert_child_expression_is_checked(lambda generate:
        nodes.list_comprehension(
            nodes.none(),
            generate.bound_ref("x", types.int_type),
            generate.unbound_ref(),
        )
    )
def for_loop_target_is_declared():
    node = nodes.for_(nodes.ref("target"), nodes.list_literal([]), [], [])
    declarations = find_declarations(node)
    assert_equal("target", declarations.declaration("target").name)
    assert isinstance(declarations.declaration("target"), name_declaration.VariableDeclarationNode)
Example #11
0
def empty_list_can_be_typed_using_type_hint():
    assert_equal(
        types.list_type(types.int_type),
        infer(nodes.list_literal([]), hint=types.list_type(types.int_type))
    )
Example #12
0
def empty_list_type_hint_is_ignored_if_type_hint_is_not_list():
    assert_equal(
        types.list_type(types.bottom_type),
        infer(nodes.list_literal([]), hint=types.int_type)
    )
Example #13
0
def test_assignment_can_have_explicit_type():
    expected = nodes.assign(
        ["x"], nodes.list_literal([]),
        type=nodes.type_apply(nodes.ref("list"), [nodes.ref("str")])
    )
    _assert_statement_parse(expected, "#:: list[str]\nx = []")
Example #14
0
def test_parse_list_literal():
    _assert_expression_parse(nodes.list_literal([nodes.str_literal("hello"), nodes.int_literal(4)]), "['hello', 4]")
Example #15
0
def non_empty_list_can_be_typed_using_type_hint():
    assert_equal(
        types.list_type(types.object_type),
        infer(nodes.list_literal([nodes.int_literal(1)]), hint=types.list_type(types.object_type))
    )
Example #16
0
def list_type_hint_is_ignored_if_not_super_type_of_elements():
    assert_equal(
        types.list_type(types.int_type),
        infer(nodes.list_literal([nodes.int_literal(1)]), hint=types.list_type(types.none_type))
    )
Example #17
0
def for_loop_target_is_defined_but_not_definitely_bound():
    _assert_name_is_not_definitely_bound(lambda generate:
        nodes.for_(generate.target(), nodes.list_literal([]), [], [])
    )
Example #18
0
 def test_transform(self):
     _assert_transform(
         nodes.list_literal([nodes.none()]),
         cc.list_literal([cc.none])
     )
Example #19
0
def empty_list_has_elements_of_type_bottom():
    assert_equal(types.list_type(types.bottom_type), infer(nodes.list_literal([])))
Example #20
0
def list_expression_has_names_in_elements_resolved():
    _assert_children_resolved(
        lambda ref: nodes.list_literal([ref]),
    )
Example #21
0
 def list_containing_literal_is_literal(self):
     assert is_literal(nodes.list_literal([nodes.none()]))
Example #22
0
 def list_containing_reference_is_not_literal(self):
     assert not is_literal(nodes.list_literal([nodes.ref("x")]))
Example #23
0
 def empty_list_is_literal(self):
     assert is_literal(nodes.list_literal([]))
Example #24
0
def when_target_already_has_type_that_type_is_used_as_type_hint():
    node = nodes.assign([nodes.ref("x")], nodes.list_literal([nodes.str_literal("Hello")]))
    type_bindings = {"x": types.list_type(types.object_type)}
    context = update_context(node, type_bindings=type_bindings)
    assert_equal(types.list_type(types.object_type), context.lookup_name("x"))
Example #25
0
def formal_type_of_argument_is_used_as_type_hint_for_actual_argument():
    type_bindings = {"f": types.func([types.list_type(types.str_type)], types.int_type)}
    node = nodes.call(nodes.ref("f"), [nodes.list_literal([])])
    assert_equal(types.int_type, infer(node, type_bindings=type_bindings))
Example #26
0
def can_infer_type_of_list_of_ints():
    assert_equal(types.list_type(types.int_type), infer(nodes.list_literal([nodes.int_literal(1), nodes.int_literal(42)])))