예제 #1
0
def main():
	if len(sys.argv[1:]) is not 2:
		return

	ast1 = pythonparser.parse(sys.argv[1] + '\n')
	ast2 = pythonparser.parse(sys.argv[2] + '\n')
	print pythonparser.algorithm.compare(ast1, ast2)
def parse(flag, codeArray, indent_level):
    try:
        if flag == 1:
            # only one item
            p = pythonparser.parse(codeArray[0])
            v = Visitor()
            res = v.visit(p)
            print json.dumps(res, indent=indent_level)
        elif flag == 2:
            # multi-element
            res = [[] for x in range(len(codeArray))]
            for i, ary in enumerate(codeArray):
                res[i] = [[] for y in range(len(ary))]
                for j, code in enumerate(ary):
                    p = pythonparser.parse(code)
                    v = Visitor()
                    res[i][j] = v.visit(p)
            print json.dumps(res, indent=indent_level)

    except pythonparser.diagnostic.Error as e:
        error_obj = {'type': 'parse_error'}
        diag = e.diagnostic
        loc = diag.location

        error_obj['loc'] = {
                    'start': {'line': loc.begin().line(), 'column': loc.begin().column()},
                    'end':   {'line': loc.end().line(),   'column': loc.end().column()}
        }

        error_obj['message'] = diag.message()
        print json.dumps(error_obj, indent=indent_level)
        sys.exit(1)
예제 #3
0
def _parse_file(arg, cmd_options):
    if cmd_options['verbose']:
        print "Parsing file %(file)s..." % {'file': arg}

    if java_pattern.search(arg) != None:
        javaparser.parse(arg, cmd_options)
    elif xml_pattern.search(arg) != None:
        xmlparser.parse(arg, cmd_options)
    elif python_pattern.search(arg) != None:
        pythonparser.parse(arg, cmd_options)
    elif php_pattern.search(arg) != None:
        phpparser.parse(arg, cmd_options)
예제 #4
0
def _ParseAndVisit(source):
    mod = pythonparser.parse(source)
    future_features = stmt.visit_future(mod)
    b = block.ModuleBlock('__main__', '<test>', source, future_features)
    visitor = stmt.StatementVisitor(b)
    visitor.visit(mod)
    return visitor
예제 #5
0
    def testFutureFeatures(self):
        testcases = [
            ('from __future__ import print_function',
             imputil.FutureFeatures(print_function=True)),
            ("""\
        "module docstring"

        from __future__ import print_function
        """, imputil.FutureFeatures(print_function=True)),
            ("""\
        "module docstring"

        from __future__ import print_function, with_statement
        from __future__ import nested_scopes
        """, imputil.FutureFeatures(print_function=True)),
            ('from __future__ import absolute_import',
             imputil.FutureFeatures(absolute_import=True)),
            ('from __future__ import absolute_import, print_function',
             imputil.FutureFeatures(absolute_import=True,
                                    print_function=True)),
            ('foo = 123\nfrom __future__ import print_function',
             imputil.FutureFeatures()),
            ('import os\nfrom __future__ import print_function',
             imputil.FutureFeatures()),
        ]

        for tc in testcases:
            source, want = tc
            mod = pythonparser.parse(textwrap.dedent(source))
            _, got = imputil.parse_future_features(mod)
            self.assertEqual(want, got)
예제 #6
0
 def testRelativeModuleMemberMixed(self):
   imp1 = copy.deepcopy(self.fred_import)
   imp1.add_binding(imputil.Import.MEMBER, 'qux', 'qux')
   imp2 = copy.deepcopy(self.quux_import)
   imp2.add_binding(imputil.Import.MODULE, 'quux', 2)
   node = pythonparser.parse('from .fred import qux, quux').body[0]
   self._assert_imports_equal([imp1, imp2], self.bar_importer.visit(node))
