--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/tools/check_source.sh Tue Aug 22 17:14:08 2017 +0300
@@ -0,0 +1,237 @@
+#!/bin/sh
+# -*- coding: utf-8 -*-
+
+# This file is part of Beremiz, a Integrated Development Environment for
+# programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
+#
+# Copyright (C) 2017: Andrey Skvortsov
+#
+# See COPYING file for copyrights details.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+exit_code=0
+set_exit_error()
+{
+ if [ $exit_code -eq 0 ]; then
+ exit_code=1
+ fi
+}
+
+
+compile_checks()
+{
+ echo "Syntax checking..."
+ py_files=$(find . -name '*.py')
+
+ # remove compiled Python files
+ find . -name '*.pyc' -exec rm -f {} \;
+
+ for i in $py_files; do
+ # echo $i
+ python -m py_compile $i
+ if [ $? -ne 0 ]; then
+ echo "Syntax error in $i"
+ set_exit_error
+ fi
+ done
+}
+
+# pep8 was renamed to pycodestyle
+# detect existed version
+pep8_detect()
+{
+ test -n $pep8 && (which pep8 > /dev/null) && pep8="pep8"
+ test -n $pep8 && (which pycodestyle > /dev/null) && pep8="pycodestyle"
+ if [ -z $pep8 ]; then
+ echo "pep8/pycodestyle is not found"
+ set_exit_error
+ fi
+}
+
+pep8_checks_default()
+{
+ echo "Check basic code-style problems for PEP-8"
+
+ test -n $pep8 && pep8_detect
+ test -z $pep8 && return
+
+ user_ignore=
+ # user_ignore=$user_ignore,E265 # E265 block comment should start with '# '
+ user_ignore=$user_ignore,E501 # E501 line too long (80 > 79 characters)
+
+ # ignored by default,
+ default_ignore=
+ default_ignore=$default_ignore,E121 # E121 continuation line under-indented for hanging indent
+ default_ignore=$default_ignore,E123 # E123 closing bracket does not match indentation of opening bracket’s line
+ default_ignore=$default_ignore,E126 # E126 continuation line over-indented for hanging indent
+ default_ignore=$default_ignore,E133 # E133 closing bracket is missing indentation
+ default_ignore=$default_ignore,E226 # E226 missing whitespace around arithmetic operator
+ default_ignore=$default_ignore,E241 # E241 multiple spaces after ':'
+ default_ignore=$default_ignore,E242 # E242 tab after ‘,’
+ default_ignore=$default_ignore,E704 # E704 multiple statements on one line (def)
+ default_ignore=$default_ignore,W503 # W503 line break occurred before a binary operator
+ ignore=$user_ignore,$default_ignore
+
+ # $pep8 --ignore $ignore --exclude build ./
+ $pep8 --max-line-length 300 --exclude build ./
+ if [ $? -ne 0 ]; then
+ set_exit_error
+ fi
+}
+
+
+pep8_checks_selected()
+{
+ echo "Check basic code-style problems for PEP-8 (selective)"
+
+ test -n $pep8 && pep8_detect
+ test -z $pep8 && return
+
+ # select checks:
+ user_select=
+ user_select=$user_select,W291 # W291 trailing whitespace
+ user_select=$user_select,E401 # E401 multiple imports on one line
+ user_select=$user_select,E265 # E265 block comment should start with '# '
+ user_select=$user_select,E228 # E228 missing whitespace around modulo operator
+ user_select=$user_select,W293 # W293 blank line contains whitespace
+ user_select=$user_select,E302 # E302 expected 2 blank lines, found 1
+ user_select=$user_select,E261 # E261 at least two spaces before inline comment
+ user_select=$user_select,E271 # E271 multiple spaces after keyword
+ user_select=$user_select,E231 # E231 missing whitespace after ','
+ user_select=$user_select,E303 # E303 too many blank lines (2)
+ user_select=$user_select,E225 # E225 missing whitespace around operator
+ user_select=$user_select,E711 # E711 comparison to None should be 'if cond is not None:'
+ user_select=$user_select,E251 # E251 unexpected spaces around keyword / parameter equals
+ user_select=$user_select,E227 # E227 missing whitespace around bitwise or shift operator
+ user_select=$user_select,E202 # E202 whitespace before ')'
+ user_select=$user_select,E201 # E201 whitespace after '{'
+ user_select=$user_select,W391 # W391 blank line at end of file
+ user_select=$user_select,E305 # E305 expected 2 blank lines after class or function definition, found X
+ user_select=$user_select,E306 # E306 expected 1 blank line before a nested definition, found X
+ user_select=$user_select,E703 # E703 statement ends with a semicolon
+ user_select=$user_select,E701 # E701 multiple statements on one line (colon)
+ user_select=$user_select,E221 # E221 multiple spaces before operator
+ user_select=$user_select,E741 # E741 ambiguous variable name 'l'
+ user_select=$user_select,E111 # E111 indentation is not a multiple of four
+ user_select=$user_select,E222 # E222 multiple spaces after operator
+ user_select=$user_select,E712 # E712 comparison to True should be 'if cond is True:' or 'if cond:'
+ user_select=$user_select,E262 # E262 inline comment should start with '# '
+ user_select=$user_select,E203 # E203 whitespace before ','
+ user_select=$user_select,E731 # E731 do not assign a lambda expression, use a def
+ user_select=$user_select,W601 # W601 .has_key() is deprecated, use 'in'
+ user_select=$user_select,E502 # E502 the backslash is redundant between brackets
+ user_select=$user_select,W602 # W602 deprecated form of raising exception
+ user_select=$user_select,E129 # E129 visually indented line with same indent as next logical line
+ user_select=$user_select,E127 # E127 continuation line over-indented for visual indent
+ user_select=$user_select,E128 # E128 continuation line under-indented for visual indent
+ user_select=$user_select,E125 # E125 continuation line with same indent as next logical line
+ user_select=$user_select,E114 # E114 indentation is not a multiple of four (comment)
+ user_select=$user_select,E211 # E211 whitespace before '['
+ user_select=$user_select,W191 # W191 indentation contains tabs
+ user_select=$user_select,E101 # E101 indentation contains mixed spaces and tabs
+ user_select=$user_select,E124 # E124 closing bracket does not match visual indentation
+ user_select=$user_select,E272 # E272 multiple spaces before keyword
+ user_select=$user_select,E713 # E713 test for membership should be 'not in'
+ user_select=$user_select,E122 # E122 continuation line missing indentation or outdented
+ user_select=$user_select,E131 # E131 continuation line unaligned for hanging indent
+ user_select=$user_select,E721 # E721 do not compare types, use 'isinstance()'
+ user_select=$user_select,E115 # E115 expected an indented block (comment)
+ user_select=$user_select,E722 # E722 do not use bare except'
+ user_select=$user_select,E266 # E266 too many leading '#' for block comment
+ user_select=$user_select,E402 # E402 module level import not at top of file
+ user_select=$user_select,W503 # W503 line break before binary operator
+
+ $pep8 --select $user_select --exclude=build .
+ if [ $? -ne 0 ]; then
+ set_exit_error
+ fi
+}
+
+flake8_checks()
+{
+ echo "Check for problems using flake8 ..."
+
+ which flake8 > /dev/null
+ if [ $? -ne 0 ]; then
+ echo "flake8 is not found"
+ set_exit_error
+ return
+ fi
+
+ flake8 --max-line-length=300 --exclude=build --builtins="_" ./
+ if [ $? -ne 0 ]; then
+ set_exit_error
+ fi
+}
+
+pylint_checks()
+{
+ echo "Check for problems using pylint ..."
+
+ which pylint > /dev/null
+ if [ $? -ne 0 ]; then
+ echo "pylint is not found"
+ set_exit_error
+ return
+ fi
+
+ export PYTHONPATH="$PWD/../CanFestival-3/objdictgen":$PYTHONPATH
+
+ disable=
+ disable=$disable,C0103 # invalid-name
+ disable=$disable,C0111 # missing-docstring
+ disable=$disable,W0703 # broad-except
+ disable=$disable,C0326 # bad whitespace
+ disable=$disable,C0301 # Line too long
+ disable=$disable,C0302 # Too many lines in module
+ disable=$disable,W0511 # fixme
+
+ enable=
+ # enable=$enable,W0403 # relative import
+
+ options=
+ options="$options --additional-builtins=_"
+ options="$options -r no"
+ # options="$options --py3k" # report errors for Python 3 porting
+ # options="$options -E" # report only major errors
+ options="$options --output-format=parseable"
+
+ if [ -n "$enable" ]; then
+ options="$options --disable=all"
+ options="$options --enable=$enable"
+ else
+ options="$options --disable=$disable"
+ fi
+ echo $options
+
+ find ./ -name '*.py' | grep -v '/build/' | xargs pylint $options
+ if [ $? -ne 0 ]; then
+ set_exit_error
+ fi
+}
+
+main()
+{
+ compile_checks
+ pep8_checks_default
+ # pep8_checks_selected
+ # flake8_checks
+ # pylint_checks
+ exit $exit_code
+}
+
+main