mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 04:52:59 +01:00
9f4f52ae4e
68400d8b96 tests: Use explicit imports (practicalswift) Pull request description: Enable automatic detection of undefined names in Python tests scripts. Remove wildcard imports. Wildcard imports make it unclear which names are present in the namespace, confusing both readers and many automated tools. An additional benefit of not using wildcard imports in tests scripts is that readers of a test script then can infer the rough testing scope just by looking at the imports. Before this commit: ``` $ contrib/devtools/lint-python.sh | head -10 ./test/functional/feature_rbf.py:8:1: F403 'from test_framework.util import *' used; unable to detect undefined names ./test/functional/feature_rbf.py:9:1: F403 'from test_framework.script import *' used; unable to detect undefined names ./test/functional/feature_rbf.py:10:1: F403 'from test_framework.mininode import *' used; unable to detect undefined names ./test/functional/feature_rbf.py:15:12: F405 bytes_to_hex_str may be undefined, or defined from star imports: test_framework.mininode, test_framework.script, test_framework.util ./test/functional/feature_rbf.py:17:58: F405 CScript may be undefined, or defined from star imports: test_framework.mininode, test_framework.script, test_framework.util ./test/functional/feature_rbf.py:25:13: F405 COIN may be undefined, or defined from star imports: test_framework.mininode, test_framework.script, test_framework.util ./test/functional/feature_rbf.py:26:31: F405 satoshi_round may be undefined, or defined from star imports: test_framework.mininode, test_framework.script, test_framework.util ./test/functional/feature_rbf.py:26:60: F405 COIN may be undefined, or defined from star imports: test_framework.mininode, test_framework.script, test_framework.util ./test/functional/feature_rbf.py:30:41: F405 satoshi_round may be undefined, or defined from star imports: test_framework.mininode, test_framework.script, test_framework.util ./test/functional/feature_rbf.py:30:68: F405 COIN may be undefined, or defined from star imports: test_framework.mininode, test_framework.script, test_framework.util $ ``` After this commit: ``` $ contrib/devtools/lint-python.sh | head -10 $ ``` Tree-SHA512: 3f826d39cffb6438388e5efcb20a9622ff8238247e882d68f7b38609877421b2a8e10e9229575f8eb6a8fa42dec4256986692e92922c86171f750a0e887438d9
91 lines
4.4 KiB
Bash
Executable File
91 lines
4.4 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2017 The Bitcoin Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
#
|
|
# Check for specified flake8 warnings in python files.
|
|
|
|
export LC_ALL=C
|
|
|
|
# E101 indentation contains mixed spaces and tabs
|
|
# E112 expected an indented block
|
|
# E113 unexpected indentation
|
|
# E115 expected an indented block (comment)
|
|
# E116 unexpected indentation (comment)
|
|
# E125 continuation line with same indent as next logical line
|
|
# E129 visually indented line with same indent as next logical line
|
|
# E131 continuation line unaligned for hanging indent
|
|
# E133 closing bracket is missing indentation
|
|
# E223 tab before operator
|
|
# E224 tab after operator
|
|
# E242 tab after ','
|
|
# 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
|
|
# E304 blank lines found after function decorator
|
|
# E306 expected 1 blank line before a nested definition
|
|
# E401 multiple imports on one line
|
|
# E402 module level import not at top of file
|
|
# F403 'from foo_module import *' used; unable to detect undefined names
|
|
# F405 foo_function may be undefined, or defined from star imports: bar_module
|
|
# 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
|
|
# E714 test for object identity should be "is not"
|
|
# E721 do not compare types, use "isinstance()"
|
|
# E741 do not use variables named "l", "O", or "I" # disabled
|
|
# E742 do not define classes named "l", "O", or "I"
|
|
# E743 do not define functions named "l", "O", or "I"
|
|
# E901 SyntaxError: invalid syntax
|
|
# E902 TokenError: EOF in multi-line string
|
|
# F401 module imported but unused
|
|
# F402 import module from line N shadowed by loop variable
|
|
# F404 future import(s) name after other statements
|
|
# F406 "from module import *" only allowed at module level
|
|
# F407 an undefined __future__ feature name was imported
|
|
# F601 dictionary key name repeated with different values
|
|
# F602 dictionary key variable name repeated with different values
|
|
# F621 too many expressions in an assignment with star-unpacking
|
|
# F622 two or more starred expressions in an assignment (a, *b, *c = d)
|
|
# F631 assertion test is a tuple, which are always True
|
|
# F701 a break statement outside of a while or for loop
|
|
# F702 a continue statement outside of a while or for loop
|
|
# F703 a continue statement in a finally block in a loop
|
|
# F704 a yield or yield from statement outside of a function
|
|
# F705 a return statement with arguments inside a generator
|
|
# F706 a return statement outside of a function/method
|
|
# F707 an except: block as not the last exception handler
|
|
# F811 redefinition of unused name from line N
|
|
# F812 list comprehension redefines 'foo' from line N
|
|
# F821 undefined name 'Foo'
|
|
# F822 undefined name name in __all__
|
|
# F823 local variable name … referenced before assignment
|
|
# F831 duplicate argument name in function definition
|
|
# F841 local variable 'foo' is assigned to but never used
|
|
# W191 indentation contains tabs
|
|
# W291 trailing whitespace
|
|
# W292 no newline at end of file
|
|
# W293 blank line contains whitespace
|
|
# W504 line break after binary operator # disabled
|
|
# 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" # disabled
|
|
# W606 'async' and 'await' are reserved keywords starting with Python 3.7
|
|
|
|
if ! command -v flake8 > /dev/null; then
|
|
echo "Skipping Python linting since flake8 is not installed. Install by running \"pip3 install flake8\""
|
|
exit 0
|
|
elif PYTHONWARNINGS="ignore" flake8 --version | grep -q "Python 2"; then
|
|
echo "Skipping Python linting since flake8 is running under Python 2. Install the Python 3 version of flake8 by running \"pip3 install flake8\""
|
|
exit 0
|
|
fi
|
|
|
|
PYTHONWARNINGS="ignore" git ls-files "*.py" | xargs flake8 --ignore=B,C,E,F,I,N,W --select=E101,E112,E113,E115,E116,E125,E129,E131,E133,E223,E224,E242,E266,E271,E272,E273,E274,E275,E304,E306,E401,E402,E502,E701,E702,E703,E714,E721,E742,E743,E901,E902,F401,F402,F403,F404,F405,F406,F407,F601,F602,F621,F622,F631,F701,F702,F703,F704,F705,F706,F707,F811,F812,F821,F822,F823,F831,F841,W191,W291,W292,W601,W602,W603,W604,W606 #,E741,W504,W605
|