예제 #7
0
 def testRelativeModuleFromSubModule(self):
   imp = copy.deepcopy(self.foo2_import)
   imp.add_binding(imputil.Import.MODULE, 'foo', 1)
   baz_script = os.path.join(self.pydir, 'bar', 'baz.py')
   importer = imputil.Importer(self.rootdir, 'bar.baz', baz_script, False)
   node = pythonparser.parse('from . import foo').body[0]
   self._assert_imports_equal([imp], importer.visit(node))
예제 #8
0
 def testImportPackageModuleAbsoluteImport(self):
   imp = copy.deepcopy(self.baz_import)
   imp.add_binding(imputil.Import.MODULE, 'baz', 0)
   bar_script = os.path.join(self.pydir, 'bar', '__init__.py')
   importer = imputil.Importer(self.rootdir, 'bar', bar_script, True)
   got = importer.visit(pythonparser.parse('import baz').body[0])
   self._assert_imports_equal([imp], got)
예제 #9
0
 def testImportPackageModuleRelativeFromSubModule(self):
   imp = copy.deepcopy(self.baz2_import)
   imp.add_binding(imputil.Import.MODULE, 'baz', 1)
   foo_script = os.path.join(self.pydir, 'bar', 'foo.py')
   importer = imputil.Importer(self.rootdir, 'bar.foo', foo_script, False)
   got = importer.visit(pythonparser.parse('import baz').body[0])
   self._assert_imports_equal([imp], got)
예제 #10
0
def _ParseAndVisit(source):
    mod = pythonparser.parse(source)
    _, future_features = imputil.parse_future_features(mod)
    importer = imputil.Importer(None, 'foo', 'foo.py', False)
    b = block.ModuleBlock(importer, '__main__', '<test>', source,
                          future_features)
    visitor = stmt.StatementVisitor(b)
    visitor.visit(mod)
    return visitor
예제 #11
0
def collect_imports(modname, script, gopath, package_dir=''):
    parser.patch_pythonparser()
    with open(script) as py_file:
        py_contents = py_file.read()
    mod = pythonparser.parse(py_contents)
    future_node, future_features = parse_future_features(mod)
    importer = Importer(gopath,
                        modname,
                        script,
                        future_features.absolute_import,
                        package_dir=package_dir)
    collector = _ImportCollector(importer, future_node)
    collector.visit(mod)
    return collector.imports
예제 #12
0
    def testImportFromFuture(self):
        testcases = [
            ('from __future__ import print_function',
             imputil.FutureFeatures(print_function=True)),
            ('from __future__ import generators', imputil.FutureFeatures()),
            ('from __future__ import generators, print_function',
             imputil.FutureFeatures(print_function=True)),
        ]

        for tc in testcases:
            source, want = tc
            mod = pythonparser.parse(textwrap.dedent(source))
            node = mod.body[0]
            got = imputil._make_future_features(node)  # pylint: disable=protected-access
            self.assertEqual(want.__dict__, got.__dict__)
예제 #13
0
파일: stmt_test.py 프로젝트: ip4368/grumpy
    def testImportFromFuture(self):
        testcases = [
            ('from __future__ import print_function',
             stmt.FUTURE_PRINT_FUNCTION),
            ('from __future__ import generators', 0),
            ('from __future__ import generators, print_function',
             stmt.FUTURE_PRINT_FUNCTION),
        ]

        for i, tc in enumerate(testcases):
            source, want_flags = tc
            mod = pythonparser.parse(textwrap.dedent(source))
            node = mod.body[0]
            got = stmt.import_from_future(node)
            msg = '#{}: want {}, got {}'.format(i, want_flags, got)
            self.assertEqual(want_flags, got, msg=msg)
예제 #14
0
  def testImportFromFutureParseError(self):
    testcases = [
        # NOTE: move this group to testImportFromFuture as they are implemented
        # by grumpy
        ('from __future__ import division',
         r'future feature \w+ not yet implemented'),
        ('from __future__ import braces', 'not a chance'),
        ('from __future__ import nonexistant_feature',
         r'future feature \w+ is not defined'),
    ]

    for tc in testcases:
      source, want_regexp = tc
      mod = pythonparser.parse(source)
      node = mod.body[0]
      self.assertRaisesRegexp(util.ParseError, want_regexp,
                              imputil._make_future_features, node)  # pylint: disable=protected-access
