Commit Graph

26918 Commits

Author SHA1 Message Date
Sean Dewar
472271199e feat(api): allow win_hide to close cmdwin or non-previous windows
This aligns its behaviour better with `nvim_win_close`.

Note that `:hide` is actually incapable of closing the cmdwin, unlike `:close`
and `:quit`, so this is a bit of a difference in behaviour.
2023-07-26 20:44:46 +01:00
Sean Dewar
5d921e28c1 feat(api): allow win_close in cmdwin to close wins except previous
Disallow closing the previous window from `nvim_win_close`, as this will cause
issues.

Again, no telling how safe this is. It also requires exposing old_curwin. :/

Also note that it's possible for the `&cmdheight` to change if, for example,
there are 2 tabpages and `nvim_win_close` is used to close the last window in
the other tabpage while `&stal` is 1. This is addressed in a later commit.
2023-07-26 20:44:46 +01:00
Sean Dewar
6b4970f6e0 feat(api): allow open_win/win_set_buf in the cmdwin in some cases
Problem: As discussed on Matrix, there was some interest in having
`nvim_open_win` again be able to open floats in the cmdwin (e.g: displaying a
hover doc related to what's in the cmdwin). After #23228, this was disallowed.

Solution: Allow `nvim_open_win` in the cmdwin as long as `!enter` and
`buffer != curbuf` (the former can cause all sorts of issues, and the latter
can crash Nvim after closing cmdwin). Also allow `nvim_win_set_buf` in a similar
fashion.

Note that we're not *entirely* sure if this is 100% safe (cmdwin is a
global-state-using-main-loop-calling beast), but this seems to work OK..?

Also:
  - Check the buffer argument of `nvim_open_win` earlier, and abort if it's
    invalid (it used to still open a window in this case).

  - Untranslate `e_cmdwin` errors in the API (other errors in the API are not
    translated: although not detailed in the API contract yet, errors are
    supposed to be stable).
