On 3/8/23 17:39, Daniel P. Berrangé wrote:
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.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
build-aux/Makefile.in | 1 +
build-aux/meson.build | 5 +++++
build-aux/syntax-check.mk | 18 ++++++++++++++++++
meson.build | 1 +
4 files changed, 25 insertions(+)
diff --git a/build-aux/Makefile.in b/build-aux/Makefile.in
index 7ee4680847..db44ee36a4 100644
--- a/build-aux/Makefile.in
+++ b/build-aux/Makefile.in
@@ -3,6 +3,7 @@
top_srcdir = @top_srcdir@
top_builddir = @top_builddir@
FLAKE8 = @flake8_path@
+BLACK = @black_path@
RUNUTF8 = @runutf8@
PYTHON = @PYTHON3@
GREP = @GREP@
diff --git a/build-aux/meson.build b/build-aux/meson.build
index 16d085505d..0330f2940c 100644
--- a/build-aux/meson.build
+++ b/build-aux/meson.build
@@ -2,6 +2,10 @@ flake8_path = ''
if flake8_prog.found()
flake8_path = flake8_prog.full_path()
endif
+black_path = ''
+if black_prog.found()
+ black_path = black_prog.full_path()
+endif
if host_machine.system() == 'freebsd' or host_machine.system() ==
'darwin'
make_prog = find_program('gmake')
@@ -32,6 +36,7 @@ syntax_check_conf = configuration_data({
'top_srcdir': meson.project_source_root(),
'top_builddir': meson.project_build_root(),
'flake8_path': flake8_path,
+ 'black_path': black_path,
'runutf8': ' '.join(runutf8),
'PYTHON3': python3_prog.full_path(),
'GREP': grep_prog.full_path(),
diff --git a/build-aux/syntax-check.mk b/build-aux/syntax-check.mk
index 158f14e77e..6d82a4301a 100644
--- a/build-aux/syntax-check.mk
+++ b/build-aux/syntax-check.mk
@@ -595,6 +595,16 @@ sc_flake8:
echo 'skipping test $@: flake8 not installed' 1>&2; \
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 $(BLACK) --check; \
At this point, there's no file passed to $(BLACK) (because of
exclude_file_... below) and thus it fails. It starts working after next
patch when new python scripts are introduced.
Nevertheless, it may still be worth running this as:
echo "$$ALL_PY" | xargs --no-run-if-empty -- $(BLACK) --check;
(the same could be done to flake8 from which you copied these lines)
+ else \
+ echo 'skipping test $@: black not installed' 1>&2; \
+ fi
+
# mymain() in test files should use return, not exit, for nicer output
sc_prohibit_exit_in_tests:
@prohibit='\<exit *\(' \
@@ -1303,6 +1313,11 @@ syntax-check: sc_spacing-check \
echo "* flake8 not installed, sc_flake8 has been skipped *" >&2; \
echo "*****************************************************" >&2; \
fi
+ if [ -z "$(BLACK)" ]; then \
+ echo "*****************************************************" >&2; \
+ echo "* black not installed, sc_black has been skipped *" >&2; \
+ echo "*****************************************************" >&2; \
+ fi
endif
# Don't include duplicate header in the source (either *.c or *.h)
@@ -1479,6 +1494,9 @@ exclude_file_name_regexp--sc_prohibit_select = \
^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
+
Michal