예제 #15
0
    def testVisitFutureLate(self):
        testcases = [
            # future after normal imports
            """\
        import os
        from __future__ import print_function
        """,
            # future after non-docstring expression
            """
        asd = 123
        from __future__ import print_function
        """
        ]

        for source in testcases:
            mod = pythonparser.parse(textwrap.dedent(source))
            self.assertRaises(util.LateFutureError, imputil.visit_future, mod)
예제 #16
0
 def parse_out(self,path, gen_grammar_rule=False):
     outputs=[]
     bug_cnt=0
     with open(path) as f:
         for line in f:
             src=line.strip()
             src=src.replace('''§''','\n')
             for key in bug_fix:
                 if key in src:
                     bug_cnt+=1
                     src=src.replace(key,bug_fix[key])
             try:
                 outputs.append(pythonparser.parse(src, gen_grammar_rule))
             except:
                 print(src)
                 print(line)
                 input()
     if gen_grammar_rule:
         self.grammar=pythonparser.grammar
     return outputs
예제 #17
0
파일: stmt_test.py 프로젝트: ip4368/grumpy
    def testImportFromFutureParseError(self):
        testcases = [
            # NOTE: move this group to testImportFromFuture as they are implemented
            # by grumpy
            ('from __future__ import absolute_import',
             r'future feature \w+ not yet implemented'),
            ('from __future__ import division',
             r'future feature \w+ not yet implemented'),
            ('from __future__ import unicode_literals',
             r'future feature \w+ not yet implemented'),
            ('from __future__ import braces', 'not a chance'),
            ('from __future__ import nonexistant_feature',
             r'future feature \w+ is not defined'),
        ]

        for tc in testcases:
            source, want_regexp = tc
            mod = pythonparser.parse(source)
            node = mod.body[0]
            self.assertRaisesRegexp(util.ParseError, want_regexp,
                                    stmt.import_from_future, node)
예제 #18
0
def _parse_and_visit(stream, script, modname):
    patch_pythonparser()
    gopath = os.environ['GOPATH']

    stream.seek(0)
    py_contents = stream.read()
    mod = pythonparser.parse(py_contents)

    # Do a pass for compiler directives from `from __future__ import *` statements
    future_node, future_features = imputil.parse_future_features(mod)

    importer = imputil.Importer(gopath, modname, script,
                                future_features.absolute_import)
    full_package_name = modname.replace('.', '/')
    mod_block = block.ModuleBlock(importer, full_package_name, script,
                                  py_contents, future_features)

    visitor = stmt.StatementVisitor(mod_block, future_node)
    # Indent so that the module body is aligned with the goto labels.
    with visitor.writer.indent_block():
        visitor.visit(mod)
    return visitor, mod_block
예제 #19
0
    def testVisitFuture(self):
        testcases = [
            ('from __future__ import print_function',
             imputil.FUTURE_PRINT_FUNCTION, 1),
            ("""\
        "module docstring"

        from __future__ import print_function
        """, imputil.FUTURE_PRINT_FUNCTION, 3),
            ("""\
        "module docstring"

        from __future__ import print_function, with_statement
        from __future__ import nested_scopes
        """, imputil.FUTURE_PRINT_FUNCTION, 4),
        ]

        for tc in testcases:
            source, flags, lineno = tc
            mod = pythonparser.parse(textwrap.dedent(source))
            future_features = imputil.visit_future(mod)
            self.assertEqual(future_features.parser_flags, flags)
            self.assertEqual(future_features.future_lineno, lineno)
예제 #20
0
def count_total_data(source_code):
    global func_count_map
    global func_node_map
    global list_map
    global dict_map
    global tuple_map
    global set_map
    global map_map

    source_code = source_code.strip()
    new_src_code = ""
    for a_src in source_code.split("\n"):
        if a_src.find('class ') > -1 and a_src.find("()") > -1:
            a_src = a_src.replace("()", "(self)")
        new_src_code = new_src_code + a_src + "\n"

    p = pythonparser.parse(new_src_code)
    count_object_type(p.body)

    total_array = [
        total_list_data(list_map),
        total_dict_data(dict_map),
        total_tuple_data(tuple_map),
        total_set_data(set_map),
        total_map_data(map_map)
    ]

    list_map = {}
    dict_map = {}
    tuple_map = {}
    set_map = {}
    map_map = {}
    func_count_map = {}
    func_node_map = {}

    return total_array
예제 #21
0
 def _visit_import(self, source, path=None):
     if not path:
         path = MockPath()
     visitor = imputil.ImportVisitor(path)
     visitor.visit(pythonparser.parse(source).body[0])
     return visitor.imports
예제 #22
0
def _ParseExpr(expr):
    return pythonparser.parse(expr).body[0].value
예제 #23
0
def main():
    if len(sys.argv[1:]) is not 1:
        return

    ast = pythonparser.parse(sys.argv[1] + '\n')
    print ast
예제 #24
0
 def testUndefinedFutureRaises(self):
     mod = pythonparser.parse('from __future__ import foo')
     self.assertRaisesRegexp(util.ParseError,
                             'future feature foo is not defined',
                             imputil.parse_future_features, mod)
예제 #25
0
 def testUnimplementedFutureRaises(self):
     mod = pythonparser.parse('from __future__ import division')
     msg = 'future feature division not yet implemented by grumpy'
     self.assertRaisesRegexp(util.ParseError, msg,
                             imputil.parse_future_features, mod)
예제 #26
0
    (options, args) = parser.parse_args()

    if options.pyfile:
        code = open(options.pyfile).read()
    else:
        code = args[0]
        # make sure it ends with a newline to get parse() to work:
        if code[-1] != '\n':
            code += '\n'

    indent_level = None
    if options.pp:
        indent_level = 2

    try:
        p = pythonparser.parse(code)

        v = Visitor()
        res = v.visit(p)
        print json.dumps(res, indent=indent_level)
    except pythonparser.diagnostic.Error as e:
        error_obj = {'type': 'parse_error'}
        diag = e.diagnostic
        loc = diag.location

        error_obj['loc'] = {
            'start': {
                'line': loc.begin().line(),
                'column': loc.begin().column()
            },
            'end': {
예제 #27
0
파일: block_test.py 프로젝트: runt18/grumpy
 def testGlobalUsedPriorToDeclaration(self):
     node = pythonparser.parse('foo = 42\nglobal foo')
     visitor = block.BlockVisitor()
     self.assertRaisesRegexp(util.ParseError,
                             'used prior to global declaration',
                             visitor.generic_visit, node)
예제 #28
0
 def testImportLateFuture(self):
     mod = pythonparser.parse(
         'import os\nfrom __future__ import print_function')
     visitor = imputil.ImportVisitor(MockPath())
     self.assertRaises(util.LateFutureError, visitor.visit, mod)
예제 #29
0
파일: block_test.py 프로젝트: runt18/grumpy
def _ParseStmt(stmt_str):
    return pythonparser.parse(stmt_str).body[0]
예제 #30
0
파일: fractions.py 프로젝트: cr1901/artiq
def init_module(module):
    func_def = parse(inspect.getsource(_gcd)).body[0]
    function, _ = module.compile_function(func_def,
                                          {"a": VInt(64), "b": VInt(64)})
    function.linkage = "internal"
예제 #31
0
 def testImportFromFuture(self):
     mod = pythonparser.parse('from __future__ import print_function')
     visitor = imputil.ImportVisitor(MockPath(), mod.body[0])
     visitor.visit(mod)
     self.assertEqual([], visitor.imports)