diff --git a/.flake8 b/.flake8 new file mode 100644 index 000000000..3d7ed7898 --- /dev/null +++ b/.flake8 @@ -0,0 +1,6 @@ +# Minimal flake8 tweak to be compatible with black's line length of 88 characters +# https://black.readthedocs.io/en/stable/the_black_code_style.html#line-length + +[flake8] +max-line-length = 88 +extend-ignore = E203 diff --git a/CMakeLists.txt b/CMakeLists.txt index 72200143f..a5c4f3826 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -102,3 +102,6 @@ add_subdirectory(python) #--- create uninstall target --------------------------------------------------- include(cmake/EDM4HEPUninstall.cmake) + +#--- code format targets ------------------------------------------------------- +include(cmake/pythonFormat.cmake) diff --git a/cmake/pythonFormat.cmake b/cmake/pythonFormat.cmake new file mode 100644 index 000000000..92e584760 --- /dev/null +++ b/cmake/pythonFormat.cmake @@ -0,0 +1,34 @@ +# Additional target to run python linters and formatters on python scripts +# +# Requires black/flake8 to be available in the environment + + +# Get all our Python files +file(GLOB_RECURSE ALL_PYTHON_FILES ${PROJECT_SOURCE_DIR}/*.py) + +# Black is rather simple because there are no options... +find_program(BLACK_EXECUTABLE black) +if(BLACK_EXECUTABLE) + add_custom_target( + black + COMMAND black + ${ALL_PYTHON_FILES} + ) + set_target_properties(black PROPERTIES EXCLUDE_FROM_ALL TRUE) +else() + message(STATUS "Failed to find black executable - no target to run black can be set") +endif() + +find_program(FLAKE8_EXECUTABLE flake8) +if(FLAKE8_EXECUTABLE) + add_custom_target( + flake8 + COMMAND flake8 + --config=${CMAKE_CURRENT_SOURCE_DIR}/.flake8 + ${ALL_PYTHON_FILES} + ) + set_target_properties(flake8 PROPERTIES EXCLUDE_FROM_ALL TRUE) +else() + message(STATUS "Failed to find flake8 executable - no target to run flake8 can be set") +endif() +