summaryrefslogtreecommitdiffstats
path: root/tests/pylint/runpylint.sh
blob: afd95fcdb1c24a911d90c9be0d53f750e44aae5a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/bin/bash

# This script will check anaconda for any pylint warning and errors using a set
# of options minimizing false positives, in combination with filtering of any
# warning regularexpressions listed in pylint-false-positives.
# 
# If any warnings our found they will be stored in pylint-log and printed
# to stdout and this script will exit with a status of 1, if no (non filtered)
# warnings are found it exits with a status of 0

FALSE_POSITIVES=tests/pylint/pylint-false-positives

# W0107 - Unnecessary pass statement
# W0108 - Lambda may not be necessary
# W0212 - Access to a protected member %s of a client class
# W0311 - Bad indentation. Found %s %s, expected %s
# W0312 - Found indentation with %ss instead of %ss
# W0402 - Uses of a deprecated module %r
# W0611 - Unused import %s
# W0612 - Unused variable %r
# W0710 - Exception doesn't inherit from standard "Exception" class
NON_STRICT_OPTIONS="--disable=W0107,W0108,W0212,W0311,W0312,W0402,W0611,W0612,W0710"

# E1103 - %s %r has no %r member (but some types could not be inferred)
DISABLED_ERR_OPTIONS="--disable=E1103"

# W0102 - Dangerous default value %s as argument
# W0141 - Used builtin function %r
# W0142 - Used * or ** magic
# W0201 - Attribute %r defined outside __init__
# W0221 - Arguments number differs from %s method
# W0223 - Method %r is abstract in class %r but is not overridden
# W0231 - __init__ method from base class %r is not called
# W0232 - Class has no __init__ method
# W0233 - __init__ method from a non direct base class %r is called
# W0401 - Wildcard import %s
# W0403 - Relative import %r, should be %r
# W0404 - Reimport %r (imported line %s)
# W0511 - Used when a warning note as FIXME or XXX is detected.
# W0602 - Using global for %r but no assignment is done
# W0603 - Using the global statement
# W0604 - Using the global statement at the module level
# W0613 - Unused argument %r
# W0614 - Unused import %s from wildcard import
# W0621 - Redefining name %r from outer scope (line %s)
# W0622 - Redefining built-in %r
# W0702 - No exception type(s) specified
# W0703 - Catch "Exception"
# W1001 - Use of "property" on an old style class
DISABLED_WARN_OPTIONS="--disable=W0102,W0141,W0142,W0201,W0221,W0223,W0231,W0232 \
                       --disable=W0233,W0401,W0403,W0404,W0511,W0602,W0603,W0604 \
                       --disable=W0613,W0614,W0621,W0622,W0702,W0703,W1001"

usage () {
  echo "usage: `basename $0` [--strict] [--help]"
  exit $1
}

while [ $# -gt 0 ]; do
  case $1 in
    --strict)
      NON_STRICT_OPTIONS=
      ;;
    --help)
      usage 0
      ;;
    *)
      echo "Error unknown option: $1"
      usage 1
  esac
  shift
done

if [ "`tail -c 1 $FALSE_POSITIVES`" == "`echo`" ]; then
  echo "Error $FALSE_POSITIVES ends with an enter."
  echo "Error the last line of $FALSE_POSITIVES should never have an enter!"
  exit 1
fi

# run pylint one file / module at a time, otherwise it sometimes gets
# confused
> pylint-log
for i in $(find pyanaconda -type f -name '*py'); do
  pylint --init-hook='import sys; \
      sys.path.insert(1, "pyanaconda/isys/.libs"); \
      sys.path.insert(2, "pyanaconda/isys"); \
      sys.path.insert(3, "pyanaconda"); \
      sys.path.insert(4, "pyanaconda/.libs")' \
    -i y -r n --disable=C,R --rcfile=/dev/null \
    $DISABLED_WARN_OPTIONS \
    $DISABLED_ERR_OPTIONS \
    $NON_STRICT_OPTIONS $i | \
    egrep -v "`cat $FALSE_POSITIVES | tr '\n' '|'`" > pylint-tmp-log
  if grep -q -v '************* Module ' pylint-tmp-log; then
    cat pylint-tmp-log >> pylint-log
  fi
done
rm pylint-tmp-log

if [ -s pylint-log ]; then
  echo "pylint reports the following issues:"
  cat pylint-log
  exit 1
fi

rm pylint-log

exit 0