build: add a cmake target for all used linters #18543

* build: move the logic for linters to cmake
Cmake is our source of truth. We should have as much of our build
process there as possible so everyone can make use of it.

* build: remove redundant check for ninja generator
The minimum cmake version as of writing this is 3.10, which has ninja
support.
This commit is contained in:
dundargoc 2022-06-09 17:09:24 +02:00 committed by GitHub
parent 9662cd7f48
commit 6d57bb89c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 62 additions and 82 deletions

View File

@ -107,11 +107,11 @@ jobs:
run: ./ci/run_tests.sh build_nvim run: ./ci/run_tests.sh build_nvim
- if: "!cancelled()" - if: "!cancelled()"
name: clint-full name: lintcfull
run: ./ci/run_lint.sh clint-full run: ./ci/run_lint.sh lintcfull
- if: "!cancelled()" - if: "!cancelled()"
name: stylua name: lintstylua
uses: JohnnyMorganz/stylua-action@1.0.0 uses: JohnnyMorganz/stylua-action@1.0.0
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
@ -124,16 +124,16 @@ jobs:
git diff --color --exit-code git diff --color --exit-code
- if: "!cancelled()" - if: "!cancelled()"
name: lualint name: lintlua
run: ./ci/run_lint.sh lualint run: ./ci/run_lint.sh lintlua
- if: "!cancelled()" - if: "!cancelled()"
name: pylint name: lintpy
run: ./ci/run_lint.sh pylint run: ./ci/run_lint.sh lintpy
- if: "!cancelled()" - if: "!cancelled()"
name: shlint name: lintsh
run: ./ci/run_lint.sh shlint run: ./ci/run_lint.sh lintsh
- if: "!cancelled()" - if: "!cancelled()"
name: check-single-includes name: check-single-includes

View File

@ -612,9 +612,6 @@ if(NOT BUSTED_OUTPUT_TYPE)
set(BUSTED_OUTPUT_TYPE "nvim") set(BUSTED_OUTPUT_TYPE "nvim")
endif() endif()
find_program(LUACHECK_PRG luacheck)
find_program(FLAKE8_PRG flake8)
include(InstallHelpers) include(InstallHelpers)
file(GLOB MANPAGES file(GLOB MANPAGES
@ -748,15 +745,13 @@ if(BUSTED_LUA_PRG)
set_target_properties(functionaltest-lua PROPERTIES FOLDER test) set_target_properties(functionaltest-lua PROPERTIES FOLDER test)
endif() endif()
if(LUACHECK_PRG) foreach(TARGET IN ITEMS lintlua lintsh lintpy lintuncrustify)
add_custom_target(lualint add_custom_target(${TARGET}
COMMAND ${LUACHECK_PRG} -q runtime/ scripts/ src/ test/ COMMAND ${CMAKE_COMMAND}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) -DPROJECT_ROOT=${PROJECT_SOURCE_DIR}
else() -DTARGET=${TARGET}
add_custom_target(lualint false -P ${PROJECT_SOURCE_DIR}/cmake/lint.cmake)
COMMENT "lualint: LUACHECK_PRG not defined") endforeach()
endif()
#add uninstall target #add uninstall target
if(NOT TARGET uninstall) if(NOT TARGET uninstall)

View File

@ -47,13 +47,7 @@ endif
ifeq (,$(BUILD_TOOL)) ifeq (,$(BUILD_TOOL))
ifeq (Ninja,$(CMAKE_GENERATOR)) ifeq (Ninja,$(CMAKE_GENERATOR))
ifneq ($(shell $(CMAKE_PRG) --help 2>/dev/null | grep Ninja),) BUILD_TOOL = ninja
BUILD_TOOL = ninja
else
# User's version of CMake doesn't support Ninja
BUILD_TOOL = $(MAKE)
CMAKE_GENERATOR := Unix Makefiles
endif
else else
BUILD_TOOL = $(MAKE) BUILD_TOOL = $(MAKE)
endif endif
@ -140,51 +134,19 @@ build/runtime/doc/tags helptags: | nvim
helphtml: | nvim build/runtime/doc/tags helphtml: | nvim build/runtime/doc/tags
+$(BUILD_TOOL) -C build doc_html +$(BUILD_TOOL) -C build doc_html
functionaltest: | nvim functionaltest functionaltest-lua unittest benchmark: | nvim
+$(BUILD_TOOL) -C build functionaltest $(BUILD_TOOL) -C build $@
functionaltest-lua: | nvim lintlua lintsh lintpy lintuncrustify lintc lintcfull check-single-includes generated-sources: | build/.ran-cmake
+$(BUILD_TOOL) -C build functionaltest-lua $(CMAKE_PRG) --build build --target $@
stylua: commitlint: | nvim
stylua --check runtime/
lualint: | build/.ran-cmake deps
$(BUILD_TOOL) -C build lualint
_opt_stylua:
@command -v stylua && { $(MAKE) stylua; exit $$?; } \
|| echo "SKIP: stylua (stylua not found)"
shlint:
@shellcheck --version | head -n 2
shellcheck scripts/vim-patch.sh
_opt_shlint:
@command -v shellcheck && { $(MAKE) shlint; exit $$?; } \
|| echo "SKIP: shlint (shellcheck not found)"
pylint:
flake8 contrib/ scripts/ src/ test/
# Run pylint only if flake8 is installed.
_opt_pylint:
@command -v flake8 && { $(MAKE) pylint; exit $$?; } \
|| echo "SKIP: pylint (flake8 not found)"
commitlint:
$(NVIM_PRG) -u NONE -es +"lua require('scripts.lintcommit').main({trace=false})" $(NVIM_PRG) -u NONE -es +"lua require('scripts.lintcommit').main({trace=false})"
_opt_commitlint: _opt_commitlint:
@test -x build/bin/nvim && { $(MAKE) commitlint; exit $$?; } \ @test -x build/bin/nvim && { $(MAKE) commitlint; exit $$?; } \
|| echo "SKIP: commitlint (build/bin/nvim not found)" || echo "SKIP: commitlint (build/bin/nvim not found)"
unittest: | nvim
+$(BUILD_TOOL) -C build unittest
benchmark: | nvim
+$(BUILD_TOOL) -C build benchmark
test: functionaltest unittest test: functionaltest unittest
clean: clean:
@ -200,18 +162,6 @@ distclean:
install: checkprefix nvim install: checkprefix nvim
+$(BUILD_TOOL) -C build install +$(BUILD_TOOL) -C build install
clint: build/.ran-cmake
+$(BUILD_TOOL) -C build clint
clint-full: build/.ran-cmake
+$(BUILD_TOOL) -C build clint-full
check-single-includes: build/.ran-cmake
+$(BUILD_TOOL) -C build check-single-includes
generated-sources: build/.ran-cmake
+$(BUILD_TOOL) -C build generated-sources
appimage: appimage:
bash scripts/genappimage.sh bash scripts/genappimage.sh
@ -221,7 +171,7 @@ appimage:
appimage-%: appimage-%:
bash scripts/genappimage.sh $* bash scripts/genappimage.sh $*
lint: check-single-includes clint _opt_stylua lualint _opt_pylint _opt_shlint _opt_commitlint lint: check-single-includes lintc lintlua lintpy lintsh _opt_commitlint lintuncrustify
# Generic pattern rules, allowing for `make build/bin/nvim` etc. # Generic pattern rules, allowing for `make build/bin/nvim` etc.
# Does not work with "Unix Makefiles". # Does not work with "Unix Makefiles".
@ -233,4 +183,4 @@ $(DEPS_BUILD_DIR)/%: phony_force
$(BUILD_TOOL) -C $(DEPS_BUILD_DIR) $(patsubst $(DEPS_BUILD_DIR)/%,%,$@) $(BUILD_TOOL) -C $(DEPS_BUILD_DIR) $(patsubst $(DEPS_BUILD_DIR)/%,%,$@)
endif endif
.PHONY: test stylua lualint pylint shlint functionaltest unittest lint clint clean distclean nvim libnvim cmake deps install appimage checkprefix commitlint .PHONY: test lintlua lintpy lintsh functionaltest unittest lint lintc clean distclean nvim libnvim cmake deps install appimage checkprefix commitlint

View File

@ -12,7 +12,7 @@ rm -f "$END_MARKER"
# Run all tests if no input argument is given # Run all tests if no input argument is given
if (($# == 0)); then if (($# == 0)); then
tests=('clint-full' 'lualint' 'pylint' 'shlint' 'check-single-includes') tests=('lintcfull' 'lintlua' 'lintpy' 'lintsh' 'check-single-includes')
else else
tests=("$@") tests=("$@")
fi fi

34
cmake/lint.cmake Normal file
View File

@ -0,0 +1,34 @@
function(lint)
cmake_parse_arguments(LINT "QUIET" "PROGRAM" "FLAGS;FILES" ${ARGN})
if(LINT_QUIET)
set(OUTPUT_QUIET OUTPUT_QUIET)
elseif()
set(OUTPUT_QUIET "")
endif()
find_program(PROGRAM_EXISTS ${LINT_PROGRAM})
if(PROGRAM_EXISTS)
execute_process(COMMAND ${LINT_PROGRAM} ${LINT_FLAGS} ${LINT_FILES}
WORKING_DIRECTORY ${PROJECT_ROOT}
RESULT_VARIABLE ret
${OUTPUT_QUIET})
if(ret AND NOT ret EQUAL 0)
message(FATAL_ERROR "FAILED: ${TARGET}")
endif()
else()
message(STATUS "${TARGET}: ${LINT_PROGRAM} not found. SKIP.")
endif()
endfunction()
if(${TARGET} STREQUAL "lintuncrustify")
file(GLOB_RECURSE FILES ${PROJECT_ROOT}/src/nvim/*.[c,h])
lint(PROGRAM uncrustify FLAGS -c src/uncrustify.cfg -q --check FILES ${FILES} QUIET)
elseif(${TARGET} STREQUAL "lintpy")
lint(PROGRAM flake8 FILES contrib/ scripts/ src/ test/)
elseif(${TARGET} STREQUAL "lintsh")
lint(PROGRAM shellcheck FILES scripts/vim-patch.sh)
elseif(${TARGET} STREQUAL "lintlua")
lint(PROGRAM luacheck FLAGS -q FILES runtime/ scripts/ src/ test/)
lint(PROGRAM stylua FLAGS --color=always --check FILES runtime/)
endif()

View File

@ -800,10 +800,10 @@ foreach(sfile ${LINT_NVIM_SOURCES})
list(APPEND LINT_TARGETS ${touch_file}) list(APPEND LINT_TARGETS ${touch_file})
list(APPEND LINT_NVIM_REL_SOURCES ${rsfile}) list(APPEND LINT_NVIM_REL_SOURCES ${rsfile})
endforeach() endforeach()
add_custom_target(clint DEPENDS ${LINT_TARGETS}) add_custom_target(lintc DEPENDS ${LINT_TARGETS})
add_custom_target( add_custom_target(
clint-full lintcfull
COMMAND COMMAND
${LINT_PRG} --suppress-errors=${LINT_SUPPRESS_FILE} ${LINT_NVIM_REL_SOURCES} ${LINT_PRG} --suppress-errors=${LINT_SUPPRESS_FILE} ${LINT_NVIM_REL_SOURCES}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}

View File

@ -2307,6 +2307,7 @@ bool diff_find_change(win_T *wp, linenr_T lnum, int *startp, int *endp)
if ((dp == NULL) || (diff_check_sanity(curtab, dp) == FAIL)) { if ((dp == NULL) || (diff_check_sanity(curtab, dp) == FAIL)) {
xfree(line_org); xfree(line_org);
return false; return false;
} }