Home Explore Blog CI



neovim

13th chunk of `src/nvim/CMakeLists.txt`
8e1701cf9a529d3f7e81134bab3ac1b92849ee270a88a22f0000000100000d21
 -clang-analyzer-core.uninitialized.Assign,
  -clang-analyzer-optin.core.EnumCastOutOfRange,
  -clang-analyzer-optin.performance.Padding,
  -clang-analyzer-security.insecureAPI.strcpy,
  -clang-analyzer-unix.StdCLibraryFunctions,
  -clang-analyzer-unix.Stream,
  ${CLANG_ANALYZER_IGNORE}
  '
  EXCLUDE ${EXCLUDE_CLANG_TIDY})

add_custom_target(copy_compile_commands
  COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/compile_commands.json ${PROJECT_SOURCE_DIR}/compile_commands.json)
add_dependencies(copy_compile_commands nvim_bin)
add_dependencies(lintc-clang-tidy copy_compile_commands)
add_dependencies(clang-analyzer copy_compile_commands)

if(CI_BUILD)
  set(LINT_OUTPUT_FORMAT gh_action)
else()
  set(LINT_OUTPUT_FORMAT vs7)
endif()
add_glob_target(
  TARGET lintc-clint
  COMMAND ${PROJECT_SOURCE_DIR}/src/clint.py
  FLAGS --output=${LINT_OUTPUT_FORMAT}
  FILES ${LINT_NVIM_SOURCES}
  EXCLUDE
    tui/terminfo_defs.h)

set(UNCRUSTIFY_PRG ${DEPS_BIN_DIR}/uncrustify)
set(UNCRUSTIFY_CONFIG ${PROJECT_SOURCE_DIR}/src/uncrustify.cfg)

add_custom_target(uncrustify_update_config
  ${UNCRUSTIFY_PRG} -c ${UNCRUSTIFY_CONFIG} --update-config-with-doc -o ${UNCRUSTIFY_CONFIG})

add_glob_target(
  TARGET lintc-uncrustify
  COMMAND ${UNCRUSTIFY_PRG}
  FLAGS -c ${UNCRUSTIFY_CONFIG} -q --check
  FILES ${NVIM_SOURCES} ${NVIM_HEADERS})

add_glob_target(
  TARGET formatc
  COMMAND ${UNCRUSTIFY_PRG}
  FLAGS -c ${UNCRUSTIFY_CONFIG} --replace --no-backup
  FILES ${NVIM_SOURCES} ${NVIM_HEADERS})

add_dependencies(lintc-uncrustify uncrustify_update_config)
add_dependencies(formatc uncrustify_update_config)
add_dependencies(uncrustify_update_config uncrustify)

add_custom_target(lintc)
add_dependencies(lintc lintc-clint lintc-uncrustify lintc-clang-tidy)

#-------------------------------------------------------------------------------
# Docs
#-------------------------------------------------------------------------------

add_subdirectory(po)

add_custom_target(generated-sources DEPENDS
  ${NVIM_GENERATED_FOR_HEADERS}
  ${NVIM_GENERATED_FOR_SOURCES}
)

file(GLOB API_SOURCES CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR}/src/nvim/api/*.c)

file(GLOB LUA_SOURCES CONFIGURE_DEPENDS
  ${NVIM_RUNTIME_DIR}/lua/vim/*.lua
  ${NVIM_RUNTIME_DIR}/lua/vim/_meta/*.lua
  ${NVIM_RUNTIME_DIR}/lua/vim/filetype/*.lua
  ${NVIM_RUNTIME_DIR}/lua/vim/lsp/*.lua
  ${NVIM_RUNTIME_DIR}/lua/vim/treesitter/*.lua
)

add_target(doc-vim
  COMMAND ${NVIM_LUA} src/gen/gen_vimdoc.lua
  DEPENDS
    nvim
    ${API_SOURCES}
    ${LUA_SOURCES}
    ${PROJECT_SOURCE_DIR}/src/gen/gen_vimdoc.lua
    ${NVIM_RUNTIME_DIR}/doc/api.txt
    ${NVIM_RUNTIME_DIR}/doc/diagnostic.txt
    ${NVIM_RUNTIME_DIR}/doc/lsp.txt
    ${NVIM_RUNTIME_DIR}/doc/lua.txt
    ${NVIM_RUNTIME_DIR}/doc/treesitter.txt
  )

add_target(doc-eval
  COMMAND ${NVIM_LUA} ${PROJECT_SOURCE_DIR}/src/gen/gen_eval_files.lua ${FUNCS_METADATA}
  DEPENDS
    nvim
    ${FUNCS_METADATA}
    ${PROJECT_SOURCE_DIR}/src/gen/gen_eval_files.lua
    ${PROJECT_SOURCE_DIR}/src/nvim/eval.lua
    ${PROJECT_SOURCE_DIR}/src/nvim/options.lua
    ${PROJECT_SOURCE_DIR}/src/nvim/vvars.lua
    ${NVIM_RUNTIME_DIR}/doc/vimfn.txt
  )

add_custom_target(doc)
add_dependencies(doc doc-vim doc-eval)

add_target(lintdoc
  COMMAND ${NVIM_LUA} scripts/lintdoc.lua
  DEPENDS ${DOCFILES}
  CUSTOM_COMMAND_ARGS USES_TERMINAL)
add_dependencies(lintdoc nvim)

Title: Linting and Documentation Targets Configuration
Summary
This section details the configuration of targets for code formatting and documentation generation. It includes `uncrustify_update_config`, `lintc-uncrustify`, and `formatc` using Uncrustify for code style enforcement. It also defines dependencies between linting targets and creates a combined `lintc` target. Additionally, it sets up targets for generating documentation from source code, including `doc-vim` and `doc-eval`, and a `lintdoc` target for validating documentation files.