diff --git a/scripts/diff_parser_profile.py b/scripts/diff_parser_profile.py new file mode 100755 index 00000000..ec37e53b --- /dev/null +++ b/scripts/diff_parser_profile.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +""" +Profile a piece of Python code with ``cProfile`` that uses the diff parser. + +Usage: + profile.py [-d] [-s ] + profile.py -h | --help + +Options: + -h --help Show this screen. + -d --debug Enable Jedi internal debugging. + -s Sort the profile results, e.g. cum, name [default: time]. +""" + +import cProfile + +from docopt import docopt +from jedi.parser import load_grammar +from jedi.parser.diff import DiffParser +from jedi.parser import ParserWithRecovery +from jedi._compatibility import u +from jedi.common import splitlines +import jedi + + +def run(parser, lines): + diff_parser = DiffParser(parser) + diff_parser.update(lines) + + +def main(args): + jedi.set_debug_function(notices=args['--debug']) + with open(args['']) as f: + code = f.read() + grammar = load_grammar() + parser = ParserWithRecovery(grammar, u(code)) + + code = code + '\na\n' # Add something so the diff parser needs to run. + lines = splitlines(code, keepends=True) + cProfile.runctx('run(parser, lines)', globals(), locals(), sort=args['-s']) + +if __name__ == '__main__': + args = docopt(__doc__) + main(args)