Re: [PATCH 1/1] Travis-CI: run flake8 on Python code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Aug 16, 2018 at 10:26 PM William Roberts
<bill.c.roberts@xxxxxxxxx> wrote:
>
> I have no problems with this, seems like a reasonable plan going forward.

Thanks. I applied this patch, so now all of our Python code gets
checked for syntax errors every time the project is updated :)

Nicolas

> On Wed, Aug 15, 2018 at 2:08 PM, Nicolas Iooss <nicolas.iooss@xxxxxxx> wrote:
>>
>> flake8 is a Python linter which is able to detect issues in Python code
>> (syntax errors, undefined variables, etc.). It has been used to find
>> bugs in the project. In order to prevent the introduction of new bugs
>> which can be detected by it, add a script which runs it and use it in
>> Travis-CI.
>>
>> flake8 can be used to detect code which is not written according to PEP8
>> style guide (which forbids whitespaces in some places, enforces the use
>> of space-indenting, specifies how many blank lines are used between
>> functions, etc.). As SELinux code does not follow this style guide,
>> scripts/run-flake8 disables many warnings related to this when running
>> the linter.
>>
>> In order to silence flake8 warnings, the Python code can also be
>> modified. However fixing every "do not use bare 'except'" in the project
>> needs to be done carefully and takes much time.
>> This is why the warnings which are disabled have been ordered in three
>> lists:
>> * The warnings which can be activated in a not-so-distant future after
>>   the code has been modified.
>> * The warnings related to PEP8 which cannot be activated without a major
>>   cleaning work of the codebase (for example to modify white spaces)
>> * The warnings which are introduced by code generated by SWIG 3.0.12,
>>   which would require patches in SWIG in order to be activated (there
>>   is right now only one such warning).
>>
>> Signed-off-by: Nicolas Iooss <nicolas.iooss@xxxxxxx>
>> ---
>>  .travis.yml        |  6 ++++
>>  scripts/run-flake8 | 79 ++++++++++++++++++++++++++++++++++++++++++++++
>>  2 files changed, 85 insertions(+)
>>  create mode 100755 scripts/run-flake8
>>
>> diff --git a/.travis.yml b/.travis.yml
>> index 0612eb5480e5..09dd4749975e 100644
>> --- a/.travis.yml
>> +++ b/.travis.yml
>> @@ -83,6 +83,9 @@ install:
>>          rm python.tar.bz2 ;
>>      fi
>>
>> +  # Install flake8 for the given python version
>> +  - $VIRTUAL_ENV/bin/pip install flake8
>> +
>>  before_script:
>>    # clang on Travis-CI 14.04 environment is too old to support -Wdouble-promotion
>>    - if "$CC" --version |grep -q clang; then sed 's/ -Wdouble-promotion / /' -i libselinux/src/Makefile libselinux/utils/Makefile ; fi
>> @@ -141,6 +144,9 @@ script:
>>    - $PYTHON -c 'import selinux;import selinux.audit2why;import semanage;print(selinux.is_selinux_enabled())'
>>    - $RUBY -e 'require "selinux";require "semanage";puts Selinux::is_selinux_enabled()'
>>
>> +  # Run Python linter
>> +  - PATH="$VIRTUAL_ENV/bin:$PATH" ./scripts/run-flake8
>> +
>>    # Remove every installed files
>>    - rm -rf "$DESTDIR"
>>
>> diff --git a/scripts/run-flake8 b/scripts/run-flake8
>> new file mode 100755
>> index 000000000000..8a1f490b8a62
>> --- /dev/null
>> +++ b/scripts/run-flake8
>> @@ -0,0 +1,79 @@
>> +#!/bin/sh
>> +# Run flake8 (Python linter) on the source directory or on the given files/directories
>> +
>> +# Run on the base directory if no argument has been given
>> +if [ $# -eq 0 ] ; then
>> +    cd "$(dirname -- "$0")/.." || exit $?
>> +fi
>> +
>> +# Assign each ignore warning on a line, in order to ease testing enabling the warning again
>> +IGNORE_LIST=''
>> +
>> +# Important warnings that should be fixed
>> +# (Comment one line and run this script in order to see where the warning occurs)
>> +IGNORE_LIST="$IGNORE_LIST,W191" # indentation contains tabs
>> +
>> +IGNORE_LIST="$IGNORE_LIST,E101" # indentation contains mixed spaces and tabs
>> +IGNORE_LIST="$IGNORE_LIST,E703" # statement ends with a semicolon
>> +IGNORE_LIST="$IGNORE_LIST,E711" # comparison to None should be 'if cond is not None:'
>> +IGNORE_LIST="$IGNORE_LIST,E712" # comparison to False should be 'if cond is False:' or 'if not cond:'
>> +IGNORE_LIST="$IGNORE_LIST,E722" # do not use bare 'except'
>> +IGNORE_LIST="$IGNORE_LIST,E999" # TabError: inconsistent use of tabs and spaces in indentation
>> +
>> +IGNORE_LIST="$IGNORE_LIST,F401" # module imported but unused
>> +IGNORE_LIST="$IGNORE_LIST,F812" # list comprehension redefines 'f', in lex.py and yacc.py
>> +IGNORE_LIST="$IGNORE_LIST,F841" # local variable '...' is assigned to but never used
>> +
>> +
>> +# Less-important warnings
>> +IGNORE_LIST="$IGNORE_LIST,W291" # trailing whitespace
>> +IGNORE_LIST="$IGNORE_LIST,W293" # blank line contains whitespace
>> +IGNORE_LIST="$IGNORE_LIST,W391" # blank line at end of file
>> +IGNORE_LIST="$IGNORE_LIST,W503" # line break before binary operator
>> +IGNORE_LIST="$IGNORE_LIST,W504" # line break after binary operator
>> +
>> +IGNORE_LIST="$IGNORE_LIST,E111" # indentation is not a multiple of four
>> +IGNORE_LIST="$IGNORE_LIST,E114" # indentation is not a multiple of four (comment)
>> +IGNORE_LIST="$IGNORE_LIST,E115" # expected an indented block (comment)
>> +IGNORE_LIST="$IGNORE_LIST,E116" # unexpected indentation (comment)
>> +IGNORE_LIST="$IGNORE_LIST,E122" # continuation line missing indentation or outdented
>> +IGNORE_LIST="$IGNORE_LIST,E123" # closing bracket does not match indentation of opening bracket's line
>> +IGNORE_LIST="$IGNORE_LIST,E126" # continuation line over-indented for hanging indent
>> +IGNORE_LIST="$IGNORE_LIST,E127" # continuation line over-indented for visual indent
>> +IGNORE_LIST="$IGNORE_LIST,E128" # continuation line under-indented for visual indent
>> +IGNORE_LIST="$IGNORE_LIST,E201" # whitespace after '['
>> +IGNORE_LIST="$IGNORE_LIST,E202" # whitespace before '}'
>> +IGNORE_LIST="$IGNORE_LIST,E203" # whitespace before ':'
>> +IGNORE_LIST="$IGNORE_LIST,E211" # whitespace before '('
>> +IGNORE_LIST="$IGNORE_LIST,E221" # multiple spaces before operator
>> +IGNORE_LIST="$IGNORE_LIST,E222" # multiple spaces after operator
>> +IGNORE_LIST="$IGNORE_LIST,E225" # missing whitespace around operator
>> +IGNORE_LIST="$IGNORE_LIST,E226" # missing whitespace around arithmetic operator
>> +IGNORE_LIST="$IGNORE_LIST,E231" # missing whitespace after ','
>> +IGNORE_LIST="$IGNORE_LIST,E241" # multiple spaces after ':'
>> +IGNORE_LIST="$IGNORE_LIST,E251" # unexpected spaces around keyword / parameter equals
>> +IGNORE_LIST="$IGNORE_LIST,E261" # at least two spaces before inline comment
>> +IGNORE_LIST="$IGNORE_LIST,E265" # block comment should start with '# '
>> +IGNORE_LIST="$IGNORE_LIST,E266" # too many leading '#' for block comment
>> +IGNORE_LIST="$IGNORE_LIST,E272" # multiple spaces before keyword
>> +IGNORE_LIST="$IGNORE_LIST,E301" # expected 1 blank line, found 0
>> +IGNORE_LIST="$IGNORE_LIST,E302" # expected 2 blank lines, found 1
>> +IGNORE_LIST="$IGNORE_LIST,E303" # too many blank lines
>> +IGNORE_LIST="$IGNORE_LIST,E305" # expected 2 blank lines after class or function definition, found 0
>> +IGNORE_LIST="$IGNORE_LIST,E306" # expected 1 blank line before a nested definition, found 0
>> +IGNORE_LIST="$IGNORE_LIST,E401" # multiple imports on one line
>> +IGNORE_LIST="$IGNORE_LIST,E402" # module level import not at top of file
>> +IGNORE_LIST="$IGNORE_LIST,E501" # line too long
>> +IGNORE_LIST="$IGNORE_LIST,E701" # multiple statements on one line (colon)
>> +IGNORE_LIST="$IGNORE_LIST,E704" # multiple statements on one line (def)
>> +IGNORE_LIST="$IGNORE_LIST,E731" # do not assign a lambda expression, use a def
>> +IGNORE_LIST="$IGNORE_LIST,E741" # ambiguous variable name 'l' / 'I'
>> +
>> +IGNORE_LIST="$IGNORE_LIST,F403" # 'from ... import *' used; unable to detect undefined names
>> +IGNORE_LIST="$IGNORE_LIST,F405" # '...' may be undefined, or defined from star imports
>> +
>> +# Ignore errors from files generated from SWIG
>> +IGNORE_LIST="$IGNORE_LIST,F811" # redefinition of unused ...
>> +
>> +
>> +exec flake8 --max-line-length=120 --builtins='_,unicode,lextab,parsetab' --ignore=",$IGNORE_LIST" "$@"
>> --
>> 2.18.0
>>
>> _______________________________________________
>> Selinux mailing list
>> Selinux@xxxxxxxxxxxxx
>> To unsubscribe, send email to Selinux-leave@xxxxxxxxxxxxx.
>> To get help, send an email containing "help" to Selinux-request@xxxxxxxxxxxxx.
>
>

_______________________________________________
Selinux mailing list
Selinux@xxxxxxxxxxxxx
To unsubscribe, send email to Selinux-leave@xxxxxxxxxxxxx.
To get help, send an email containing "help" to Selinux-request@xxxxxxxxxxxxx.



[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux