From b7a670a6d2aa23e206941b475c0a463cbc64db0b Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Sun, 23 Nov 2025 11:40:59 -0500 Subject: [PATCH 1/2] docs: decode MIME-encoded author name --- scripts/collect_typos.lua | 49 +++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/scripts/collect_typos.lua b/scripts/collect_typos.lua index 59ece9e1c4..a4db3c2376 100755 --- a/scripts/collect_typos.lua +++ b/scripts/collect_typos.lua @@ -49,7 +49,46 @@ local function run_die(cmd, err_msg, stdin) return assert(_run(cmd, true, err_msg, stdin)) end -do +--- MIME-decode if python3 is available, else returns the input unchanged. +local function mime_decode(encoded) + local has_python = vim.system({ 'python3', '--version' }, { text = true }):wait() + if has_python.code ~= 0 then + return encoded + end + + local pycode = string.format( + vim.text.indent( + 0, + [[ + import sys + from email.header import decode_header + inp = %q + parts = [] + for txt, cs in decode_header(inp): + if isinstance(txt, bytes): + try: + parts.append(txt.decode(cs or "utf-8", errors="replace")) + except Exception: + parts.append(txt.decode("utf-8", errors="replace")) + else: + parts.append(txt) + sys.stdout.write("".join(parts)) + ]] + ), + encoded + ) + + local result = vim.system({ 'python3', '-c', pycode }, { text = true }):wait() + + if result.code ~= 0 or not result.stdout then + return encoded + end + + -- Trim trailing newline Python prints only if program prints it + return vim.trim(result.stdout) +end + +local function main() local pr_list = vim.json.decode( run_die( { 'gh', 'pr', 'list', '--label', 'typo', '--json', 'number' }, @@ -75,13 +114,13 @@ do if run({ 'git', 'apply', '--index', '-' }, patch_file) then table.insert(close_pr_lines, ('Close #%d'):format(pr_number)) for author in patch_file:gmatch('\nFrom: (.- <.->)\n') do - local co_author_line = ('Co-authored-by: %s'):format(author) + local co_author_line = ('Co-authored-by: %s'):format(mime_decode(author)) if not vim.list_contains(co_author_lines, co_author_line) then table.insert(co_author_lines, co_author_line) end end for author in patch_file:gmatch('\nCo%-authored%-by: (.- <.->)\n') do - local co_author_line = ('Co-authored-by: %s'):format(author) + local co_author_line = ('Co-authored-by: %s'):format(mime_decode(author)) if not vim.list_contains(co_author_lines, co_author_line) then table.insert(co_author_lines, co_author_line) end @@ -91,9 +130,11 @@ do end end - local msg = ('docs: small fixes\n\n%s\n\n%s\n'):format( + local msg = ('docs: misc\n\n%s\n\n%s\n'):format( table.concat(close_pr_lines, '\n'), table.concat(co_author_lines, '\n') ) print(run_die({ 'git', 'commit', '--file', '-' }, 'Failed to create commit', msg)) end + +main() From 3fc72f4ef15a8a5f5c452548b73e094382631427 Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Sun, 23 Nov 2025 12:45:31 -0500 Subject: [PATCH 2/2] docs: misc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Close #36441 Close #36631 Close #36656 Co-authored-by: Maria José Solano Co-authored-by: glepnir Co-authored-by: "Mike J. McGuirk" --- .github/workflows/build.yml | 4 ++-- .github/workflows/build_dummy.yml | 4 ++-- BUILD.md | 7 +++++++ CONTRIBUTING.md | 1 + runtime/doc/plugins.txt | 6 ++++++ runtime/doc/vimfn.txt | 4 ++-- runtime/lua/vim/_meta/builtin_types.lua | 2 +- runtime/lua/vim/_meta/vimfn.lua | 4 ++-- runtime/pack/dist/opt/nvim.undotree/lua/undotree.lua | 3 +++ src/nvim/eval.lua | 7 ++++++- 10 files changed, 32 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1112790d93..52a45f1ae7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,8 +21,8 @@ env: INSTALL_PREFIX: ${{ github.workspace }}/nvim-install jobs: + # Test the minimum supported cmake. old-cmake: - name: Minimum cmake runs-on: ubuntu-latest timeout-minutes: 15 env: @@ -54,8 +54,8 @@ jobs: - name: Install run: make install + # Offline build (USE_EXISTING_SRC_DIR=ON with no network access) use-existing-src: - name: Offline build (USE_EXISTING_SRC_DIR=ON with no network access) runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 diff --git a/.github/workflows/build_dummy.yml b/.github/workflows/build_dummy.yml index b499ba7fa2..141bdfaeda 100644 --- a/.github/workflows/build_dummy.yml +++ b/.github/workflows/build_dummy.yml @@ -19,15 +19,15 @@ concurrency: cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: + # Test the minimum supported cmake. old-cmake: - name: Test oldest supported cmake runs-on: ubuntu-latest timeout-minutes: 15 steps: - run: echo "success" + # Offline build (USE_EXISTING_SRC_DIR=ON with no network access) use-existing-src: - name: Test USE_EXISTING_SRC_DIR=ON builds with no network access runs-on: ubuntu-latest steps: - run: echo "success" diff --git a/BUILD.md b/BUILD.md index a7c1821c9e..ab1d76b13c 100644 --- a/BUILD.md +++ b/BUILD.md @@ -459,6 +459,13 @@ Similarly to develop on Neovim: `nix run github:nix-community/neovim-nightly-ove To use a specific version of Neovim, you can pass `--override-input neovim-src .` to use your current directory, or a specific SHA1 like `--override-input neovim-src github:neovim/neovim/89dc8f8f4e754e70cbe1624f030fb61bded41bc2`. +### Haiku + +Some deps can be pulled from haiku repos, the rest need "bundled" deps: + + cmake -DUSE_BUNDLED_LIBUV=OFF -DUSE_BUNDLED_UNIBILIUM=OFF -DUSE_BUNDLED_LUAJIT=OFF -B .deps ./cmake.deps + make -C .deps + ### FreeBSD ``` diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e7b4cc54f1..909ca50689 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -55,6 +55,7 @@ Developer guidelines Pull requests (PRs) --------------------- +- Fork the repository first. - To avoid duplicate work, create a draft pull request. - Your PR must include [test coverage][run-tests]. - Avoid cosmetic changes to unrelated files in the same commit. diff --git a/runtime/doc/plugins.txt b/runtime/doc/plugins.txt index 2e676a4ab7..c732f72cce 100644 --- a/runtime/doc/plugins.txt +++ b/runtime/doc/plugins.txt @@ -255,6 +255,8 @@ open({opts}) *undotree.open()* While in the window, moving the cursor changes the undo. + Closes the window if it is already open + Load the plugin with this command: > packadd nvim.undotree < @@ -275,5 +277,9 @@ open({opts}) *undotree.open()* the source buffer as its only argument and should return a string. + Return: ~ + (`boolean?`) Returns true if the window was already open, nil + otherwise + vim:tw=78:ts=8:sw=4:sts=4:et:ft=help:norl: diff --git a/runtime/doc/vimfn.txt b/runtime/doc/vimfn.txt index 3eaa88b62d..31adb98be8 100644 --- a/runtime/doc/vimfn.txt +++ b/runtime/doc/vimfn.txt @@ -9134,9 +9134,9 @@ setloclist({nr}, {list} [, {action} [, {what}]]) *setloclist()* Parameters: ~ • {nr} (`integer`) - • {list} (`any`) + • {list} (`vim.quickfix.entry[]`) • {action} (`string?`) - • {what} (`table?`) + • {what} (`vim.fn.setqflist.what?`) Return: ~ (`any`) diff --git a/runtime/lua/vim/_meta/builtin_types.lua b/runtime/lua/vim/_meta/builtin_types.lua index a431684dcd..47a5242cbb 100644 --- a/runtime/lua/vim/_meta/builtin_types.lua +++ b/runtime/lua/vim/_meta/builtin_types.lua @@ -160,7 +160,7 @@ --- a function or a funcref or a lambda. Refer --- to |quickfix-window-function| for an explanation --- of how to write the function and an example. ---- @field quickfixtextfunc? function +--- @field quickfixtextfunc? string|function --- --- quickfix list title text. See |quickfix-title| --- @field title? string diff --git a/runtime/lua/vim/_meta/vimfn.lua b/runtime/lua/vim/_meta/vimfn.lua index 3528388f11..04986c9b19 100644 --- a/runtime/lua/vim/_meta/vimfn.lua +++ b/runtime/lua/vim/_meta/vimfn.lua @@ -8320,9 +8320,9 @@ function vim.fn.setline(lnum, text) end --- for the list of supported keys in {what}. --- --- @param nr integer ---- @param list any +--- @param list vim.quickfix.entry[] --- @param action? string ---- @param what? table +--- @param what? vim.fn.setqflist.what --- @return any function vim.fn.setloclist(nr, list, action, what) end diff --git a/runtime/pack/dist/opt/nvim.undotree/lua/undotree.lua b/runtime/pack/dist/opt/nvim.undotree/lua/undotree.lua index 4bbad22ef1..38f107e615 100644 --- a/runtime/pack/dist/opt/nvim.undotree/lua/undotree.lua +++ b/runtime/pack/dist/opt/nvim.undotree/lua/undotree.lua @@ -298,6 +298,8 @@ end --- --- While in the window, moving the cursor changes the undo. --- +--- Closes the window if it is already open +--- --- Load the plugin with this command: --- ``` --- packadd nvim.undotree @@ -306,6 +308,7 @@ end --- Can also be shown with `:Undotree`. [:Undotree]() --- --- @param opts vim.undotree.opts? +--- @return boolean? Returns true if the window was already open, nil otherwise function M.open(opts) -- The following lines of code was copied from -- `vim.treesitter.dev.inspect_tree` and then modified to fit diff --git a/src/nvim/eval.lua b/src/nvim/eval.lua index 2583ab132f..3e4219c992 100644 --- a/src/nvim/eval.lua +++ b/src/nvim/eval.lua @@ -10091,7 +10091,12 @@ M.funcs = { ]=], name = 'setloclist', - params = { { 'nr', 'integer' }, { 'list', 'any' }, { 'action', 'string' }, { 'what', 'table' } }, + params = { + { 'nr', 'integer' }, + { 'list', 'vim.quickfix.entry[]' }, + { 'action', 'string' }, + { 'what', 'vim.fn.setqflist.what' }, + }, signature = 'setloclist({nr}, {list} [, {action} [, {what}]])', }, setmatches = {