| Commit message (Collapse) | Author | Age |
| |
|
|
|
|
|
|
|
| |
Problem: Argument type mismatches are excluded from EmmyLua checks.
Solution: Correct runtime annotations and calls, document local checker
workarounds, and enable the diagnostic.
AI-assisted
|
| |
|
|
| |
AI-assisted
|
| |
|
|
|
|
|
|
|
|
|
| |
Enable EmmyLua's assign-type-mismatch diagnostic after correcting the
runtime annotations and assignments it flags.
Correct option, tuple, and return types, and use separate locals when a
value changes representation. Add guards and narrow casts where needed
so the runtime passes the stricter check. Regenerate the affected docs.
AI-assisted
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Enable EmmyLua's need-check-nil diagnostic and resolve nullable values
through more precise types, explicit invariants, and guards for missing
runtime state. Keep analyzer-specific workarounds local and update the
affected API documentation.
Exclude the bundled re.lua from analysis so its nil-check warnings do
not fail CI.
AI-assisted
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The generated vim.fn stubs represent overloads as repeated function
declarations. EmmyLua merges their return types, so getline(lnum) is
inferred as string|string[] even though it always returns a string.
Generate one declaration with @overload annotations from the existing
__N entries, while keeping separate Vimdoc signatures. Parenthesize the
overload return list so types such as (0|-1)[] remain arrays.
Correct getline()'s single-line and range signatures, and add typed
getqflist() signatures for its entry-list and property-query forms. This
lets callers infer quickfix results without local type overrides.
AI-assisted
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
directory
Problem: netrw#fs#Glob() calls s:NetrwRemoteListing() and uses
s:THINLIST, which are script-local to autoload/netrw.vim and
not visible in autoload/netrw/fs.vim. Listing a remote
directory in the tree view fails with E117 and E121.
Solution: Use netrw#Call() and netrw#Expose(), which exist to reach
the script-local functions and variables of netrw.vim.
closes: vim/vim#21259
https://github.com/vim/vim/commit/71a0e7ca13b3c5a4c260bb43bbe602c26049f160
Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
|
| |
|
|
|
|
|
|
|
|
| |
Enable checks for unused code, deprecated calls, return types, and
annotations.
Fix the warnings and replace the deprecated highlight function. Keep
exceptions where old APIs are still needed or the checker gets it wrong.
AI-assisted
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- call-non-callable
- missing-fields
- redefined-label
- redefined-local
- undefined-field
- unreachable-code
Promote redefined-local and unreachable-code to warnings.
Fix DOS line-ending handling for multiline semantic tokens, and support
intersection types in the help parser.
AI-assisted
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(#41783)
Problem: Netrw raises E46 when changing directory fails.
Solution: Remove unused assignments to the read-only directory argument
and cover both error-handling branches with a regression test
(Qiming zhao).
When :lcd fails with E472, s:NetrwLcd() assigns to a:newdir instead of
returning -1. The fallback assignment also refers to dirname, which is
undefined on this path. Neither assignment can update the caller's
directory variable. Keep the existing option restoration and failure
return while removing the invalid assignments.
Supported by AI.
closes: vim/vim#21226
https://github.com/vim/vim/commit/2f72e4c72f98a5760e2c783ab07f9865e91217a8
Co-authored-by: Qiming zhao <chemzqm@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: LuaLS struggles with the generics used in Nvim's runtime,
requiring broad diagnostic suppressions. Indexing is also slow.
Solution: Use EmmyLua for type checks in the build and CI. It offers
more sophisticated type checking, substantially better support for
generics, and much better flow analysis.
Correct the affected annotations. Use `@internal`, supported directly by
EmmyLua, instead of `@nodoc` for shared internal declarations, and
support it in the help parser.
AI-assisted
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
doesn't exist
Problem: netrw: error when parent dir of g:netrw_home doesn't exist.
Solution: Use 'p' flag of mkdir() (zeertzjq).
closes: vim/vim#21113
https://github.com/vim/vim/commit/ffce1ce58dd3d08110c35c8af61ad2555b344569
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: runtime(netrw): g:netrw_home not respected on Neovim
Solution: prioritize g:netrw_home for bookmarks and history directory
setting, add tests (J. Paulo Seibt)
related: neovim/neovim@5a78c5b
closes: vim/vim#21091
https://github.com/vim/vim/commit/4be03620b305282270e41643e5e860f95efa8f07
Co-authored-by: J. Paulo Seibt <jpseibt@gmail.com>
|
| |
|
|
|
|
|
| |
closes: vim/vim#20968
https://github.com/vim/vim/commit/2c0318d2854418d26032352ab1152b598642e38a
Co-authored-by: Rochish Manda <28740792+Rochish-Manda@users.noreply.github.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: The zip autoload script aborts loading when the "zip"
command is not available, so even read-only browsing of an
archive fails with E117 (zip#Browse undefined) on systems
that have "unzip" but not "zip" (e.g. the Windows CI
runner). Regressed in b0e0b22.
Solution: Drop the load-time executable gate and check each command
per operation instead, so a missing "zip" only affects
writing. Update the test to match the reworded message.
https://github.com/vim/vim/commit/e241ac0a62b774763733f2ccac4040dfe8aafac8
Co-authored-by: Christian Brabandt <cb@256bit.org>
|
| |
|
|
|
|
|
|
|
|
|
| |
pwsh 7
related: vim/vim#20832
https://github.com/vim/vim/commit/b0e0b22535079e478c3acfb47a61709c3c59ff2d
Co-authored-by: curbe454 <asu454@outlook.com>
Co-Authored-By: curbe454 <asu454@outlook.com>
|
| |
|
|
|
|
|
|
|
|
| |
Problem:
The bundled `zip` plugin is implemented in Vimscript, making it harder to
maintain and build on with Nvim's Lua runtime infrastructure.
Solution:
Add an opt-out `zip.lua` browser backed by `nvim.dir`, and disable the legacy
Vimscript implementation by moving it to `pack/dist/opt/zip/`. Load it with
`:packadd zip`.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: [security]: code injection in netrw via bookmarks and history
(David Carliez)
Solution: Escape the '|' explicitly (Yasuhiro Matsumoto)
The bookmark and history menu builders interpolate paths into :execute'd
:menu commands using g:netrw_menu_escape, which did not escape the Ex
command separator '|'. A crafted path could break out of the :menu command
and run arbitrary Ex/shell commands when the menu was built or triggered.
Add '|' to g:netrw_menu_escape for the menu names, escape the :e right-hand
side with fnameescape(), and quote the netrw#MakeTgt() argument with
string() instead of raw single-quote interpolation.
Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-rcr7-f3wr-22r2
https://github.com/vim/vim/commit/29c6fd090d4520592f8be7d9ec81190edf25ef69
Co-authored-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
one past the last window (#40911)
Problem: Opening a file from a netrw listing throws
"E471: Argument required: keepj keepalt 2wincmd 1" when
g:netrw_chgwin equals winnr('$')+1, e.g. after opening
:Lexplore (which sets g:netrw_chgwin=2) and closing the
sidebar, then browsing with :Explore in the remaining window.
s:NetrwBrowseChgDir builds the window jump as
"g:netrw_chgwin wincmd curwin", passing the saved window
NUMBER where wincmd expects its single-letter argument.
Solution: Jump back to the saved window with "curwin wincmd w", as the
surrounding comment intends; the following statement then
performs the actual jump to g:netrw_chgwin.
The faulty line dates back to at least Vim 9.0
(runtime/autoload/netrw.vim:4976 at v9.0.0000).
Reported (against the since-archived netrw repo) in
saccarosium/netrw.vim#98 and neovim/neovim#34169.
Note: no test, because the error reproduces only in Neovim.
closes: vim/vim#20741
https://github.com/vim/vim/commit/6e468299914a81b54dea7988fc2760df16691cbb
Co-authored-by: erdivartanovich <erdivartanovich@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: runtime(netrw): Explore without optional [dir] argument should
open directory of the current file
Solution: Make it work as documented (Mark Woods)
Broken by fix for vim/vim#20636 in PR vim/vim#20663
related: vim/vim#20663
closes: vim/vim#20761
https://github.com/vim/vim/commit/1eede2bf020035cf9617ade4b313a4cbef08b9ad
Co-authored-by: Mark Woods <mwoods.online.ie@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
rename (#40799)
fixes: vim/vim#20710
closes: vim/vim#20777
closes: vim/vim#20698
https://github.com/vim/vim/commit/528adbd7579e37f685072460acdd00b0887acc49
Co-authored-by: yasuda <yasuda@kyoto-sr.co.jp>
Co-authored-by: Doruk Özer <dorukozer@protonmail.com>
|
| |
|
|
|
|
|
|
|
|
| |
Problem: runtime(netrw): Unix: unable to open '\' file
Solution: Adjust directory pattern (Manoj Panda)
closes: vim/vim#20685
https://github.com/vim/vim/commit/86d8af37ba90ced2236afcb3572c6cb2a1594788
Co-authored-by: Manoj Panda <manojpandawork@gmail.com>
|
| |
|
|
|
|
|
|
|
| |
fixes: vim/vim#20636
closes: vim/vim#20663
https://github.com/vim/vim/commit/48474e63704b6d5ae2f491ef320d33ef74e87357
Co-authored-by: Christian Brabandt <cb@256bit.org>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem:
`:edit <dir>` and `nvim <dir>` currently rely on netrw to show local directory
contents.
Solution:
- Provide `filetype=directory`.
- Introduce dir.lua, a small plugin that provides directory listing, opening
items, parent navigation, and refresh.
- `netrw` remains available for `:Explore`, remote paths, archives, and file
operations. To continue
Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
deletion
Problem: [security]: s:NetrwLocalRmFile() escapes only the backslash in
the file name before passing it to :execute, so a name
containing "|" injects arbitrary Ex commands when the file is
deleted (cipher-creator)
Solution: Use fnameescape() to correctly escape the file name
(Yasuhiro Matsumoto).
Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-vhh8-v6wx-hjjh
Supported by AI
https://github.com/vim/vim/commit/55bc757a5d436e59d50fe43f7cda94b118f86cb2
Co-authored-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem:
`nvim -u NONE -d <(xxd one) <(xxd two)` has weird behavior.
Process substitution `<(...)` is a pipe and not a seekable file.
Test case:
cat /dev/random | head -c 10240 > one
cp one two
cat /dev/random | head -c 10240 >> two
nvim -u NONE -d <(xxd one) <(xxd two)
Solution:
Workaround the issue by skipping `nvim.difftool` if the 2 args are not
directories; fall-through to the builtin diff handling.
Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Problem: unmarking a regular file when there are directories in the markings
list also removes the 2match highlight from those directories.
Solution: correctly rebuild the match pattern from the remaining markings,
using the right regex trailer for each entry in the list.
closes: vim/vim#20461
https://github.com/vim/vim/commit/affd4b5964f0ff10a4a39a93ddf46ad8bd537d1b
Co-authored-by: J. Paulo Seibt <jpseibt@gmail.com>
|
| |
|
|
|
|
|
| |
closes: vim/vim#20412
https://github.com/vim/vim/commit/de18ef628460b1cd3ae2aca9cd19b9b1c319e60c
Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
|
| |
|
|
|
| |
https://github.com/vim/vim/commit/e9f8e0fcbe623ebf65bf1e8993d7ee6db57786d4
Co-authored-by: Christian Brabandt <cb@256bit.org>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Problem: runtime(netrw): netrw rejects hostnames containing _
(lilydjwg)
Solution: Relax the restriction and allow the underscore
fixes: vim/vim#20344
https://github.com/vim/vim/commit/93d177cd2b69bac58fc51a5a514d7bc71e264b11
Co-authored-by: Christian Brabandt <cb@256bit.org>
|
| |
|
|
|
|
|
| |
fixes: vim/vim#20302
https://github.com/vim/vim/commit/e60d4b4ff309cab96522f4ad565dd7dc9478b89c
Co-authored-by: Christian Brabandt <cb@256bit.org>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: To goto or delete a bookmark, one needs to prefix a count
for the bookmark number (e.g., "2gb" to open bookmark#2).
As the bookmark list gets or deletes entries, the numbers
keep changing, requiring listing the bookmarks with qb to
discover the desired bookmark number. Typing gb or mB
without a count targets g:netrw_bookmarklist[-1].
Solution: If no count is given to gb or mB, list all bookmarks and
prompt for a number using inputlist(), similar to tag jump
with g].
closes: vim/vim#20211
https://github.com/vim/vim/commit/35b767a090cc7b918dcafc9feb1a78cf0938d6bc
Co-authored-by: J. Paulo Seibt <jpseibt@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
NetrwBookHistSave()
Problem: [security]: runtime(netrw): code injection via
NetrwBookHistSave()
Solution: Properly quote the directory name using string() function
(Srinivas Piskala Ganesh Babu)
Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-crm5-rh6j-2c7c
https://github.com/vim/vim/commit/f08ab2f4d7d2947c8dd6c179ae08ee6146a2694b
Co-authored-by: Christian Brabandt <cb@256bit.org>
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
Problem: runtime(netrw): command injection possible via crafted
directory names in NetrwMaps() (Christopher Lusk)
Solution: Temporarily remove B flag in NetrwMaps() to prevent command
injection
https://github.com/vim/vim/commit/8e41c34aba0e775d2e3bf6f0e2da1b1c5317f3df
Co-authored-by: Christian Brabandt <cb@256bit.org>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: [security]: runtime(netrw): code injection via mf command
(Christopher Lusk, Zdenek Dohnal)
Solution: Do not use string concatenation inside the filter() commands
(Zdenek Dohnal)
Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-66hr-7p6x-x5j3
https://github.com/vim/vim/commit/8af0f098c3a42a28661d0295364e6e0fd7dbc92c
Co-authored-by: Christian Brabandt <cb@256bit.org>
|
| |
|
|
|
|
|
|
|
|
|
| |
Problem:
Using the `DiffTool` plugin (e.g. through `nvim -d ...` or `:DiffTool
<file1> <file2>` fails if a space is in one of the paths. This occurs
because the `diff` wraps the paths with quotes (`'`) if space
characters are present, which the line diff regex fails to parse.
Solution:
Update regex to handle quoted paths by matching the string within the
quotes, if it exists.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: the bookmarks list can have duplicate entries, more often
in win32 (due to mixed slashes and capitalization) and when
g:netrw_keepdir=0 (which could introduce relative paths).
Duplicate entries could be: C:\foo\BAR\baz.file
c:\foo\bar\baz.file
c:/foo\BAR/baz.file
BAR/baz.file
Solution: Normalize the paths and make sure they are always absolute
(J. Paulo Seibt).
closes: vim/vim#20194
https://github.com/vim/vim/commit/74019bea8c97077bfd66cd63dc0ffa279fd729ac
Co-authored-by: J. Paulo Seibt <jpseibt@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
(#39729)
Problem: runtime(netrw): bookmarking directory uses current dir
Solution: Correctly handle netrw actual directory (J. Paulo Seibt)
fixes: vim/vim#10481
closes: vim/vim#20169
https://github.com/vim/vim/commit/ec76ac620b870abb4ccc9298250691e88a2adb29
Co-authored-by: J. Paulo Seibt <jpseibt@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(#39620)
Problem: off-by-one bug in s:NetrwUnMarkFile()
Solution: Correctly loop through all buffers to unlet all variables
(J. Paulo Seibt)
When the function loops through buffers to clear s:netrwmarkfilelist_#
and s:netrwmarkfilemtch_#, it skips the last one at bufnr('$'), messing
up mark highlights and causing other functions that operate on those
arrays (like delete or rename) to target stale marked files.
The bufnr() help page says that bufnr("$") returns the highest buffer
number of existing buffers, so while ibuf < bufnr("$") does not clear
the last buffer-local arrays.
To reproduce:
Just opening a fresh Vim and running :Ex opens a netrw buffer at the
highest number. Then, typing mu after marking some files triggers the
mark highlight bug, and finally typing D would act like calling the
delete function against the previous marked files, as the buffer-local
arrays where not touched by s:NetrwUnMarkFile.
closes: vim/vim#20129
https://github.com/vim/vim/commit/7ccc273a4cb6012e5afbdb94d0f2597bc01fe2fd
Co-authored-by: J. Paulo Seibt <jpseibt@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Problem: termdebug: Need a few more user commands
Solution: Add the :RunOrContinue and the :ToggleBreak user commands
(bennyyip)
closes: vim/vim#18283
https://github.com/vim/vim/commit/c975d62473327d7ca74666d41c99651c23f09498
Co-authored-by: bennyyip <yebenmy@gmail.com>
|
| |
|
|
|
|
|
|
| |
Problem:
- Various `TermRequest` handlers which all do similar things.
- `tty.query` is specific to `XTGETTCAP DCS`, can't be reused for other kinds of terminal queries.
Solution:
Provide `tty.request()`.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Calling `set print pretty on` in GDB will:
> Cause GDB to print structures in an indented format with one member
per line
However, `termdebug` just renders the newlines as raw `\n` characters.
This is a regression of[1]. Glancing through the history it looks to
have been caused by cd1b14f027f375a9de17fdf106016470f52035f7 which
removed the output splitting when displaying the eval results, so this
changes adds that behaviour back.
As a quick reproduction/test, compile the following C program:
```c
struct Foo {
char *name;
};
int main(void) {
struct Foo f = {"hello"};
printf("%s\n", f.name);
return 0;
}
```
Then launch `nvim` and run:
:Termdebug main
:Gdb
(gdb) set print pretty on
(gdb) break main
(gdb) run
:Source
Place the cursor on the `f` variable and call `:Evaluate`. Before this change:

With this change:

Link: https://github.com/neovim/neovim/issues/10020 [1]
|
| |
|
|
|
|
|
|
|
| |
Problem:
Cannot remove a `@conceal` highlight when defined in highlights.scm.
Solution:
Support a `@noconceal` highlight that works similarly to `@nospell` where it
overrides the conceal set on the range to remove it. Additionally, can
set the conceal metadata field to false for the same behavior.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and file: URLs
Problem: runtime(netrw): shell-injection via sftp: and file: URLs
(Joshua Rogers)
Solution: Escape temporary file names, harden filename suffix regex,
drop unused g:netrw_tmpfile_escape variable
Supported by AI
https://github.com/vim/vim/commit/405e2fb6d54d5653523809e2853d99d1c000a5fc
Co-authored-by: Christian Brabandt <cb@256bit.org>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: runtime(netrw): ~ note expanded on MS Windows
(Tom Vamvanij)
Solution: Expand ~ on MS Windows (Yasuhiro Matsumoto)
On Windows, ":Explore ~" did nothing because the tilde expansion was
gated to Unix/Cygwin only. Additionally, substitute() interprets
backslashes in the replacement string specially (e.g. \U as a case
modifier), which would corrupt $HOME values like C:\Users\name even
if the branch were taken.
Include has("win32") in the guard, anchor the pattern to the start of
the string, and escape backslashes, ampersands and tildes in $HOME
before substituting.
fixes: vim/vim#20003
closes: vim/vim#20014
https://github.com/vim/vim/commit/723c0acf2535c87a5b7be0284e7379e071a1d610
Co-authored-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
|
| |
|
|
|
|
| |
https://github.com/vim/vim/commit/21c0cd29f808e32a7c159889c6dcf7a6fbf189f7
Co-authored-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
|
| |
|
| |