refactor(IWYU): move UI and LineFlags to ui_defs.h (#26318)

This commit is contained in:
zeertzjq 2023-11-30 17:16:57 +08:00 committed by GitHub
parent 543e0256c1
commit ce56e0a845
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 134 additions and 140 deletions

View File

@ -143,14 +143,10 @@ iwyu: build/.ran-cmake
cmake --build build > build/iwyu.log
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/extmark.h\
|src/nvim/api/private/dispatch.h\
|src/nvim/api/private/helpers.h\
|src/nvim/api/private/validate.h\
|src/nvim/api/ui.h\
|src/nvim/ascii_defs.h\
|src/nvim/assert_defs.h\
|src/nvim/autocmd.h\
|src/nvim/autocmd_defs.h\
|src/nvim/buffer.h\
|src/nvim/buffer_defs.h\
|src/nvim/channel.h\
@ -178,7 +174,6 @@ iwyu: build/.ran-cmake
|src/nvim/event/time.h\
|src/nvim/event/wstream.h\
|src/nvim/ex_cmds.h\
|src/nvim/ex_cmds_defs.h\
|src/nvim/ex_docmd.h\
|src/nvim/extmark.h\
|src/nvim/file_search.h\
@ -217,10 +212,7 @@ iwyu: build/.ran-cmake
|src/nvim/syntax.h\
|src/nvim/textobject.h\
|src/nvim/tui/input.h\
|src/nvim/tui/tui.h\
|src/nvim/ui.h\
|src/nvim/ui_client.h\
|src/nvim/ui_compositor.h\
|src/nvim/viml/parser/expressions.h\
|src/nvim/viml/parser/parser.h\
|src/nvim/window.h\

View File

@ -898,14 +898,10 @@ def CheckIncludes(filename, lines, error):
# the Makefile.
check_includes_ignore = [
"src/nvim/api/extmark.h",
"src/nvim/api/private/dispatch.h",
"src/nvim/api/private/helpers.h",
"src/nvim/api/private/validate.h",
"src/nvim/api/ui.h",
"src/nvim/ascii_defs.h",
"src/nvim/assert_defs.h",
"src/nvim/autocmd.h",
"src/nvim/autocmd_defs.h",
"src/nvim/buffer.h",
"src/nvim/buffer_defs.h",
"src/nvim/channel.h",
@ -933,7 +929,6 @@ def CheckIncludes(filename, lines, error):
"src/nvim/event/time.h",
"src/nvim/event/wstream.h",
"src/nvim/ex_cmds.h",
"src/nvim/ex_cmds_defs.h",
"src/nvim/ex_docmd.h",
"src/nvim/extmark.h",
"src/nvim/file_search.h",
@ -972,10 +967,7 @@ def CheckIncludes(filename, lines, error):
"src/nvim/syntax.h",
"src/nvim/textobject.h",
"src/nvim/tui/input.h",
"src/nvim/tui/tui.h",
"src/nvim/ui.h",
"src/nvim/ui_client.h",
"src/nvim/ui_compositor.h",
"src/nvim/viml/parser/expressions.h",
"src/nvim/viml/parser/parser.h",
"src/nvim/window.h",
@ -999,8 +991,10 @@ def CheckIncludes(filename, lines, error):
if name in skip_headers:
continue
if (not name.endswith('.h.generated.h') and
not name.endswith('/defs.h') and
not name.endswith('_defs.h') and
not name.endswith('/defs.h')):
not name.endswith('_defs.generated.h') and
not name.endswith('_enum.generated.h')):
error(filename, i, 'build/include_defs', 5,
'Headers should not include non-"_defs" headers')

View File

@ -14,12 +14,12 @@ typedef Object (*ApiDispatchWrapper)(uint64_t channel_id, Array args, Arena *are
struct MsgpackRpcRequestHandler {
const char *name;
ApiDispatchWrapper fn;
bool fast; // Function is safe to be executed immediately while running the
// uv loop (the loop is run very frequently due to breakcheck).
// If "fast" is false, the function is deferred, i e the call will
// be put in the event queue, for safe handling later.
bool arena_return; // return value is allocated in the arena (or statically)
// and should not be freed as such.
bool fast; ///< Function is safe to be executed immediately while running the
///< uv loop (the loop is run very frequently due to breakcheck).
///< If "fast" is false, the function is deferred, i e the call will
///< be put in the event queue, for safe handling later.
bool arena_return; ///< return value is allocated in the arena (or statically)
///< and should not be freed as such.
};
extern const MsgpackRpcRequestHandler method_handlers[];

View File

@ -4,9 +4,8 @@
#include "nvim/api/private/defs.h" // IWYU pragma: keep
#include "nvim/highlight_defs.h" // IWYU pragma: keep
#include "nvim/map_defs.h"
#include "nvim/types_defs.h" // IWYU pragma: keep
#include "nvim/ui.h"
#include "nvim/ui_defs.h" // IWYU pragma: keep
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "api/ui.h.generated.h"

View File

@ -14,9 +14,11 @@
// actual Decor* data is in decoration_defs.h
EXTERN const char *const virt_text_pos_str[] INIT( = { "eol", "overlay", "win_col", "right_align",
"inline" });
/// Keep in sync with VirtTextPos in decoration_defs.h
EXTERN const char *const virt_text_pos_str[]
INIT( = { "eol", "overlay", "win_col", "right_align", "inline" });
/// Keep in sync with HlMode in decoration_defs.h
EXTERN const char *const hl_mode_str[] INIT( = { "", "replace", "combine", "blend" });
typedef enum {
@ -43,8 +45,8 @@ typedef struct {
VirtTextPos pos;
} ui;
} data;
int attr_id; // cached lookup of inl.hl_id if it was a highlight
bool owned; // ephemeral decoration, free memory immediately
int attr_id; ///< cached lookup of inl.hl_id if it was a highlight
bool owned; ///< ephemeral decoration, free memory immediately
DecorPriority priority;
DecorRangeKind kind;
/// Screen column to draw the virtual text.

View File

@ -15,6 +15,7 @@ typedef struct {
typedef kvec_t(VirtTextChunk) VirtText;
#define VIRTTEXT_EMPTY ((VirtText)KV_INITIAL_VALUE)
/// Keep in sync with virt_text_pos_str[] in decoration.h
typedef enum {
kVPosEndOfLine,
kVPosOverlay,
@ -28,6 +29,7 @@ typedef kvec_t(struct virt_line { VirtText line; bool left_col; }) VirtLines;
typedef uint16_t DecorPriority;
#define DECOR_PRIORITY_BASE 0x1000
/// Keep in sync with hl_mode_str[] in decoration.h
typedef enum {
kHlModeUnknown,
kHlModeReplace,

View File

@ -7,7 +7,7 @@
#include "nvim/buffer_defs.h" // IWYU pragma: keep
#include "nvim/highlight_defs.h" // IWYU pragma: export
#include "nvim/option_vars.h"
#include "nvim/ui.h"
#include "nvim/ui_defs.h" // IWYU pragma: keep
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "highlight.h.generated.h"

View File

@ -15,10 +15,11 @@
#include "nvim/spell.h"
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "lua/spell.c.generated.h" // IWYU pragma: export
# include "lua/spell.c.generated.h"
#endif
int nlua_spell_check(lua_State *lstate)
FUNC_ATTR_NONNULL_ALL
{
if (lua_gettop(lstate) < 1) {
return luaL_error(lstate, "Expected 1 argument");
@ -99,6 +100,7 @@ static const luaL_Reg spell_functions[] = {
};
int luaopen_spell(lua_State *L)
FUNC_ATTR_NONNULL_ALL
{
lua_newtable(L);
luaL_register(L, NULL, spell_functions);

View File

@ -34,8 +34,8 @@
#include "nvim/tui/tui.h"
#include "nvim/types_defs.h"
#include "nvim/ugrid.h"
#include "nvim/ui.h"
#include "nvim/ui_client.h"
#include "nvim/ui_defs.h"
#ifdef MSWIN
# include "nvim/os/os_win_console.h"

View File

@ -3,7 +3,7 @@
#include "nvim/api/private/defs.h" // IWYU pragma: keep
#include "nvim/highlight_defs.h" // IWYU pragma: keep
#include "nvim/types_defs.h" // IWYU pragma: keep
#include "nvim/ui.h"
#include "nvim/ui_defs.h" // IWYU pragma: keep
typedef struct TUIData TUIData;

View File

@ -1,7 +1,6 @@
#include <assert.h>
#include <limits.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
@ -37,6 +36,11 @@
#include "nvim/window.h"
#include "nvim/winfloat.h"
typedef struct ui_event_callback {
LuaRef cb;
bool ext_widgets[kUIGlobalCount];
} UIEventCallback;
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "ui.c.generated.h"
#endif
@ -692,7 +696,7 @@ void ui_call_event(char *name, Array args)
ui_log(name);
}
void ui_cb_update_ext(void)
static void ui_cb_update_ext(void)
{
memset(ui_cb_ext, 0, ARRAY_SIZE(ui_cb_ext));
@ -708,7 +712,7 @@ void ui_cb_update_ext(void)
}
}
void free_ui_event_callback(UIEventCallback *event_cb)
static void free_ui_event_callback(UIEventCallback *event_cb)
{
api_free_luaref(event_cb->cb);
xfree(event_cb);

View File

@ -1,34 +1,16 @@
#pragma once
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdint.h> // IWYU pragma: keep
#include "nvim/api/private/defs.h"
#include "nvim/api/private/defs.h" // IWYU pragma: keep
#include "nvim/event/multiqueue.h"
#include "nvim/globals.h"
#include "nvim/highlight_defs.h"
#include "nvim/grid_defs.h" // IWYU pragma: keep
#include "nvim/highlight_defs.h" // IWYU pragma: keep
#include "nvim/macros_defs.h"
#include "nvim/memory.h"
#include "nvim/types_defs.h"
struct ui_t;
typedef enum {
kUICmdline = 0,
kUIPopupmenu,
kUITabline,
kUIWildmenu,
kUIMessages,
#define kUIGlobalCount kUILinegrid
kUILinegrid,
kUIMultigrid,
kUIHlState,
kUITermColors,
kUIFloatDebug,
kUIExtCount,
} UIExtension;
#include "nvim/types_defs.h" // IWYU pragma: keep
#include "nvim/ui_defs.h" // IWYU pragma: export
/// Keep in sync with UIExtension in ui_defs.h
EXTERN const char *ui_ext_names[] INIT( = {
"ext_cmdline",
"ext_popupmenu",
@ -42,83 +24,6 @@ EXTERN const char *ui_ext_names[] INIT( = {
"_debug_float",
});
typedef struct ui_t UI;
enum {
kLineFlagWrap = 1,
kLineFlagInvalid = 2,
};
typedef int LineFlags;
typedef struct {
uint64_t channel_id;
#define UI_BUF_SIZE 4096 ///< total buffer size for pending msgpack data.
/// guaranteed size available for each new event (so packing of simple events
/// and the header of grid_line will never fail)
#define EVENT_BUF_SIZE 256
char buf[UI_BUF_SIZE]; ///< buffer of packed but not yet sent msgpack data
char *buf_wptr; ///< write head of buffer
const char *cur_event; ///< name of current event (might get multiple arglists)
Array call_buf; ///< buffer for constructing a single arg list (max 16 elements!)
// state for write_cb, while packing a single arglist to msgpack. This
// might fail due to buffer overflow.
size_t pack_totlen;
bool buf_overflow;
char *temp_buf;
// We start packing the two outermost msgpack arrays before knowing the total
// number of elements. Thus track the location where array size will need
// to be written in the msgpack buffer, once the specific array is finished.
char *nevents_pos;
char *ncalls_pos;
uint32_t nevents; ///< number of distinct events (top-level args to "redraw"
uint32_t ncalls; ///< number of calls made to the current event (plus one for the name!)
bool flushed_events; ///< events where sent to client without "flush" event
size_t ncells_pending; ///< total number of cells since last buffer flush
int hl_id; // Current highlight for legacy put event.
Integer cursor_row, cursor_col; // Intended visible cursor position.
// Position of legacy cursor, used both for drawing and visible user cursor.
Integer client_row, client_col;
bool wildmenu_active;
} UIData;
struct ui_t {
bool rgb;
bool override; ///< Force highest-requested UI capabilities.
bool composed;
bool ui_ext[kUIExtCount]; ///< Externalized UI capabilities.
int width;
int height;
int pum_nlines; /// actual nr. lines shown in PUM
bool pum_pos; /// UI reports back pum position?
double pum_row;
double pum_col;
double pum_height;
double pum_width;
// TUI fields.
char *term_name;
char *term_background; ///< Deprecated. No longer needed since background color detection happens
///< in Lua. To be removed in a future release.
int term_colors;
bool stdin_tty;
bool stdout_tty;
// TODO(bfredl): integrate into struct!
UIData data[1];
};
typedef struct ui_event_callback {
LuaRef cb;
bool ext_widgets[kUIGlobalCount];
} UIEventCallback;
// uncrustify:off
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "ui.h.generated.h"

View File

@ -1,10 +1,9 @@
#pragma once
#include "nvim/api/private/defs.h" // IWYU pragma: keep
#include "nvim/event/defs.h"
#include "nvim/grid_defs.h" // IWYU pragma: keep
#include "nvim/types_defs.h" // IWYU pragma: keep
#include "nvim/ui.h"
#include "nvim/ui_defs.h" // IWYU pragma: keep
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "ui_compositor.h.generated.h"

95
src/nvim/ui_defs.h Normal file
View File

@ -0,0 +1,95 @@
#pragma once
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include "nvim/api/private/defs.h"
/// Keep in sync with ui_ext_names[] in ui.h
typedef enum {
kUICmdline = 0,
kUIPopupmenu,
kUITabline,
kUIWildmenu,
kUIMessages,
#define kUIGlobalCount kUILinegrid
kUILinegrid,
kUIMultigrid,
kUIHlState,
kUITermColors,
kUIFloatDebug,
kUIExtCount,
} UIExtension;
enum {
kLineFlagWrap = 1,
kLineFlagInvalid = 2,
};
typedef int LineFlags;
typedef struct ui_t UI;
typedef struct {
uint64_t channel_id;
#define UI_BUF_SIZE 4096 ///< total buffer size for pending msgpack data.
/// guaranteed size available for each new event (so packing of simple events
/// and the header of grid_line will never fail)
#define EVENT_BUF_SIZE 256
char buf[UI_BUF_SIZE]; ///< buffer of packed but not yet sent msgpack data
char *buf_wptr; ///< write head of buffer
const char *cur_event; ///< name of current event (might get multiple arglists)
Array call_buf; ///< buffer for constructing a single arg list (max 16 elements!)
// state for write_cb, while packing a single arglist to msgpack. This
// might fail due to buffer overflow.
size_t pack_totlen;
bool buf_overflow;
char *temp_buf;
// We start packing the two outermost msgpack arrays before knowing the total
// number of elements. Thus track the location where array size will need
// to be written in the msgpack buffer, once the specific array is finished.
char *nevents_pos;
char *ncalls_pos;
uint32_t nevents; ///< number of distinct events (top-level args to "redraw"
uint32_t ncalls; ///< number of calls made to the current event (plus one for the name!)
bool flushed_events; ///< events where sent to client without "flush" event
size_t ncells_pending; ///< total number of cells since last buffer flush
int hl_id; // Current highlight for legacy put event.
Integer cursor_row, cursor_col; // Intended visible cursor position.
// Position of legacy cursor, used both for drawing and visible user cursor.
Integer client_row, client_col;
bool wildmenu_active;
} UIData;
struct ui_t {
bool rgb;
bool override; ///< Force highest-requested UI capabilities.
bool composed;
bool ui_ext[kUIExtCount]; ///< Externalized UI capabilities.
int width;
int height;
int pum_nlines; /// actual nr. lines shown in PUM
bool pum_pos; /// UI reports back pum position?
double pum_row;
double pum_col;
double pum_height;
double pum_width;
// TUI fields.
char *term_name;
char *term_background; ///< Deprecated. No longer needed since background color detection happens
///< in Lua. To be removed in a future release.
int term_colors;
bool stdin_tty;
bool stdout_tty;
// TODO(bfredl): integrate into struct!
UIData data[1];
};