mirror of
https://github.com/Instagram/LibCST.git
synced 2025-12-23 10:35:53 +00:00
This massive PR implements an alternative Python parser that will allow LibCST to parse Python 3.10's new grammar features. The parser is implemented in Rust, but it's turned off by default through the `LIBCST_PARSER_TYPE` environment variable. Set it to `native` to enable. The PR also enables new CI steps that test just the Rust parser, as well as steps that produce binary wheels for a variety of CPython versions and platforms. Note: this PR aims to be roughly feature-equivalent to the main branch, so it doesn't include new 3.10 syntax features. That will be addressed as a follow-up PR. The new parser is implemented in the `native/` directory, and is organized into two rust crates: `libcst_derive` contains some macros to facilitate various features of CST nodes, and `libcst` contains the `parser` itself (including the Python grammar), a `tokenizer` implementation by @bgw, and a very basic representation of CST `nodes`. Parsing is done by 1. **tokenizing** the input utf-8 string (bytes are not supported at the Rust layer, they are converted to utf-8 strings by the python wrapper) 2. running the **PEG parser** on the tokenized input, which also captures certain anchor tokens in the resulting syntax tree 3. using the anchor tokens to **inflate** the syntax tree into a proper CST Co-authored-by: Benjamin Woodruff <github@benjam.info>
112 lines
5.2 KiB
INI
112 lines
5.2 KiB
INI
[flake8]
|
||
|
||
ignore =
|
||
C407, # unnecessary list comprehension; A generator only better than a list
|
||
# comprehension if we don't always need to iterate through all items in
|
||
# the generator (based on the use case).
|
||
|
||
# The following codes belong to pycodestyle, and overlap with black:
|
||
E101, # indentation contains mixed spaces and tabs
|
||
E111, # indentation is not a multiple of four
|
||
E112, # expected an indented block
|
||
E113, # unexpected indentation
|
||
E114, # indentation is not a multiple of four (comment)
|
||
E115, # expected an indented block (comment)
|
||
E116, # unexpected indentation (comment)
|
||
E121, # continuation line under-indented for hanging indent
|
||
E122, # continuation line missing indentation or outdented
|
||
E123, # closing bracket does not match indentation of opening bracket’s line
|
||
E124, # closing bracket does not match visual indentation
|
||
E125, # continuation line with same indent as next logical line
|
||
E126, # continuation line over-indented for hanging indent
|
||
E127, # continuation line over-indented for visual indent; is harmless
|
||
# (over-indent is visually unambiguous) and currently generates too
|
||
# many warnings for existing code.
|
||
E128, # continuation line under-indented for visual indent
|
||
E129, # visually indented line with same indent as next logical line
|
||
E131, # continuation line unaligned for hanging indent
|
||
E133, # closing bracket is missing indentation
|
||
E201, # whitespace after ‘(‘
|
||
E202, # whitespace before ‘)’
|
||
E203, # whitespace before ‘:’; this warning is invalid for slices
|
||
E211, # whitespace before ‘(‘
|
||
E221, # multiple spaces before operator
|
||
E222, # multiple spaces after operator
|
||
E223, # tab before operator
|
||
E224, # tab after operator
|
||
E225, # missing whitespace around operator
|
||
E226, # missing whitespace around arithmetic operator
|
||
E227, # missing whitespace around bitwise or shift operator
|
||
E228, # missing whitespace around modulo operator
|
||
E231, # missing whitespace after ‘,’, ‘;’, or ‘:’
|
||
E241, # multiple spaces after ‘,’
|
||
E242, # tab after ‘,’
|
||
E251, # unexpected spaces around keyword / parameter equals
|
||
E261, # at least two spaces before inline comment
|
||
E262, # inline comment should start with ‘# ‘
|
||
E265, # block comment should start with ‘# ‘
|
||
E266, # too many leading ‘#’ for block comment
|
||
E271, # multiple spaces after keyword
|
||
E272, # multiple spaces before keyword
|
||
E273, # tab after keyword
|
||
E274, # tab before keyword
|
||
E275, # missing whitespace after keyword
|
||
E301, # expected 1 blank line, found 0
|
||
E302, # expected 2 blank lines, found 0
|
||
E303, # too many blank lines (3)
|
||
E304, # blank lines found after function decorator
|
||
E305, # expected 2 blank lines after end of function or class
|
||
E306, # expected 1 blank line before a nested definition
|
||
E401, # multiple imports on one line
|
||
E501, # line too long (> 79 characters)
|
||
E502, # the backslash is redundant between brackets
|
||
E701, # multiple statements on one line (colon)
|
||
E702, # multiple statements on one line (semicolon)
|
||
E703, # statement ends with a semicolon
|
||
E704, # multiple statements on one line (def)
|
||
# These are pycodestyle lints that black doesn't catch:
|
||
# E711, # comparison to None should be ‘if cond is None:’
|
||
# E712, # comparison to True should be ‘if cond is True:’ or ‘if cond:’
|
||
# E713, # test for membership should be ‘not in’
|
||
# E714, # test for object identity should be ‘is not’
|
||
# E721, # do not compare types, use ‘isinstance()’
|
||
# E722, # do not use bare except, specify exception instead
|
||
# E731, # do not assign a lambda expression, use a def
|
||
# E741, # do not use variables named ‘l’, ‘O’, or ‘I’
|
||
# E742, # do not define classes named ‘l’, ‘O’, or ‘I’
|
||
# E743, # do not define functions named ‘l’, ‘O’, or ‘I’
|
||
# I think these are internal to pycodestyle?
|
||
# E901, # SyntaxError or IndentationError
|
||
# E902, # IOError
|
||
F811, # isn't aware of type-only imports, results in false-positives
|
||
W191, # indentation contains tabs
|
||
W291, # trailing whitespace
|
||
W292, # no newline at end of file
|
||
W293, # blank line contains whitespace
|
||
W391, # blank line at end of file
|
||
W503, # line break before binary operator; binary operator in a new line is
|
||
# the standard
|
||
W504, # line break after binary operator
|
||
W505, # not part of PEP8; doc line too long (> 79 characters)
|
||
# These are pycodestyle lints that black doesn't catch:
|
||
# W601, # .has_key() is deprecated, use ‘in’
|
||
# W602, # deprecated form of raising exception
|
||
# W603, # ‘<>’ is deprecated, use ‘!=’
|
||
# W604, # backticks are deprecated, use ‘repr()’
|
||
# W605, # invalid escape sequence ‘x’
|
||
# W606, # ‘async’ and ‘await’ are reserved keywords starting with Python 3.7
|
||
|
||
# We should've silenced all of Flake8's line-length related lints, in favor of
|
||
# Black. However, let's just set this to a large value just to be safe, in case
|
||
# we accidentally left in a line-length related lint rule. If we don't set
|
||
# anything, it defaults to 79, which is also wrong.
|
||
max-line-length = 999
|
||
|
||
exclude =
|
||
.pyre,
|
||
__pycache__,
|
||
.tox,
|
||
native,
|
||
|
||
max-complexity = 12
|
||
|