2023-07-26 20:44:46 +01:00
zeertzjq
ccf328172b fix(gen_vimfn_types): don't include tag before signature's line (#24492)
When signature is a bit long or there are too many tags, the tags appear
before the signature's line. Don't include the line with tags in the
previous function' docs.

Also fix lint warnings.
2023-07-26 21:07:39 +08:00
Lewis Russell
fd089c8e50 feat(lua): typing for vim.fn.* (#24473)
Problem:
  No LSP information for `vim.fn.*`

Solution:
  Add meta file for `vim.fn.*`.
2023-07-26 09:50:54 +01:00
zeertzjq
b8b7782037 vim-patch:partial:8.1.1981: the evalfunc.c file is too big (#24490)
Problem:    The evalfunc.c file is too big.
Solution:   Move undo functions to undo.c.  Move cmdline functions to
            ex_getln.c.  Move some container functions to list.c.

08c308aeb5

Undo functions only. Cmdline functions have already been moved.
A lot of container functions have been added to eval/funcs.c instead of
list.c in previously ported Vim 8.2.x patches, so deal with that later.

Co-authored-by: Bram Moolenaar <Bram@vim.org>
2023-07-26 15:18:09 +08:00
zeertzjq
14d047ad2f test(inccommand): add a test for #20248 (#24489) 2023-07-26 11:58:26 +08:00
Alexandre Teoi
643bea31b8 fix(inccommand): restrict cmdpreview undo calls (#24289)
Problem:
The cmdpreview saved undo nodes on cmdpreview_prepare() from ex_getln.c may
become invalid (free) if the preview function makes undo operations, causing
heap-use-after-free errors.

Solution:
Save the buffer undo list on cmdpreview_prepare)_ and start a new empty one. On
cmdpreview_restore_state(), undo all the entries in the new undo list and
restore the original one. With this approach, the preview function will be
allowed to undo only its own changes.

Fix #20036
Fix #20248
2023-07-26 11:22:57 +08:00
Mathias Fußenegger
74bd4aba57 fix(lsp): fix multi client handling workspace_folder methods (#18839)
`buf_notify` sends the notification to all clients of a buffer, calling
that inside a loop over clients multiplies the amount of notifications.
2023-07-25 16:57:19 +02:00
zeertzjq
aba3ceccb7 vim-patch:9.0.1335: no test for bad use of spaces in help files (#24483)
Problem:    No test for bad use of spaces in help files.
Solution:   Add checks for use of spaces in help files.  Ignore intentional
            spaces. (Hirohito Higashi, closes vim/vim#11952)

d950984489

Cherry-pick changes from patch 9.0.1604.

Co-authored-by: h-east <h.east.727@gmail.com>
Co-authored-by: Bram Moolenaar <Bram@vim.org>
2023-07-25 20:58:09 +08:00
Christoph Hasse
20c331915f fix(lsp): SignatureHelp docstring is not escaped #16702
Problem:
Nvim LSP client always treats signature.documentation as markdown, even
if the server returns a plain string.
Per https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#signatureInformation
in a SignatureInformation response, the documentation field can be
either "string" or "MarkupContent".

Solution:
If signature.documentation is a string, treat it as "plaintext".

Closes #16563
2023-07-25 05:40:13 -07:00
zeertzjq
898384ac69 test(core/startup_spec): use retry() instead of jobwait() (#24481)
This should work on Windows.
2023-07-25 20:32:59 +08:00
ii14
aaa151d506 docs: remove trailing spaces #24455 2023-07-25 05:07:13 -07:00
Raphael
4d0f4c3de9 fix(lsp): E403 if doc contains multiple codeblocks #24458
Problem:
Content that has codeblocks with different languages, results in
multiple calls to:
    syntax include vim syntax/vim.vim
which raises error:
    E403: syntax sync: line continuations pattern specified twice
Before ba8f19ebb6, this was avoided by
using pcall() to ignore the error.

Solution:
Restore the use of pcall() to ignore the error.
We plan to replace this logic with a treesitter approach, so this is
good enough for now.

Fix #24431
2023-07-25 04:38:48 -07:00
zeertzjq
c0fa721ade fix(startup): make recovery mode work without --headless (#24477) 2023-07-25 19:02:39 +08:00
Mathias Fußenegger
7668f89d5b fix(lsp): replace @private with @nodoc for public client functions (#24415)
* fix(lsp): replace @private with @nodoc for public client functions

To prevent lua-ls warnings in plugins which use the functions.

* fix(lsp): remove duplicate type annotations/class definitions

These annotations became duplicate with https://github.com/neovim/neovim/pull/23750
2023-07-24 20:21:35 +02:00
Bruce Weirdan
966eb8e0b3 fix(lsp): announce publishDiagnostics.dataSupport (#24442)
Neovim already passed `data` element from published diagnostic to code action, but failed to announce it in client capabilities.

Here is the test that shows that `data` element is returned by `vim.lsp.diagnostic.get_line_diagnostics()`:

f56c184809/test/functional/plugin/lsp/diagnostic_spec.lua (L103-L115)

and then `get_line_diagnostics()` is used to construct the context for code action request:

f56c184809/runtime/lua/vim/lsp/buf.lua (L742)
2023-07-24 19:26:17 +02:00
Mitchell Hanberg
a37d568082 fix(lsp): send empty "added" list when removing workspace folder #24440
When adding `workspace/didChangeWorkspaceFolders` support to my [language server](https://github.com/elixir-tools/next-ls), I noticed that when neovim removes a workspace, it sends an empty table (which is serialized to an empty JSON array) for the value in the `added` field.

This does not follow the spec; the `added` table should just be empty.

The following error led me to this discovery. Note the payload includes `"added" => [[]]`:

```
22:46:48.476 [error] LSP Exited.

Last message received: handle_notification %{"jsonrpc" => "2.0", "method" => "workspace/didChangeWorkspaceFolders", "params" => %{"event" => %{"added" => [[]], "removed" => [%{"name" => "/Users/mitchell/src/gen_lsp", "uri" => "file:///Users/mitchell/src/gen_lsp"}]}}}

** (MatchError) no match of right hand side value: {:error, %{"params" => %{"event" => %{"added" => [error: "expected a map"]}}}}
    (gen_lsp 0.4.0) lib/gen_lsp.ex:265: anonymous fn/4 in GenLSP.loop/3
    (gen_lsp 0.4.0) lib/gen_lsp.ex:292: GenLSP.attempt/3
    (stdlib 5.0.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3
```
2023-07-24 09:09:53 -07:00
Keith Smiley
add7e106d5 fix(lsp): noisy warning about offset_encodings #24441
In the case you hit this warning in a buffer (like with C++ and clangd),
this message potentially fires over and over again making it difficult
to use the editor at all.
2023-07-24 08:58:59 -07:00
marshmallow
6a486c44e6 fix(gx): move to to _init_default_mappings #24420
Problem:
netrw may conflict with the Nvim default "gx" mapping.

Solution:
Initialize keymapping earlier by moving it to vim._init_default_mappings().
That also avoids needing to check maparg().
2023-07-24 08:35:19 -07:00
Micah Halter
48085e40bb fix(treesitter): stop() should treat 0 as current buffer #24450 2023-07-24 07:26:38 -07:00
ii14
78b56b21b4 docs(vim_diff): fixed inconsistent autocmds behavior #24453 2023-07-24 07:10:55 -07:00
zeertzjq
5fb4c397a1 fix(mouse): drag vsep of window with 'statuscolumn' (#24462)
Problem:    Cannot drag a vertical separator to the right of a window
            whose 'statuscolumn' is wider than itself.
Solution:   Never treat a click on a vertical separator as a click on
            'statuscolumn'.
2023-07-24 18:16:53 +08:00
zeertzjq
01e273c340 fix(statuscolumn): don't update clicks if current width is 0 (#24459) 2023-07-24 15:18:24 +08:00
fredizzimo
f2ce31d3dc fix(terminal): call validate_cursor() before screen update (#24425)
Problem:
When the CurSearch highlight group is set, and a search is active and
you are listening to the remote UI "win_viewport" events, then typing is
very unresponsive, because "win_viewport" is not sent as soon as the
character is typed. On the other hand if you refresh the screen on
"flush", the screen will scroll with a delay since "win_viewport" comes
too late. I estimate this delay be up to one second, but it varies. 

Solution:
Call validate_cursor() before drawing the screen, just like other modes.
No tests have been added because only the intermediate state is wrong.
2023-07-23 23:01:51 +08:00
zeertzjq
59289fb987 fix(highlight): make CurSearch work properly with 'winhl' (#24448) 2023-07-23 21:36:32 +08:00
Christian Clason
183147a906 build(deps): bump tree-sitter to HEAD - 3f44b8968 (#24447) 2023-07-23 11:39:45 +02:00
Christian Clason
011166438d build(deps): bump tree-sitter-python to v0.20.3 (#24446) 2023-07-23 11:17:13 +02:00
zeertzjq
ce56ad2ba7 test: reduce flakiness (#24443)
Avoid consecutive RPC requests involving :startinsert or :stopinsert,
because consecutive RPC requests may be processed together, before the
:startinsert or :stopinsert takes effect.

Also change some feed_command() to command() to make tests faster.
2023-07-23 12:46:56 +08:00
zeertzjq
f56c184809 test: fix VimResume test flakiness (#24438) 2023-07-23 10:03:05 +08:00
zeertzjq
f0d618667a test: check that TextChangedT cannot delete terminal buffer (#24437) 2023-07-23 08:53:59 +08:00
zeertzjq
cdb758ef44 test: check real cursor position in Terminal mode (#24436) 2023-07-23 08:23:07 +08:00
zeertzjq
a8cfdf43bc fix(events): trigger VimResume on next UI request (#24426) 2023-07-23 07:16:41 +08:00
Christian Clason
ad95b36985 fix(treesitter): update markdown parser and queries (#24429) 2023-07-22 19:57:58 +02:00
zeertzjq
d2efcbf2dc refactor: remove some (const char **) casts (#24423) 2023-07-22 18:00:55 +08:00
Chris AtLee
4b57ff77fe refactor(lsp): use LspNotify for inlay_hint (#24411) 2023-07-22 11:00:17 +02:00
Lewis Russell
24e3ee9d07 fix(api/options): validate buf and win
Fixes #24398
2023-07-22 09:52:13 +01:00
Gnik
cfcda91827 docs(lua): add missing word in docs for vim.empty_dict (#24401) 2023-07-22 15:42:25 +08:00
zeertzjq
b74262a336 fix(terminal): send Shift-Home Shift-End Ctrl-Home Ctrl-End (#24418) 2023-07-22 08:00:42 +08:00
Justin M. Keyes
02d859a073 Merge #24392 from mrshmllow/gx_win
fix(ui.open): some URLs fail on Windows
2023-07-21 06:37:34 -07:00
Justin M. Keyes
7907b1fca5 test(vim.ui.open): mock failure on Windows
Problem:
On Windows, `rundll32` exits zero (success) even when given
a non-existent file.

Solution:
Mock vim.system() on Windows to force a "failure" case.
2023-07-21 14:38:17 +02:00
Chris AtLee
4448f594d3 docs(lsp): clean up LSP event documentation #24413
Alphabetize LSP events, and make formatting consistent.
2023-07-21 04:42:47 -07:00
marshmallow
519b9929e9 fix(ui.open): some URLs fail on Windows
Problem:
On Windows, `explorer.exe` fails to open some URLs, for example:

    :lua vim.ui.open('https://devdocs.io/#q=lua%20lua_call')

https://github.com/neovim/neovim/pull/23401#issuecomment-1641015704

Solution:
Use rundll32 instead.
2023-07-21 13:36:57 +02:00
zeertzjq
ca9f4a7cb1 docs: also change "vimL" and "viml" to "Vimscript" (#24414) 2023-07-21 16:30:05 +08:00
Brandon Simmons
58f9486144 fix(folds): update folds in Insert mode with fdm=indent (#24402)
Previously, when using foldmethod=indent, inserting an unindented line
would inadvertently open closed folds below it.
As a performance improvement, folds were only updated once, across all
lines, after Insert mode was exited.

Now, the performance improvement is no longer being used when
foldmethod=indent, so folds are updated multiple times during Insert
mode, but only across the lines that are changing, which preserves the
folds (and their open/close states) instead of recreating them.
2023-07-21 08:56:08 +08:00
zeertzjq
60d320dea3 fix(decoration_provider): don't leak memory on error (#24410) 2023-07-21 08:21:46 +08:00
Chris AtLee
63b3408551 feat(lsp): implement textDocument/diagnostic (#24128) 2023-07-20 09:03:48 +02:00
futsuuu
86ce3878d6 docs(lua): clarify fs.find() documentation #24394 2023-07-19 09:55:35 -07:00
Thomas Vigouroux
30a5c28c87 feat(decoration_provider): log errors as error messages 2023-07-19 16:56:25 +01:00
Mathias Fußenegger
2f22ed6a00 feat(lsp): handle multiple clients in omnifunc (#24381)
Also fixes https://github.com/neovim/neovim/issues/24369 by adding an
extra `vim.schedule` to ensure the `vim.fn.complete` call happens
outside of a luv callback
2023-07-19 07:10:11 +02:00