Skip to main content

A Python Parser

Project description

Travis CI build status Coverage Status PyPI Downloads https://raw.githubusercontent.com/davidhalter/parso/master/docs/_static/logo_characters.png

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 by jedi. 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:

>>> import parso
>>> module = parso.parse('hello + 1', version="3.9")
>>> expr = module.children[0]
>>> expr
PythonNode(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"

Resources

Installation

pip install parso

Future

  • There 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 Issues

  • async/await are already used as keywords in Python3.6.

  • from __future__ import print_function is not ignored.

Acknowledgements

  • Guido van Rossum (@gvanrossum) for creating the parser generator pgen2 (originally used in lib2to3).

  • Salome Schneider for the extremely awesome parso logo.

Changelog

Unreleased

0.8.2 (2021-03-30)

  • Various small bugfixes

0.8.1 (2020-12-10)

  • Various small bugfixes

0.8.0 (2020-08-05)

  • Dropped Support for Python 2.7, 3.4, 3.5

  • It’s possible to use pathlib.Path objects now in the API

  • The stubs are gone, we are now using annotations

  • namedexpr_test nodes are now a proper class called NamedExpr

  • A lot of smaller refactorings

0.7.1 (2020-07-24)

  • Fixed a couple of smaller bugs (mostly syntax error detection in Grammar.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)

  • Bugfixes

  • Add Grammar.refactor (might still be subject to change until 0.7.0)

0.6.1 (2020-02-03)

  • Add parso.normalizer.Issue.end_pos to make it possible to know where an issue ends

0.6.0 (2020-01-26)

  • Dropped Python 2.6/Python 3.3 support

  • del_stmt names are now considered as a definition (for name.is_definition())

  • Bugfixes

0.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 tokenized

  • Fix: Line continuations in f-strings are now working

0.5.0 (2019-06-20)

  • Breaking Change comp_for is now called sync_comp_for for all Python versions to be compatible with the Python 3.8 Grammar

  • Added .pyi stubs for a lot of the parso API

  • Small FileIO changes

0.4.0 (2019-04-05)

  • Python 3.8 support

  • FileIO support, it’s now possible to use abstract file IO, support is alpha

0.3.4 (2019-02-13)

  • Fix an f-string tokenizer error

0.3.3 (2019-02-06)

  • Fix async errors in the diff parser

  • A fix in iter_errors

  • This is a very small bugfix release

0.3.2 (2019-01-24)

  • 20+ bugfixes in the diff parser and 3 in the tokenizer

  • A fuzzer for the diff parser, to give confidence that the diff parser is in a good shape.

  • Some bugfixes for f-string

0.3.1 (2018-07-09)

  • Bugfixes in the diff parser and keyword-only arguments

0.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 layer

  • Added support for Python 3.7

0.1.0 (2017-09-04)

  • Pulling the library out of Jedi. Some APIs will definitely change.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

parso-0.8.2.tar.gz (397.0 kB view details)

Uploaded Source

Built Distribution

parso-0.8.2-py2.py3-none-any.whl (94.0 kB view details)

Uploaded Python 2Python 3

File details

Details for the file parso-0.8.2.tar.gz.

File metadata

  • Download URL: parso-0.8.2.tar.gz
  • Upload date:
  • Size: 397.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.5

File hashes

Hashes for parso-0.8.2.tar.gz
Algorithm Hash digest
SHA256 12b83492c6239ce32ff5eed6d3639d6a536170723c6f3f1506869f1ace413398
MD5 dd8fed40ceb890d3e277ad44a678c1f1
BLAKE2b-256 5e61d119e2683138a934550e47fc8ec023eb7f11b194883e9085dca3af5d4951

See more details on using hashes here.

File details

Details for the file parso-0.8.2-py2.py3-none-any.whl.

File metadata

  • Download URL: parso-0.8.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 94.0 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.5

File hashes

Hashes for parso-0.8.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 a8c4922db71e4fdb90e0d0bc6e50f9b273d3397925e5e60a717e719201778d22
MD5 7e2f33fd811bca395be9e353b55463ed
BLAKE2b-256 a9c4d5476373088c120ffed82f34c74b266ccae31a68d665b837354d4d8dc8be

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page