def test_unknown(self): # pytype represents unannotated function parameters as unknowns. Make sure # unknowns don't appear in the traced types. src = traces.trace("def f(x): return x") trace, = (x for x in src.traces[1] if x.op == "LOAD_FAST") pyval, = trace.types self.assertIsInstance(pyval, pytd.AnythingType)
def test_traces(self): src = traces.trace("") trace, = src.traces[1] self.assertEqual(trace.op, "LOAD_CONST") self.assertEqual(trace.symbol, None) pyval, = trace.types self.assertEqual(pyval.name, "__builtin__.NoneType") self.assertEqual(pyval.cls.name, "__builtin__.NoneType")
def test_py3_class(self): src = traces.trace(textwrap.dedent(""" class Foo(object): pass """).lstrip()) trace, = (x for x in src.traces[1] if x.op == "LOAD_BUILD_CLASS") pyval, = trace.types self.assertEqual(pyval.name, "typing.Callable")
def test_py3_class(self): src = traces.trace(textwrap.dedent("""\ class Foo(object): pass """), config.Options.create(python_version=(3, 6))) trace, = (x for x in src.traces[1] if x.op == "LOAD_BUILD_CLASS") pyval, = trace.types self.assertEqual(pyval.name, "typing.Callable")
def test_external_type(self): with file_utils.Tempdir() as d: pyi_path = d.create_file("foo.pyi", "class Foo(object): ...") imports_info = d.create_file("imports_info", "foo %s" % pyi_path) src = traces.trace("import foo\nx = foo.Foo()", config.Options.create(imports_map=imports_info)) trace, = (x for x in src.traces[2] if x.op == "STORE_NAME") pyval, = trace.types self.assertEqual(pyval.name, "foo.Foo") self.assertEqual(pyval.cls.name, "foo.Foo")
def infer_types(source, options): """Infer types for the provided source. Args: source: Text, the source code to analyze. options: pytype.config.Options, the options to pass onto Pytype. Returns: source.Code object with information gathered by Pytype. """ with io.wrap_pytype_exceptions(PytypeError, filename=options.input): return traces.trace(source, options)
def _parse(self, text, options=None): text = textwrap.dedent(text) return ast.parse(text), traces.trace(text, options)
def test_options(self): src = traces.trace("", config.Options.create("rumpelstiltskin")) self.assertEqual(src.filename, "rumpelstiltskin")
def main(): args = parse(sys.argv[1:]) src = args.input.read() name = args.input.name options = config.Options.create(name, python_version=args.python_version) traces.trace(src, options).display_traces()
def _parse(self, text): text = textwrap.dedent(text) return ast.parse(text), traces.trace(text)