diff --git a/MAINTAIN.md b/MAINTAIN.md index 4447103477..842c76a815 100644 --- a/MAINTAIN.md +++ b/MAINTAIN.md @@ -246,8 +246,8 @@ Multiple Vim versions are tracked in `version.c`, so that `has('patch-x.y.z')` works even if `v:version` is "behind". Whenever we "complete" merging all patches from a Vim `v:version`, the steps to bump `v:version` are: -1. Remove the fully-merged version from `version.c:Versions`. -2. Adjust the regexp in `vim-patch.sh`. For example to remove 8.1: +1. Remove the fully-merged version from `vim-patch.sh` by adjusting the regexp. + For example, to remove version "8.1": ```diff diff --git a/scripts/vim-patch.sh b/scripts/vim-patch.sh index d64f6b6..1d3dcdf 100755 @@ -263,7 +263,7 @@ patches from a Vim `v:version`, the steps to bump `v:version` are: git -C "${NVIM_SOURCE_DIR}" log --format="%s%n%b" -E --grep="^[* ]*vim-patch:${patch_pat}" | grep -oE "^[* ]*vim-patch:${patch_pat}" | ``` -3. Run `nvim -l scripts/vimpatch.lua` to regenerate `version.c`. Or wait for the +2. Run `nvim -l scripts/vimpatch.lua` to regenerate `version.c`. Or wait for the `vim_patches.yml` CI job to do it. diff --git a/runtime/doc/api.txt b/runtime/doc/api.txt index 24bf3eb96d..ef6e6a95fc 100644 --- a/runtime/doc/api.txt +++ b/runtime/doc/api.txt @@ -282,9 +282,9 @@ nvim_buf_lines_event[{buf}, {changedtick}, {firstline}, {lastline}, {linedata}, part of your request to ensure that no other changes have been made. {firstline} integer line number of the first line that was replaced. - Zero-indexed: if line 1 was replaced then {firstline} will be 0, not - 1. {firstline} is always less than or equal to the number of lines - that were in the buffer before the lines were replaced. + Zero-indexed: if line 1 was replaced then {firstline} will be zero, + not one. {firstline} is always less than or equal to the number of + lines that were in the buffer before the lines were replaced. {lastline} integer line number of the first line that was not replaced (i.e. the range {firstline}, {lastline} is end-exclusive). @@ -745,22 +745,33 @@ nvim_eval_statusline({str}, {opts}) *nvim_eval_statusline()* priority last). nvim_exec_lua({code}, {args}) *nvim_exec_lua()* - Execute Lua code. Parameters (if any) are available as `...` inside the - chunk. The chunk can return a value. + Executes Lua code. Arguments are available as `...` inside the chunk. The + chunk can return a value. Only statements are executed. To evaluate an expression, prefix it with - `return`: return my_function(...) + "return": `return my_function(...)` + + Example: >lua + local peer = vim.fn.jobstart({ vim.v.progpath, '--clean', '--embed' }, { rpc=true }) + vim.print(vim.rpcrequest(peer, 'nvim_exec_lua', [[ + local a, b = ... + return ('result: %s'):format(a + b) + ]], + { 1, 3 } + ) + ) +< Attributes: ~ |RPC| only Since: 0.5.0 Parameters: ~ - • {code} (`string`) Lua code to execute - • {args} (`any[]`) Arguments to the code + • {code} (`string`) Lua code to execute. + • {args} (`any[]`) Arguments to the Lua code. Return: ~ - (`any`) Return value of Lua code if present or NIL. + (`any`) Value returned by the Lua code (if any), or NIL. nvim_feedkeys({keys}, {mode}, {escape_ks}) *nvim_feedkeys()* Sends input-keys to Nvim, subject to various quirks controlled by `mode` diff --git a/runtime/doc/lua.txt b/runtime/doc/lua.txt index 2cc98bd420..57c590cda1 100644 --- a/runtime/doc/lua.txt +++ b/runtime/doc/lua.txt @@ -703,11 +703,12 @@ vim.rpcnotify({channel}, {method}, {...}) *vim.rpcnotify()* • {...} (`any?`) vim.rpcrequest({channel}, {method}, {...}) *vim.rpcrequest()* - Sends a request to {channel} to invoke {method} via |RPC| and blocks until - a response is received. + Invokes |RPC| `method` on `channel` and blocks until a response is + received. - Note: NIL values as part of the return value is represented as |vim.NIL| - special value + Note: Msgpack NIL values in the response are represented as |vim.NIL|. + + Example: see |nvim_exec_lua()| Parameters: ~ • {channel} (`integer`) @@ -2091,6 +2092,9 @@ vim.tbl_get({o}, {...}) *vim.tbl_get()* Return: ~ (`any`) Nested value indexed by key (if it exists), else nil + See also: ~ + • |unpack()| + vim.tbl_isempty({t}) *vim.tbl_isempty()* Checks if a table is empty. diff --git a/runtime/doc/luaref.txt b/runtime/doc/luaref.txt index 1e25d3c81a..51f7b776ac 100644 --- a/runtime/doc/luaref.txt +++ b/runtime/doc/luaref.txt @@ -3947,7 +3947,7 @@ package.path *package.path* files `./foo.lua`, `./foo.lc`, and `/usr/local/foo/init.lua`, in that order. -package.preload *package.preload()* +package.preload *package.preload* A table to store loaders for specific modules (see |require()|). package.seeall({module}) *package.seeall()* diff --git a/runtime/doc/pattern.txt b/runtime/doc/pattern.txt index fa8531a7ef..3f181fcbbb 100644 --- a/runtime/doc/pattern.txt +++ b/runtime/doc/pattern.txt @@ -345,10 +345,10 @@ For starters, read chapter 27 of the user manual |usr_27.txt|. */branch* */\&* 2. A branch is one or more concats, separated by "\&". It matches the last concat, but only if all the preceding concats also match at the same - position. Examples: + position. Examples: > "foobeep\&..." matches "foo" in "foobeep". ".*Peter\&.*Bob" matches in a line containing both "Peter" and "Bob" - +< branch ::= concat or concat \& concat or concat \& concat \& concat @@ -609,13 +609,13 @@ overview. */star* */\star* * (use \* when 'magic' is not set) Matches 0 or more of the preceding atom, as many as possible. - Example 'nomagic' matches ~ + Example 'nomagic' matches > a* a\* "", "a", "aa", "aaa", etc. .* \.\* anything, also an empty string, no end-of-line \_.* \_.\* everything up to the end of the buffer \_.*END \_.\*END everything up to and including the last "END" in the buffer - +< Exception: When "*" is used at the start of the pattern or just after "^" it matches the star character. diff --git a/runtime/doc/plugins.txt b/runtime/doc/plugins.txt index ebbb01e813..3b34a7ec16 100644 --- a/runtime/doc/plugins.txt +++ b/runtime/doc/plugins.txt @@ -15,8 +15,8 @@ available from the global `vim` module namespace. Some of the plugins are loaded by default while others are not loaded until requested by |:packadd|. ============================================================================== -Standard plugins ~ - *standard-plugin-list* +Standard plugins *standard-plugin-list* + Help-link Loaded Short description ~ |difftool| No Compares two directories or files side-by-side |editorconfig| Yes Detect and interpret editorconfig @@ -84,11 +84,26 @@ open({left}, {right}, {opt}) *difftool.open()* ============================================================================== Builtin plugin: editorconfig *editorconfig* -Nvim supports EditorConfig. When a file is opened, after running |ftplugin|s -and |FileType| autocommands, Nvim searches all parent directories of that file -for ".editorconfig" files, parses them, and applies any properties that match -the opened file. Think of it like 'modeline' for an entire (recursive) -directory. For more information see https://editorconfig.org/. +EditorConfig is like 'modeline' for an entire (recursive) directory. When a +file is opened, after running |ftplugin|s and |FileType| autocommands, the +EditorConfig feature searches all parent directories of that file for +`.editorconfig` files, parses them, and applies their properties. For more +information see https://editorconfig.org/. + +Example `.editorconfig` file: >ini + root = true + + [*] + charset = utf-8 + end_of_line = lf + indent_size = 4 + indent_style = space + max_line_length = 42 + trim_trailing_whitespace = true + + [*.{diff,md}] + trim_trailing_whitespace = false +< *g:editorconfig* *b:editorconfig* diff --git a/runtime/doc/usr_27.txt b/runtime/doc/usr_27.txt index e483b52896..687d5ca128 100644 --- a/runtime/doc/usr_27.txt +++ b/runtime/doc/usr_27.txt @@ -481,7 +481,7 @@ break. This will match at a line that ends in "one" and the next line starts with "two". To match "one two" as well, you need to match a space or a line -break. The item to use for it is "\_s": > +break. The item to use for it is `\_s`: > /one\_stwo @@ -501,10 +501,10 @@ Many other items can be made to match a line break by prepending "\_". For example: "\_." matches any character or a line break. Note: - "\_.*" matches everything until the end of the file. Be careful with + `\_.*` matches everything until the end of the file. Be careful with this, it can make a search command very slow. -Another example is "\_[]", a character range that includes a line break: > +Another example is `\_[]`, a character range that includes a line break: > /"\_[^"]*" diff --git a/runtime/lua/editorconfig.lua b/runtime/lua/editorconfig.lua index 725608b21e..12a1548ee7 100644 --- a/runtime/lua/editorconfig.lua +++ b/runtime/lua/editorconfig.lua @@ -1,9 +1,24 @@ --- @brief ---- Nvim supports EditorConfig. When a file is opened, after running |ftplugin|s ---- and |FileType| autocommands, Nvim searches all parent directories of that file ---- for ".editorconfig" files, parses them, and applies any properties that match ---- the opened file. Think of it like 'modeline' for an entire (recursive) ---- directory. For more information see https://editorconfig.org/. +--- EditorConfig is like 'modeline' for an entire (recursive) directory. When a file is opened, +--- after running |ftplugin|s and |FileType| autocommands, the EditorConfig feature searches all +--- parent directories of that file for `.editorconfig` files, parses them, and applies their +--- properties. For more information see https://editorconfig.org/. +--- +--- Example `.editorconfig` file: +--- ```ini +--- root = true +--- +--- [*] +--- charset = utf-8 +--- end_of_line = lf +--- indent_size = 4 +--- indent_style = space +--- max_line_length = 42 +--- trim_trailing_whitespace = true +--- +--- [*.{diff,md}] +--- trim_trailing_whitespace = false +--- ``` --- @brief [g:editorconfig]() [b:editorconfig]() --- diff --git a/runtime/lua/vim/_meta/builtin.lua b/runtime/lua/vim/_meta/builtin.lua index 80524ab148..93e0e273b8 100644 --- a/runtime/lua/vim/_meta/builtin.lua +++ b/runtime/lua/vim/_meta/builtin.lua @@ -94,11 +94,12 @@ function vim.empty_dict() end --- @param ...? any function vim.rpcnotify(channel, method, ...) end ---- Sends a request to {channel} to invoke {method} via |RPC| and blocks until ---- a response is received. +--- Invokes |RPC| `method` on `channel` and blocks until a response is received. +--- +--- Note: Msgpack NIL values in the response are represented as |vim.NIL|. +--- +--- Example: see [nvim_exec_lua()] --- ---- Note: NIL values as part of the return value is represented as |vim.NIL| ---- special value --- @param channel integer --- @param method string --- @param ...? any diff --git a/runtime/lua/vim/lsp/health.lua b/runtime/lua/vim/lsp/health.lua index 17f2a81139..d84e27d13a 100644 --- a/runtime/lua/vim/lsp/health.lua +++ b/runtime/lua/vim/lsp/health.lua @@ -249,7 +249,9 @@ local function check_enabled_configs() ipairs(v --[[@as string[] ]]) do if not vim.list_contains(valid_filetypes, filetype) then - report_warn(("Unknown filetype '%s'."):format(filetype)) + report_warn( + ("Unknown filetype '%s' (Hint: filename extension != filetype)."):format(filetype) + ) end end end diff --git a/runtime/lua/vim/shared.lua b/runtime/lua/vim/shared.lua index b4827d0f54..8dfca25fb9 100644 --- a/runtime/lua/vim/shared.lua +++ b/runtime/lua/vim/shared.lua @@ -717,6 +717,7 @@ end --- vim.tbl_get({ key = { nested_key = true }}, 'key', 'nested_key') == true --- vim.tbl_get({ key = {}}, 'key', 'nested_key') == nil --- ``` +---@see |unpack()| --- ---@param o table Table to index ---@param ... any Optional keys (0 or more, variadic) via which to index the table diff --git a/src/clint.lua b/src/clint.lua index 836417ed3d..0f8a4e9f82 100755 --- a/src/clint.lua +++ b/src/clint.lua @@ -1193,7 +1193,7 @@ local function check_language(filename, clean_lines, linenum, error) -- Check for MAYBE if maybe_regex:match_str(line) then - error(filename, linenum, 'readability/bool', 4, 'Use kNONE from TriState instead of MAYBE.') + error(filename, linenum, 'readability/bool', 4, 'Use kNone from TriState instead of MAYBE.') end -- Detect preincrement/predecrement at start of line diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index 2c844dc767..9bc0013f27 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -497,18 +497,29 @@ String nvim_replace_termcodes(String str, Boolean from_part, Boolean do_lt, Bool return cstr_as_string(ptr); } -/// Execute Lua code. Parameters (if any) are available as `...` inside the -/// chunk. The chunk can return a value. +/// Executes Lua code. Arguments are available as `...` inside the chunk. The chunk can return +/// a value. /// -/// Only statements are executed. To evaluate an expression, prefix it -/// with `return`: return my_function(...) +/// Only statements are executed. To evaluate an expression, prefix it with "return": `return +/// my_function(...)` /// -/// @param code Lua code to execute -/// @param args Arguments to the code -/// @param[out] err Details of an error encountered while parsing -/// or executing the Lua code. +/// Example: +/// ```lua +/// local peer = vim.fn.jobstart({ vim.v.progpath, '--clean', '--embed' }, { rpc=true }) +/// vim.print(vim.rpcrequest(peer, 'nvim_exec_lua', [[ +/// local a, b = ... +/// return ('result: %s'):format(a + b) +/// ]], +/// { 1, 3 } +/// ) +/// ) +/// ``` /// -/// @return Return value of Lua code if present or NIL. +/// @param code Lua code to execute. +/// @param args Arguments to the Lua code. +/// @param[out] err Lua error raised while parsing or executing the Lua code. +/// +/// @return Value returned by the Lua code (if any), or NIL. Object nvim_exec_lua(String code, Array args, Arena *arena, Error *err) FUNC_API_SINCE(7) FUNC_API_REMOTE_ONLY diff --git a/src/nvim/drawline.c b/src/nvim/drawline.c index 0c9c874477..8d2140fcff 100644 --- a/src/nvim/drawline.c +++ b/src/nvim/drawline.c @@ -1668,7 +1668,8 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, b = !has_foldtext && buf_meta_total(wp->w_buffer, kMTMetaInline) > 0; int virt_line_index = -1; int virt_line_flags = 0; - // Repeat for the whole displayed line. + + // Repeat for each cell in the displayed line. while (true) { int has_match_conc = 0; ///< match wants to conceal int decor_conceal = 0; diff --git a/src/nvim/grid.c b/src/nvim/grid.c index 320f791b7b..3b9868265d 100644 --- a/src/nvim/grid.c +++ b/src/nvim/grid.c @@ -1084,14 +1084,15 @@ void grid_del_lines(ScreenGrid *grid, int row, int line_count, int end, int col, } } +/// @param overflow Number of cells to skip. static void grid_draw_bordertext(VirtText vt, int col, int winbl, const int *hl_attr, - BorderTextType bt, int over_flow) + BorderTextType bt, int overflow) { int default_attr = hl_attr[bt == kBorderTextTitle ? HLF_BTITLE : HLF_BFOOTER]; - if (over_flow > 0) { + if (overflow > 0) { grid_line_puts(1, "<", -1, hl_apply_winblend(winbl, default_attr)); col += 1; - over_flow += 1; + overflow += 1; } for (size_t i = 0; i < kv_size(vt);) { @@ -1104,18 +1105,17 @@ static void grid_draw_bordertext(VirtText vt, int col, int winbl, const int *hl_ attr = default_attr; } // Skip characters from the beginning when title overflows available width. - // over_flow contains the number of cells to skip. - if (over_flow > 0) { + if (overflow > 0) { int cells = (int)mb_string2cells(text); // Skip entire chunk if overflow is larger than chunk width. - if (over_flow >= cells) { - over_flow -= cells; + if (overflow >= cells) { + overflow -= cells; continue; } // Skip partial characters within the chunk. char *p = text; - while (*p && over_flow > 0) { - over_flow -= utf_ptr2cells(p); + while (*p && overflow > 0) { + overflow -= utf_ptr2cells(p); p += utfc_ptr2len(p); } text = p; diff --git a/test/functional/script/clint_spec.lua b/test/functional/script/clint_spec.lua index 8ead44ad3b..64e9d5e140 100644 --- a/test/functional/script/clint_spec.lua +++ b/test/functional/script/clint_spec.lua @@ -20,10 +20,10 @@ describe('clint.lua', function() 'test/functional/fixtures/clint_test.c:22: Storage class (static, extern, typedef, etc) should be first. [build/storage_class] [5]', 'test/functional/fixtures/clint_test.c:25: Use true instead of TRUE. [readability/bool] [4]', 'test/functional/fixtures/clint_test.c:26: Use false instead of FALSE. [readability/bool] [4]', - 'test/functional/fixtures/clint_test.c:27: Use kNONE from TriState instead of MAYBE. [readability/bool] [4]', + 'test/functional/fixtures/clint_test.c:27: Use kNone from TriState instead of MAYBE. [readability/bool] [4]', 'test/functional/fixtures/clint_test.c:31: Use true instead of TRUE. [readability/bool] [4]', 'test/functional/fixtures/clint_test.c:32: Use false instead of FALSE. [readability/bool] [4]', - 'test/functional/fixtures/clint_test.c:35: Use kNONE from TriState instead of MAYBE. [readability/bool] [4]', + 'test/functional/fixtures/clint_test.c:35: Use kNone from TriState instead of MAYBE. [readability/bool] [4]', 'test/functional/fixtures/clint_test.c:41: /*-style comment found, it should be replaced with //-style. /*-style comments are only allowed inside macros. Note that you should not use /*-style comments to document macros itself, use doxygen-style comments for this. [readability/old_style_comment] [5]', 'test/functional/fixtures/clint_test.c:54: Do not use preincrement in statements, use postincrement instead [readability/increment] [5]', 'test/functional/fixtures/clint_test.c:55: Do not use preincrement in statements, including for(;; action) [readability/increment] [4]',