LibCST/.flake8
Zsolt Dollenstein c02de9b718
Implement a Python PEG parser in Rust (#566)
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>
2021-12-21 18:14:39 +00:00

112 lines
5.2 KiB
INI
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[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 brackets 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