build-aux: introduce 'black' tool for python formatting

The 'black' tool is intended to be an opinionated formatting
tool for python code. It is complementary to flake8 which
validates coding bad practices, but (mostly) ignores code
layout issues.

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2023-02-01 11:19:16 -05:00
parent 72a5ccedf0
commit a24ab56da8
4 changed files with 25 additions and 0 deletions

View File

@ -3,6 +3,7 @@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
FLAKE8 = @flake8_path@ FLAKE8 = @flake8_path@
BLACK = @black_path@
RUNUTF8 = @runutf8@ RUNUTF8 = @runutf8@
PYTHON = @PYTHON3@ PYTHON = @PYTHON3@
GREP = @GREP@ GREP = @GREP@

View File

@ -5,6 +5,10 @@ if git and tests_enabled[0]
if flake8_prog.found() if flake8_prog.found()
flake8_path = flake8_prog.full_path() flake8_path = flake8_prog.full_path()
endif endif
black_path = ''
if black_prog.found()
black_path = black_prog.full_path()
endif
if host_machine.system() == 'freebsd' or host_machine.system() == 'darwin' if host_machine.system() == 'freebsd' or host_machine.system() == 'darwin'
make_prog = find_program('gmake') make_prog = find_program('gmake')
@ -35,6 +39,7 @@ if git and tests_enabled[0]
'top_srcdir': meson.project_source_root(), 'top_srcdir': meson.project_source_root(),
'top_builddir': meson.project_build_root(), 'top_builddir': meson.project_build_root(),
'flake8_path': flake8_path, 'flake8_path': flake8_path,
'black_path': black_path,
'runutf8': ' '.join(runutf8), 'runutf8': ' '.join(runutf8),
'PYTHON3': python3_prog.full_path(), 'PYTHON3': python3_prog.full_path(),
'GREP': grep_prog.full_path(), 'GREP': grep_prog.full_path(),

View File

@ -608,6 +608,16 @@ sc_flake8:
echo 'skipping test $@: flake8 not installed' 1>&2; \ echo 'skipping test $@: flake8 not installed' 1>&2; \
fi fi
sc_black:
if [ -n "$(BLACK)" ]; then \
DOT_PY=$$($(VC_LIST_EXCEPT) | $(GREP) '\.py$$'); \
BANG_PY=$$($(VC_LIST_EXCEPT) | xargs grep -l '^#!/usr/bin/env python3$$'); \
ALL_PY=$$(printf "%s\n%s" "$$DOT_PY" "$$BANG_PY" | sort -u); \
echo "$$ALL_PY" | xargs --no-run-if-empty $(BLACK) --check; \
else \
echo 'skipping test $@: black not installed' 1>&2; \
fi
# mymain() in test files should use return, not exit, for nicer output # mymain() in test files should use return, not exit, for nicer output
sc_prohibit_exit_in_tests: sc_prohibit_exit_in_tests:
@prohibit='\<exit *\(' \ @prohibit='\<exit *\(' \
@ -1307,6 +1317,11 @@ syntax-check: sc_spacing-check \
echo "* flake8 not installed, sc_flake8 has been skipped *" >&2; \ echo "* flake8 not installed, sc_flake8 has been skipped *" >&2; \
echo "*****************************************************" >&2; \ echo "*****************************************************" >&2; \
fi fi
if [ -z "$(BLACK)" ]; then \
echo "*****************************************************" >&2; \
echo "* black not installed, sc_black has been skipped *" >&2; \
echo "*****************************************************" >&2; \
fi
endif endif
# Don't include duplicate header in the source (either *.c or *.h) # Don't include duplicate header in the source (either *.c or *.h)
@ -1486,6 +1501,9 @@ exclude_file_name_regexp--sc_prohibit_select = \
^build-aux/syntax-check\.mk|src/util/vireventglibwatch\.c|tests/meson\.build$$ ^build-aux/syntax-check\.mk|src/util/vireventglibwatch\.c|tests/meson\.build$$
exclude_file_name_regexp--sc_black = \
^tools/|src/|tests/|ci/|run\.in|scripts/[^/]*\.py
## -------------- ## ## -------------- ##
## Implementation ## ## Implementation ##
## -------------- ## ## -------------- ##

View File

@ -809,6 +809,7 @@ endforeach
optional_programs = [ optional_programs = [
'augparse', 'augparse',
'black',
'dmidecode', 'dmidecode',
'ebtables', 'ebtables',
'flake8', 'flake8',