From 4ea1615ab4ea79ed06f2d294a2d17f1c395a1d04 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sat, 15 Nov 2014 18:43:09 +0100 Subject: [PATCH] Added a syntax checker for Python code --- Makefile | 1 + tests/Makefile | 8 +++- tests/project.conf | 9 +++- tests/pylint.sh | 101 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 115 insertions(+), 4 deletions(-) create mode 100755 tests/pylint.sh diff --git a/Makefile b/Makefile index 71595e3..e8a109f 100644 --- a/Makefile +++ b/Makefile @@ -106,6 +106,7 @@ dist: $(PACKAGE)-$(VERSION)/tests/Makefile \ $(PACKAGE)-$(VERSION)/tests/config.conf \ $(PACKAGE)-$(VERSION)/tests/config-noeol.conf \ + $(PACKAGE)-$(VERSION)/tests/pylint.sh \ $(PACKAGE)-$(VERSION)/tests/python.sh \ $(PACKAGE)-$(VERSION)/tests/tests.sh \ $(PACKAGE)-$(VERSION)/tests/project.conf \ diff --git a/tests/Makefile b/tests/Makefile index 25e03c7..3a68993 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,4 +1,4 @@ -TARGETS = $(OBJDIR)config $(OBJDIR)includes $(OBJDIR)string $(OBJDIR)variable $(OBJDIR)tests.log +TARGETS = $(OBJDIR)config $(OBJDIR)includes $(OBJDIR)pylint.log $(OBJDIR)string $(OBJDIR)variable $(OBJDIR)tests.log OBJDIR = PREFIX = /usr/local DESTDIR = @@ -33,6 +33,9 @@ includes_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) $(OBJDIR)includes: $(includes_OBJS) $(CC) -o $(OBJDIR)includes $(includes_OBJS) $(includes_LDFLAGS) +$(OBJDIR)pylint.log: pylint.sh + ./pylint.sh -P "$(PREFIX)" -- "$(OBJDIR)pylint.log" + string_OBJS = $(OBJDIR)string.o string_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS) string_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) @@ -63,7 +66,8 @@ $(OBJDIR)variable.o: variable.c ../src/variable.c $(CC) $(variable_CFLAGS) -o $(OBJDIR)variable.o -c variable.c clean: - $(RM) -- $(config_OBJS) $(includes_OBJS) $(string_OBJS) $(variable_OBJS) $(tests.log_OBJS) + $(RM) -- $(config_OBJS) $(includes_OBJS) $(pylint.log_OBJS) $(string_OBJS) $(variable_OBJS) $(tests.log_OBJS) + ./pylint.sh -c -P "$(PREFIX)" -- "pylint.log" ./tests.sh -c -P "$(PREFIX)" -- "tests.log" distclean: clean diff --git a/tests/project.conf b/tests/project.conf index 1482d0a..baec71d 100644 --- a/tests/project.conf +++ b/tests/project.conf @@ -1,10 +1,10 @@ -targets=config,includes,string,variable,tests.log +targets=config,includes,pylint.log,string,variable,tests.log cppflags_force=-I ../include cflags_force=-W cflags=-Wall -g -O2 ldflags_force=-L$(OBJDIR). -L../src -lSystem ldflags=-L$(PREFIX)/lib -Wl,-rpath,"$(PWD)/../src" -dist=COPYING,Makefile,config.conf,config-noeol.conf,python.sh,tests.sh +dist=COPYING,Makefile,config.conf,config-noeol.conf,pylint.sh,python.sh,tests.sh [config] type=binary @@ -17,6 +17,11 @@ depends=../src/config.c type=binary sources=includes.c +[pylint.log] +type=script +script=./pylint.sh +depends=pylint.sh + [string] type=binary sources=string.c diff --git a/tests/pylint.sh b/tests/pylint.sh new file mode 100755 index 0000000..3e6cda7 --- /dev/null +++ b/tests/pylint.sh @@ -0,0 +1,101 @@ +#!/bin/sh +#$Id$ +#Copyright (c) 2014 Pierre Pronchery +# +#Redistribution and use in source and binary forms, with or without +#modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +#AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +#IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +#DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +#FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +#DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +#SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +#CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +#OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +#OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +#variables +PROGNAME="pylint.sh" +#executables +DEBUG="_debug" +FIND="find" +PYLINT="pep8" + + +#functions +#pylint +_pylint() +{ + filename="$1" + + #XXX ignores errors + $DEBUG $PYLINT -- "$filename" 2>&1 | while read line; do + echo "$line" 1>&2 + echo "$line" + done +} + + +#debug +_debug() +{ + echo "$@" 1>&2 + "$@" + res=$? + #ignore errors when the command is not available + [ $res -eq 127 ] && return 0 + return $res +} + + +#usage +_usage() +{ + echo "Usage: $PROGNAME [-c] target" 1>&2 + return 1 +} + + +#main +clean=0 +while getopts "cP:" name; do + case "$name" in + c) + clean=1 + ;; + P) + #XXX ignored for compatibility + ;; + ?) + _usage + exit $? + ;; + esac +done +shift $((OPTIND - 1)) +if [ $# -ne 1 ]; then + _usage + exit $? +fi +target="$1" + +#clean +[ $clean -ne 0 ] && return 0 + +ret=0 +(date +echo +$FIND "../doc" "../src" "../tests" "../tools" -name '*.py' | while read filename; do + _pylint "$filename" +done) > "$target" +exit $ret