Package: parso
Parso is a Python parser that supports error recovery and round-trip parsing
for different Python versions (in multiple Python versions). Parso is also able
to list multiple syntax errors in your python file.Parso has been battle-tested byjedi. It was pulled out of jedi to be useful
for other projects as well.Parso consists of a small API to parse Python and analyse the syntax tree.A simple example:>>>importparso>>>module=parso.parse('hello + 1',version="3.9")>>>expr=module.children[0]>>>exprPythonNode(arith_expr,[<Name:hello@1,0>,<Operator:+>,<Number:1>])>>>print(expr.get_code())hello+1>>>name=expr.children[0]>>>name<Name:hello@1,0>>>>name.end_pos(1,5)>>>expr.end_pos(1,9)To list multiple issues:>>>grammar=parso.load_grammar()>>>module=grammar.parse('foo +\nbar\ncontinue')>>>error1,error2=grammar.iter_errors(module)>>>error1.message'SyntaxError: invalid syntax'>>>error2.message"SyntaxError: 'continue' not properly in loop"ResourcesTestingPyPIDocsUsessemantic versioningInstallationpip install parsoFutureThere will be better support for refactoring and comments. Stay tuned.There’s a WIP PEP8 validator. It’s however not in a good shape, yet.Known Issuesasync/awaitare already used as keywords in Python3.6.from __future__ import print_functionis not ignored.AcknowledgementsGuido van Rossum (@gvanrossum) for creating the parser generator pgen2
(originally used in lib2to3).Salome Schneiderfor the extremely awesome parso logo.ChangelogUnreleased0.8.3 (2021-11-30)Add basic support for Python 3.11 and 3.120.8.2 (2021-03-30)Various small bugfixes0.8.1 (2020-12-10)Various small bugfixes0.8.0 (2020-08-05)Dropped Support for Python 2.7, 3.4, 3.5It’s possible to usepathlib.Pathobjects now in the APIThe stubs are gone, we are now using annotationsnamedexpr_testnodes are now a proper class calledNamedExprA lot of smaller refactorings0.7.1 (2020-07-24)Fixed a couple of smaller bugs (mostly syntax error detection inGrammar.iter_errors)This is going to be the last release that supports Python 2.7, 3.4 and 3.5.0.7.0 (2020-04-13)Fix a lot of annoying bugs in the diff parser. The fuzzer did not find
issues anymore even after running it for more than 24 hours (500k tests).Small grammar change: suites can now contain newlines even after a newline.
This should really not matter if you don’t use error recovery. It allows for
nicer error recovery.0.6.2 (2020-02-27)BugfixesAdd Grammar.refactor (might still be subject to change until 0.7.0)0.6.1 (2020-02-03)Addparso.normalizer.Issue.end_posto make it possible to know where an
issue ends0.6.0 (2020-01-26)Dropped Python 2.6/Python 3.3 supportdel_stmt names are now considered as a definition
(forname.is_definition())Bugfixes0.5.2 (2019-12-15)Add include_setitem to get_definition/is_definition and get_defined_names (#66)Fix named expression error listing (#89, #90)Fix some f-string tokenizer issues (#93)0.5.1 (2019-07-13)Fix: Some unicode identifiers were not correctly tokenizedFix: Line continuations in f-strings are now working0.5.0 (2019-06-20)Breaking Changecomp_for is now called sync_comp_for for all Python
versions to be compatible with the Python 3.8 GrammarAdded .pyi stubs for a lot of the parso APISmall FileIO changes0.4.0 (2019-04-05)Python 3.8 supportFileIO support, it’s now possible to use abstract file IO, support is alpha0.3.4 (2019-02-13)Fix an f-string tokenizer error0.3.3 (2019-02-06)Fix async errors in the diff parserA fix in iter_errorsThis is a very small bugfix release0.3.2 (2019-01-24)20+ bugfixes in the diff parser and 3 in the tokenizerA fuzzer for the diff parser, to give confidence that the diff parser is in a
good shape.Some bugfixes for f-string0.3.1 (2018-07-09)Bugfixes in the diff parser and keyword-only arguments0.3.0 (2018-06-30)Rewrote the pgen2 parser generator.0.2.1 (2018-05-21)A bugfix for the diff parser.Grammar files can now be loaded from a specific path.0.2.0 (2018-04-15)f-strings are now parsed as a part of the normal Python grammar. This makes
it way easier to deal with them.0.1.1 (2017-11-05)Fixed a few bugs in the caching layerAdded support for Python 3.70.1.0 (2017-09-04)Pulling the library out of Jedi. Some APIs will definitely change.