From 40139738eb479d0913ec6ce751ca5adfa50ad8c3 Mon Sep 17 00:00:00 2001 From: dundargoc Date: Sun, 26 Nov 2023 21:36:02 +0100 Subject: [PATCH] build: enable IWYU on mac --- Makefile | 2 +- cmake.config/iwyu/mapping.imp | 7 +- cmake.config/iwyu/posix.imp | 117 ++++++---------------------------- src/nvim/CMakeLists.txt | 1 + src/nvim/base64.c | 2 +- src/nvim/buffer_defs.h | 2 +- src/nvim/cmdexpand.c | 1 + src/nvim/edit.c | 1 + src/nvim/eval.c | 1 + src/nvim/eval/typval.c | 1 + src/nvim/event/rstream.c | 2 +- src/nvim/ex_docmd.c | 1 + src/nvim/fileio.c | 1 + src/nvim/keycodes.c | 1 + src/nvim/lua/stdlib.c | 2 +- src/nvim/main.c | 21 +++--- src/nvim/marktree.c | 1 + src/nvim/mbyte.c | 1 + src/nvim/memline.c | 1 + src/nvim/message.c | 1 + src/nvim/ops.c | 1 + src/nvim/os/fileio.c | 4 ++ src/nvim/os/fs.c | 2 - src/nvim/os/process.c | 12 +++- src/nvim/os/signal.c | 6 +- src/nvim/os/time.c | 2 - src/nvim/os/unix_defs.h | 17 +++-- src/nvim/ui_compositor.c | 2 +- src/nvim/undo.c | 1 + 29 files changed, 82 insertions(+), 132 deletions(-) diff --git a/Makefile b/Makefile index 0ce89ae39f..e65a39e9f0 100644 --- a/Makefile +++ b/Makefile @@ -141,7 +141,7 @@ test: $(TEST) iwyu: build/.ran-cmake cmake --preset iwyu cmake --build build > build/iwyu.log - iwyu-fix-includes --only_re="src/nvim" --ignore_re="(src/nvim/eval/encode.c|src/nvim/auto/\ + iwyu-fix-includes --only_re="src/nvim" --ignore_re="(src/nvim/eval/encode.c|src/nvim/auto/|src/nvim/os/lang.c|src/nvim/map.c\ |src/nvim/api/autocmd.h\ |src/nvim/api/buffer.h\ |src/nvim/api/command.h\ diff --git a/cmake.config/iwyu/mapping.imp b/cmake.config/iwyu/mapping.imp index ae857e87da..8c693fecda 100644 --- a/cmake.config/iwyu/mapping.imp +++ b/cmake.config/iwyu/mapping.imp @@ -17,12 +17,11 @@ # Symbols { symbol: [ "MAX", private, '"nvim/macros.h"', public ] }, { symbol: [ "MIN", private, '"nvim/macros.h"', public ] }, + { symbol: [ "extern_proc", private, '', public ] }, + { symbol: [ "iovec", private, '', public ] }, # Third party headers - { include: [ '', public, '"nvim/os/unix_defs.h"', private ] }, - { include: [ '', public, '"nvim/os/unix_defs.h"', private ] }, - { include: [ '', public, '"nvim/os/unix_defs.h"', private ] }, - { include: [ '', public, '', public ] }, + { include: [ '', private, '', public ] }, ] # vim: set ft=toml: diff --git a/cmake.config/iwyu/posix.imp b/cmake.config/iwyu/posix.imp index b15c1186d9..2eabd3063b 100644 --- a/cmake.config/iwyu/posix.imp +++ b/cmake.config/iwyu/posix.imp @@ -1,110 +1,33 @@ [ - # bits/ioctls.h + { include: [ "", private, "", public ] }, { include: [ "", private, "", private ] }, - - # errno.h - { symbol: ["E2BIG", private, "", public ] }, - { symbol: ["EACCES", private, "", public ] }, - { symbol: ["EADDRINUSE", private, "", public ] }, - { symbol: ["EADDRNOTAVAIL", private, "", public ] }, - { symbol: ["EAFNOSUPPORT", private, "", public ] }, - { symbol: ["EAGAIN", private, "", public ] }, - { symbol: ["EALREADY", private, "", public ] }, - { symbol: ["EBADF", private, "", public ] }, - { symbol: ["EBADMSG", private, "", public ] }, - { symbol: ["EBUSY", private, "", public ] }, - { symbol: ["ECANCELED", private, "", public ] }, - { symbol: ["ECHILD", private, "", public ] }, - { symbol: ["ECONNABORTED", private, "", public ] }, - { symbol: ["ECONNREFUSED", private, "", public ] }, - { symbol: ["ECONNRESET", private, "", public ] }, - { symbol: ["EDEADLK", private, "", public ] }, - { symbol: ["EDESTADDRREQ", private, "", public ] }, - { symbol: ["EDOM", private, "", public ] }, - { symbol: ["EDQUOT", private, "", public ] }, - { symbol: ["EEXIST", private, "", public ] }, - { symbol: ["EFAULT", private, "", public ] }, - { symbol: ["EFBIG", private, "", public ] }, - { symbol: ["EHOSTUNREACH", private, "", public ] }, - { symbol: ["EIDRM", private, "", public ] }, - { symbol: ["EILSEQ", private, "", public ] }, - { symbol: ["EINPROGRESS", private, "", public ] }, - { symbol: ["EINTR", private, "", public ] }, - { symbol: ["EINVAL", private, "", public ] }, - { symbol: ["EIO", private, "", public ] }, - { symbol: ["EISCONN", private, "", public ] }, - { symbol: ["EISDIR", private, "", public ] }, - { symbol: ["ELOOP", private, "", public ] }, - { symbol: ["EMFILE", private, "", public ] }, - { symbol: ["EMLINK", private, "", public ] }, - { symbol: ["EMSGSIZE", private, "", public ] }, - { symbol: ["EMULTIHOP", private, "", public ] }, - { symbol: ["ENAMETOOLONG", private, "", public ] }, - { symbol: ["ENETDOWN", private, "", public ] }, - { symbol: ["ENETRESET", private, "", public ] }, - { symbol: ["ENETUNREACH", private, "", public ] }, - { symbol: ["ENFILE", private, "", public ] }, - { symbol: ["ENOBUFS", private, "", public ] }, - { symbol: ["ENODATA", private, "", public ] }, - { symbol: ["ENODEV", private, "", public ] }, - { symbol: ["ENOENT", private, "", public ] }, - { symbol: ["ENOEXEC", private, "", public ] }, - { symbol: ["ENOLCK", private, "", public ] }, - { symbol: ["ENOLINK", private, "", public ] }, - { symbol: ["ENOMEM", private, "", public ] }, - { symbol: ["ENOMSG", private, "", public ] }, - { symbol: ["ENOPROTOOPT", private, "", public ] }, - { symbol: ["ENOSPC", private, "", public ] }, - { symbol: ["ENOSR", private, "", public ] }, - { symbol: ["ENOSTR", private, "", public ] }, - { symbol: ["ENOSYS", private, "", public ] }, - { symbol: ["ENOTCONN", private, "", public ] }, - { symbol: ["ENOTDIR", private, "", public ] }, - { symbol: ["ENOTEMPTY", private, "", public ] }, - { symbol: ["ENOTRECOVERABLE", private, "", public ] }, - { symbol: ["ENOTSOCK", private, "", public ] }, - { symbol: ["ENOTSUP", private, "", public ] }, - { symbol: ["ENOTTY", private, "", public ] }, - { symbol: ["ENXIO", private, "", public ] }, - { symbol: ["EOPNOTSUPP", private, "", public ] }, - { symbol: ["EOVERFLOW", private, "", public ] }, - { symbol: ["EOWNERDEAD", private, "", public ] }, - { symbol: ["EPERM", private, "", public ] }, - { symbol: ["EPIPE", private, "", public ] }, - { symbol: ["EPROTO", private, "", public ] }, - { symbol: ["EPROTONOSUPPORT", private, "", public ] }, - { symbol: ["EPROTOTYPE", private, "", public ] }, - { symbol: ["ERANGE", private, "", public ] }, - { symbol: ["EROFS", private, "", public ] }, - { symbol: ["ESPIPE", private, "", public ] }, - { symbol: ["ESRCH", private, "", public ] }, - { symbol: ["ESTALE", private, "", public ] }, - { symbol: ["ETIME", private, "", public ] }, - { symbol: ["ETIMEDOUT", private, "", public ] }, - { symbol: ["ETXTBSY", private, "", public ] }, - { symbol: ["EWOULDBLOCK", private, "", public ] }, - { symbol: ["EXDEV", private, "", public ] }, - - # limits.h - { symbol: ["SSIZE_MAX", private, "", public ] }, - - # signal.h - { symbol: [ "sigset_t", private, "", public ] }, - - # sys/socket.h - { symbol: [ "iovec", private, "", public ] }, - { symbol: ["SOCK_STREAM", private, "", public ] }, - - # termios.h { include: [ "", private, "", public ] }, { include: [ "", private, "", public ] }, + { include: [ "", private, "", public ] }, + { include: [ "", private, "", public ] }, + { include: [ "", private, "", public ] }, + { include: [ "", private, "", public ] }, + { include: [ '', private, '', public ] }, + { include: [ '', private, '', public ] }, { include: [ '', private, '', public ] }, { include: [ '', private, '', public ] }, { include: [ '', private, '', public ] }, { include: [ '', private, '', public ] }, + { include: [ '', private, '', public ] }, - # ", public ] }, + { symbol: ["SSIZE_MAX", private, "", public ] }, + { symbol: ["S_IREAD", private, "", public ] }, + { symbol: ["S_IWRITE", private, "", public ] }, { symbol: ["_POSIX_VDISABLE", private, "", public ] }, + { symbol: ["flock", private, "", public ] }, + { symbol: ["iovec", private, "", public ] }, + { symbol: ["mode_t", private, "", public ] }, + { symbol: ["ntohs", private, "", public ] }, + { symbol: ["pthread_sigmask", private, "", public ] }, + { symbol: ["sigset_t", private, "", public ] }, + { symbol: ["ssize_t", private, "", public ] }, + { symbol: ["uid_t", private, "", public ] }, ] # vim: set ft=toml: diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index 59af5e3818..3505f8be4f 100644 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -259,6 +259,7 @@ if(ENABLE_IWYU) set(iwyu_flags "${IWYU_PRG};") string(APPEND iwyu_flags "-Xiwyu;--no_default_mappings;") + string(APPEND iwyu_flags "-Xiwyu;--no_fwd_decls;") string(APPEND iwyu_flags "-Xiwyu;--mapping_file=${PROJECT_SOURCE_DIR}/cmake.config/iwyu/mapping.imp") set_target_properties(nvim PROPERTIES C_INCLUDE_WHAT_YOU_USE "${iwyu_flags}") diff --git a/src/nvim/base64.c b/src/nvim/base64.c index 5bc0c34f06..295dedd8d3 100644 --- a/src/nvim/base64.c +++ b/src/nvim/base64.c @@ -3,7 +3,7 @@ #include #include -#include "auto/config.h" +#include "auto/config.h" // IWYU pragma: keep #include "nvim/base64.h" #include "nvim/memory.h" diff --git a/src/nvim/buffer_defs.h b/src/nvim/buffer_defs.h index 803d2aa0c6..0e7e5723cd 100644 --- a/src/nvim/buffer_defs.h +++ b/src/nvim/buffer_defs.h @@ -4,7 +4,7 @@ #include #include -typedef struct file_buffer buf_T; // Forward declaration +typedef struct file_buffer buf_T; /// Reference to a buffer that stores the value of buf_free_count. /// bufref_valid() only needs to check "buf" when the count differs. diff --git a/src/nvim/cmdexpand.c b/src/nvim/cmdexpand.c index 7a6cc02cb8..58ec3d31bf 100644 --- a/src/nvim/cmdexpand.c +++ b/src/nvim/cmdexpand.c @@ -6,6 +6,7 @@ #include #include #include +#include #include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" diff --git a/src/nvim/edit.c b/src/nvim/edit.c index 7b21cc5bdb..23a246dcf5 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -9,6 +9,7 @@ #include "nvim/ascii.h" #include "nvim/autocmd.h" +#include "nvim/autocmd_defs.h" #include "nvim/buffer.h" #include "nvim/change.h" #include "nvim/charset.h" diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 52ab610267..d48e126229 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -7,6 +7,7 @@ #include #include #include +#include #include "auto/config.h" #include "nvim/api/private/converter.h" diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c index e8ed6e5d32..936e043b6a 100644 --- a/src/nvim/eval/typval.c +++ b/src/nvim/eval/typval.c @@ -5,6 +5,7 @@ #include #include #include +#include #include "nvim/ascii.h" #include "nvim/assert.h" diff --git a/src/nvim/event/rstream.c b/src/nvim/event/rstream.c index 218293e44a..7745cd8fcc 100644 --- a/src/nvim/event/rstream.c +++ b/src/nvim/event/rstream.c @@ -2,7 +2,7 @@ #include #include #include -#include +#include #include #include "nvim/event/loop.h" diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index 373dd8cd96..12aeb509fb 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -9,6 +9,7 @@ #include #include #include +#include #include "auto/config.h" #include "nvim/arglist.h" diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c index 6de6f01a52..dcc1b8eea5 100644 --- a/src/nvim/fileio.c +++ b/src/nvim/fileio.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include diff --git a/src/nvim/keycodes.c b/src/nvim/keycodes.c index e2fb1fa3ee..aa61b40476 100644 --- a/src/nvim/keycodes.c +++ b/src/nvim/keycodes.c @@ -4,6 +4,7 @@ #include #include #include +#include #include "nvim/ascii.h" #include "nvim/charset.h" diff --git a/src/nvim/lua/stdlib.c b/src/nvim/lua/stdlib.c index c1e0af5aa1..a200b0a32f 100644 --- a/src/nvim/lua/stdlib.c +++ b/src/nvim/lua/stdlib.c @@ -5,8 +5,8 @@ #include #include #include -#include #include +#include #ifdef NVIM_VENDOR_BIT # include "bit.h" diff --git a/src/nvim/main.c b/src/nvim/main.c index c5ab9f0cb2..68659d8a54 100644 --- a/src/nvim/main.c +++ b/src/nvim/main.c @@ -21,6 +21,11 @@ #include "nvim/vim.h" // uncrustify:on +#include "auto/config.h" // IWYU pragma: keep +#include "nvim/api/extmark.h" +#include "nvim/api/private/defs.h" +#include "nvim/api/private/helpers.h" +#include "nvim/api/ui.h" #include "nvim/arglist.h" #include "nvim/ascii.h" #include "nvim/autocmd.h" @@ -34,7 +39,9 @@ #include "nvim/eval.h" #include "nvim/eval/typval.h" #include "nvim/eval/userfunc.h" +#include "nvim/event/loop.h" #include "nvim/event/multiqueue.h" +#include "nvim/event/process.h" #include "nvim/event/stream.h" #include "nvim/ex_cmds.h" #include "nvim/ex_docmd.h" @@ -61,6 +68,9 @@ #include "nvim/message.h" #include "nvim/mouse.h" #include "nvim/move.h" +#include "nvim/msgpack_rpc/channel.h" +#include "nvim/msgpack_rpc/helpers.h" +#include "nvim/msgpack_rpc/server.h" #include "nvim/normal.h" #include "nvim/ops.h" #include "nvim/option.h" @@ -71,6 +81,7 @@ #include "nvim/os/input.h" #include "nvim/os/lang.h" #include "nvim/os/os.h" +#include "nvim/os/signal.h" #include "nvim/os/stdpaths_defs.h" #include "nvim/path.h" #include "nvim/popupmenu.h" @@ -91,16 +102,6 @@ #ifdef MSWIN # include "nvim/os/os_win_console.h" #endif -#include "nvim/api/extmark.h" -#include "nvim/api/private/defs.h" -#include "nvim/api/private/helpers.h" -#include "nvim/api/ui.h" -#include "nvim/event/loop.h" -#include "nvim/event/process.h" -#include "nvim/msgpack_rpc/channel.h" -#include "nvim/msgpack_rpc/helpers.h" -#include "nvim/msgpack_rpc/server.h" -#include "nvim/os/signal.h" // values for "window_layout" enum { diff --git a/src/nvim/marktree.c b/src/nvim/marktree.c index 6f6a91eae0..cffeb077f8 100644 --- a/src/nvim/marktree.c +++ b/src/nvim/marktree.c @@ -47,6 +47,7 @@ #include #include #include +#include #include "klib/kvec.h" #include "nvim/garray.h" diff --git a/src/nvim/mbyte.c b/src/nvim/mbyte.c index 1151e80e4c..a2c0e70d77 100644 --- a/src/nvim/mbyte.c +++ b/src/nvim/mbyte.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include "auto/config.h" diff --git a/src/nvim/memline.c b/src/nvim/memline.c index ea7a61b8dd..f9169030a6 100644 --- a/src/nvim/memline.c +++ b/src/nvim/memline.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include diff --git a/src/nvim/message.c b/src/nvim/message.c index 032f079f46..641ceff2e8 100644 --- a/src/nvim/message.c +++ b/src/nvim/message.c @@ -8,6 +8,7 @@ #include #include #include +#include #include "nvim/api/private/helpers.h" #include "nvim/ascii.h" diff --git a/src/nvim/ops.c b/src/nvim/ops.c index c6f7c74d6b..1144829a17 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -9,6 +9,7 @@ #include #include #include +#include #include "nvim/api/private/defs.h" #include "nvim/ascii.h" diff --git a/src/nvim/os/fileio.c b/src/nvim/os/fileio.c index b205481e98..55c12f2986 100644 --- a/src/nvim/os/fileio.c +++ b/src/nvim/os/fileio.c @@ -28,6 +28,10 @@ # include "nvim/os/os_win_console.h" #endif +#ifdef HAVE_SYS_UIO_H +# include +#endif + #ifdef INCLUDE_GENERATED_DECLARATIONS # include "os/fileio.c.generated.h" #endif diff --git a/src/nvim/os/fs.c b/src/nvim/os/fs.c index b9448ddf4b..4721bc3f1c 100644 --- a/src/nvim/os/fs.c +++ b/src/nvim/os/fs.c @@ -67,8 +67,6 @@ static const char e_xattr_other[] = N_("E1509: Error occurred when reading or writing extended attribute"); #endif -struct iovec; - #define RUN_UV_FS_FUNC(ret, func, ...) \ do { \ uv_fs_t req; \ diff --git a/src/nvim/os/process.c b/src/nvim/os/process.c index 889d1f453f..7b47ba7020 100644 --- a/src/nvim/os/process.c +++ b/src/nvim/os/process.c @@ -3,18 +3,19 @@ /// psutil is a good reference for cross-platform syscall voodoo: /// https://github.com/giampaolo/psutil/tree/master/psutil/arch +// IWYU pragma: no_include + #include #include #include #include -#include #include #ifdef MSWIN # include #endif -#if defined(__FreeBSD__) // XXX: OpenBSD ? +#if defined(__FreeBSD__) # include # include # include @@ -25,8 +26,13 @@ #endif #if defined(__APPLE__) || defined(BSD) -# include # include + +# include "nvim/macros.h" +#endif + +#if defined(__linux__) +# include #endif #include "nvim/log.h" diff --git a/src/nvim/os/signal.c b/src/nvim/os/signal.c index e73a579a27..3a861b87b4 100644 --- a/src/nvim/os/signal.c +++ b/src/nvim/os/signal.c @@ -1,6 +1,7 @@ #include #include #include + #ifndef MSWIN # include #endif @@ -11,9 +12,12 @@ #include "nvim/globals.h" #include "nvim/log.h" #include "nvim/main.h" -#include "nvim/memline.h" #include "nvim/os/signal.h" +#ifdef SIGPWR +# include "nvim/memline.h" +#endif + static SignalWatcher spipe, shup, squit, sterm, susr1, swinch; #ifdef SIGPWR static SignalWatcher spwr; diff --git a/src/nvim/os/time.c b/src/nvim/os/time.c index 8aa3170963..be95412c01 100644 --- a/src/nvim/os/time.c +++ b/src/nvim/os/time.c @@ -17,8 +17,6 @@ #include "nvim/os/os.h" #include "nvim/os/time.h" -struct tm; - #ifdef INCLUDE_GENERATED_DECLARATIONS # include "os/time.c.generated.h" // IWYU pragma: export #endif diff --git a/src/nvim/os/unix_defs.h b/src/nvim/os/unix_defs.h index fe5dce5655..d2bec7b361 100644 --- a/src/nvim/os/unix_defs.h +++ b/src/nvim/os/unix_defs.h @@ -1,15 +1,18 @@ #pragma once // IWYU pragma: private, include "nvim/os/os_defs.h" -#include // IWYU pragma: export -#include // IWYU pragma: export -#include // IWYU pragma: export +// IWYU pragma: begin_exports +#include +#include +#include +#include +#include +#include +#include #if defined(HAVE_TERMIOS_H) -# include // IWYU pragma: export +# include #endif - -// POSIX.1-2008 says that NAME_MAX should be in here -#include +// IWYU pragma: end_exports #define TEMP_DIR_NAMES { "$TMPDIR", "/tmp", ".", "~" } #define TEMP_FILE_PATH_MAXLEN 256 diff --git a/src/nvim/ui_compositor.c b/src/nvim/ui_compositor.c index b1751f32fd..b243e1088b 100644 --- a/src/nvim/ui_compositor.c +++ b/src/nvim/ui_compositor.c @@ -7,9 +7,9 @@ #include #include #include -#include #include #include +#include #include "klib/kvec.h" #include "nvim/api/private/defs.h" diff --git a/src/nvim/undo.c b/src/nvim/undo.c index 15577931f3..288b23f56c 100644 --- a/src/nvim/undo.c +++ b/src/nvim/undo.c @@ -77,6 +77,7 @@ #include #include #include +#include #include #include