Commit Graph

18292 Commits

Author SHA1 Message Date
Michael Lingelbach
5a24284b8d
Merge pull request #14878 from mjlbach/fix/lsp-quickfix-focus 2021-06-22 11:45:04 -07:00
Björn Linse
b601f2548c
Merge pull request #14719 from snezhniylis/marktree_delete_node_iter_fix
Fix deletable nodes in MarkTree sometimes getting skipped
2021-06-22 13:48:22 +02:00
Matthieu Coudron
9a39a11807 fixup! vim-patch:8.2.3020: unreachable code (#14866) 2021-06-22 10:35:36 +02:00
snezhniylis
43479f0ad6 extmark: fix deletable nodes in MarkTree sometimes getting skipped
As per #14236, performing extmark cleanup in a certain namespace does
not guarantee removing all the extmarks inside given namespace.
The issue resides within the tree node removal method and results in
a couple of rare edge cases.

To demonstrate what causes this bug, I'll give an example covering one
of the edge cases.

=== AN EXAMPLE ===

   (A)         (B)         (C)         (D)         (E)
---------   ---------   ---------   ---------   ---------
  <0, 1>      <0, 1>      <0, 1>      <0, 1>      <0, 1>
  <0, 2>      <0, 2>      <0, 2>      <0, 2>      <0, 2>
  <0, 3>      <0, 3>      <0, 3>      <0, 3>      <0, 3>
  <0, 4>      <0, 4>      <0, 4>      <0, 4>      <0, 4>
  <0, 5>      <0, 5>      <0, 5>      <0, 5>      <0, 5>
  <0, 6>      <0, 6>      <0, 6>      <0, 6>      <0, 6>
  <0, 7>      <0, 7>      <0, 7>      <0, 7>      <0, 7>
  <0, 8>      <0, 8>      <0, 8>      <0, 8>      <0, 8>
  <0, 9>      <0, 9> *           *    <0, 9>  *   <0, 9>
[0, 10] *   [0, 10]     <0, 9>        [0, 11]     [0, 11]
  [0, 11]     [0, 11]     [0, 11]     [0, 12]     [0, 12]  *
  [0, 12]     [0, 12]     [0, 12]     [0, 13]     [0, 13]
  [0, 13]     [0, 13]     [0, 13]     [0, 14]     [0, 14]
  [0, 14]     [0, 14]     [0, 14]     [0, 15]     [0, 15]
  [0, 15]     [0, 15]     [0, 15]     [0, 16]     [0, 16]
  [0, 16]     [0, 16]     [0, 16]     [0, 17]     [0, 17]
  [0, 17]     [0, 17]     [0, 17]     [0, 18]     [0, 18]
  [0, 18]     [0, 18]     [0, 18]     [0, 19]     [0, 19]
  [0, 19]     [0, 19]     [0, 19]   [0, 20]     [0, 20]
[0, 20]     [0, 20]     [0, 20]

DIAGRAM EXPLANATION

* Every column is a state of the marktree at a certain stage.

* To make it simple, I don't draw the whole tree. What you see are
   2 leftmost parent nodes ([0, 10], [0, 20]) and their children placed
   in order `MarkTreeIter` would iterate through. From top to bottom.

* Numbers on this diagram represent extmark coordinates. Relative
   positioning and actual mark IDs used by the marktree are avoided
   for simplicity.

* 2 types of brackets around coordinates represent 2 different
   extmark namespaces (`ns_id`s).

* '*' shows iterator position.

ACTUAL EXPLANATION

Let's assume, we have two sets of extmarks from 2 different plugins:
  * Plugin1: <0, 1-9>
  * Plugin2: [0, 10-20]

1. Plugin2 calls
    `vim.api.nvim_buf_clear_namespace(buf_handle, ns_id, 0, -1)`
    to clear all its extmarks which results in `extmark_clear` call.

2. The iteration process goes on ignoring extmarks with irrelevant
    `ns_id` from Plugin1, until it reaches [0, 10], entering state (A).

3. At the end of cleaning up process, `marktree_del_itr` gets called.
    This function is supposed to remove given node and, if necessary,
    restructure the tree. Also, move the iterator to the next node.
    The bug occurs in this function.

4. The iterator goes backwards to the node's last child, to put it
    in the place of its deleted parent later. (B)

5. The parent node is deleted and replaced with its child node. (C)

6. Since now this node has 8 children, which is less than
    `MT_BRANCH_FACTOR - 1`, it get's merged with the next node. (D)

7. Finally, since at (B) the iterator went backward, it goes forward
    twice, skipping [0, 11] node, causing this extmark to persist,
    causing the bug. (E)

ANALYSIS AND SOLUTION

The algorithm works perfectly when the parent node gets replaced by
its child, but no merging occurs. I.e. the exact same diagram,
but without the (D) stage. If not for (D), it would iterate to <0, 9>
and then to [0, 11]. So, iterating twice makes sense. The actual problem
is in (C) stage, because the iterator index isn't adjusted and still
pointing to no longer existent node. So my solution is to adjust
iterator index after removing the child node.

More info: https://github.com/neovim/neovim/pull/14719
2021-06-22 10:32:46 +02:00
Michael Lingelbach
060255253f fix(lsp): handlers should focus quickfix list 2021-06-21 20:44:37 -07:00
jimman2003
b585f723bc
vim-patch:8.2.3020: unreachable code (#14866)
Problem:    Unreachable code.
Solution:   Remove the code. (closes vim/vim#8406)
2fb7495686
2021-06-20 14:20:43 -04:00
Jan Edmund Lazo
997a9c8792
Merge pull request #14849 from seandewar/demethod-curwin
fix(doc): various fixes
2021-06-19 20:18:30 -04:00
Michael Lingelbach
c16afaa1f8
Merge pull request #14851 from ckipp01/hlCodeLens 2021-06-19 15:44:48 -07:00
ckipp01
90bdb6e74d Add hl group docs for codelenses 2021-06-20 00:16:37 +02:00
Michael Lingelbach
db06fe11fa
Merge pull request #14861 from stevearc/diagnostic-loclist
fix(lsp): fix severity_limit logic in set_loclist
2021-06-19 11:08:34 -07:00
Sean Dewar
41332f6187
fix(doc/index.txt): various ex command fixes
Add :eval and :checkhealth (:eval was also missing upstream).
Fix :perlfile typo, add abbreviations for :perl, :perlfile and :perldo.
Remove :scriptversion; it hasn't been ported yet (#14611).

[skip ci]
2021-06-19 16:58:50 +01:00
Sean Dewar
b5c0ade437
fix(doc): :sleep! does not hide cursor
:sleep is the same as :sleep! in the port of v8.2.2366
2021-06-19 16:58:50 +01:00
Sean Dewar
7d025f2e8e
fix(doc): remove :promptfind and :promptrepl
:promptfind and :promptrepl are N/A for Nvim.
2021-06-19 16:58:39 +01:00
Sean Dewar
bb35ed6aaa
fix(doc): don't use method call syntax in examples
The method call syntax patches aren't ported yet.
2021-06-19 16:37:04 +01:00
Steven Arcangeli
43835ab0da fix(lsp): fix severity_limit logic in set_loclist 2021-06-19 07:35:17 -07:00
Thomas Vigouroux
7da86f55a7
Merge pull request #14833 from vigoux/tree-sitter-docs-tidy
docs(treesitter): tidy docs and remove legacy information
2021-06-19 08:48:35 +02:00
Björn Linse
96d83e2a66
Merge pull request #14824 from vigoux/extmarks-ts-perf
perf(extmarks): allow ephemeral extmarks past EOF to remove O(strlen^2) cost of tree-sitter
2021-06-18 12:37:27 +02:00
Jan Edmund Lazo
e2d3ad7bc4
vim-patch:8.2.3012: when 'rightleft' is set the line number is drawn reversed (#14839)
Problem:    When 'rightleft' is set the line number is sometimes drawn
            reversed.
Solution:   Adjust how space is handled. (Christian Brabandt, closes vim/vim#8389,
            closes vim/vim#8391)
29f0dc3689
2021-06-17 22:00:26 -04:00
Michael Lingelbach
a03ffe1602
Merge pull request #14840 from folke/lsp_float_cleanup
chore(lsp): removed deprecated floating preview methods
2021-06-16 23:39:10 -07:00
Folke Lemaitre
39d9713c5b
chore(lsp): removed deprecated floating preview methods 2021-06-17 07:48:40 +02:00
Jan Edmund Lazo
a72dfec855
release.sh: use stdin for release commit message (#14832)
v0.5.0 has too many commits since v0.4.0.
"git commit -m" triggers "Argument list too long" error.
2021-06-16 22:58:54 -04:00
Thomas Vigouroux
a85e8a186b
perf(extmarks): allow ephemeral extmarks past EOF 2021-06-16 20:15:47 +02:00
Thomas Vigouroux
3a438bbb44
docs(treesitter): mention query help page 2021-06-16 19:10:15 +02:00
Thomas Vigouroux
1b6b32c544
docs(treesitter): tidy docs and remove legacy information 2021-06-16 19:06:29 +02:00
James McCoy
c78816eb66
Merge pull request #14796 from glacambre/upgrade_to_gcc11
[RDY] ci: upgrade to gcc-11 on ubuntu-18.04
2021-06-16 12:13:07 -04:00
glacambre
04ad196b4e ci: upgrade to gcc-11 on ubuntu-18.04
In https://github.com/neovim/neovim/issues/14150 , investigations showed
that using an older gcc to build the appimage could result in severe
perf issues. This is because older gcc versions happily replace calls to
libc functions with their own, which happen to be less optimized than
their libc counterparts.

We fix this problem by upgrading to gcc-11 on ubuntu-18.04.
2021-06-16 17:54:14 +02:00
Lukas Reineke
f76f72a27b
fix(lsp): add bufnr to formatting requests
Add the buffer number to the `textDocument/formatting` request, so
that it is passed to the handler.
The built-in formatting handlers do not use the buffer number, but user
overrides should have access to it.
2021-06-15 23:53:43 -07:00
Shadman
3df0e475e8
docs(lsp): Clarify opts for show_line_diagnostics() 2021-06-15 23:21:04 -07:00
Thomas Vigouroux
6a77def1ee
Merge pull request #14454 from eltociear/patch-1
screen: fix typo in screen.c
2021-06-15 20:06:41 +02:00
Thomas Vigouroux
ec7b21918d
Merge pull request #14822 from eltociear/patch-2
option: fix typo in option.c
2021-06-15 20:02:18 +02:00
Ikko Ashimine
dbf8236764
option: fix typo in option.c
seperated -> separated
2021-06-16 01:08:23 +09:00
Michael Lingelbach
19ccda230e
Merge pull request #14817 from neovim/marvim/api-doc-update/master 2021-06-15 07:37:54 -07:00
marvim
45a7cd2c19 docs: regenerate 2021-06-15 06:20:14 +00:00
cbarrete
8cdffd42dd
docs(lsp): annotate call_hierarchy function as private 2021-06-14 23:19:23 -07:00
Jaehwang Jerry Jung
b8dfa2f112
fix(lsp): fix on_detach in lsp.diagnostic
`lsp.diagnostic.get_all()` was returning diagnotics for `:bwipeout`-ed
buffers because the diagnostic cache is not cleared. The first argument
of on_detach callback is the string "detach", not the bufnr.
2021-06-14 23:07:52 -07:00
Michael Lingelbach
44fad0a7a3
Merge pull request #14815 from folke/lsp_triples
fix(lsp): replace --- by a line in stylize_markdown
2021-06-14 23:04:34 -07:00
Folke Lemaitre
d7d1f40d2c
fix(lsp): replace --- by a line in stylize_markdown 2021-06-15 07:35:58 +02:00
Michael Lingelbach
b28d458f87
Merge pull request #14482 from elianiva/lsp/remove_hover_line
feat(lsp): hide triple - in hover window
2021-06-14 15:03:25 -07:00
Michael Lingelbach
98b597bf03
Merge pull request #14737 from rktjmp/lsp-guard-against-negative-lines
[RDY] fix(lsp): guard against negative diagnostic line numbers
2021-06-14 15:01:58 -07:00
elianiva
6488fca06b
feat(lsp): hide triple - in hover window. 2021-06-15 05:01:45 +07:00
Michael Lingelbach
ed61b7f053
Merge pull request #14814 from nanotee/fix_lsp_floats_presets
fix(lsp): allow 'rounded' and 'solid' in floats
2021-06-14 15:00:11 -07:00
Timothée Sterle
15039d7597
fix(lsp): allow 'rounded' and 'solid' in floats 2021-06-14 23:19:45 +02:00
Michael Lingelbach
8162792283
Merge pull request #13165 from mfussenegger/codelens
feat(lsp): Add codelens support
2021-06-14 14:15:57 -07:00
Thomas Vigouroux
32c6ad02b7
Merge pull request #14813 from neovim/marvim/api-doc-update/master
docs: regenerate
2021-06-14 22:56:23 +02:00
marvim
67c4ae1322 docs: regenerate 2021-06-14 20:39:02 +00:00
Michael Lingelbach
4284abd89a
Merge pull request #14804 from clason/rounded-borders
[RDY] feat(float): add rounded borders preset
2021-06-14 13:36:47 -07:00
Mathias Fussenegger
2bdd553c9e feat(lsp): Add codelens support 2021-06-14 21:45:14 +02:00
Christian Clason
5b6edc852f feat(float): add rounded borders preset
Add `borders = "rounded"` preset for `nvim_open_win`, equivalent to

  border = {"╭", "─", "╮", "│", "╯", "─", "╰", "│"}

Also add undocumented "solid" preset to docs.
2021-06-14 11:10:57 +02:00
Jan Edmund Lazo
2f0e5e7e67
Merge pull request #14802 from janlazo/vim-8.2.1354
vim-patch:8.2.{936,1354,2990}
2021-06-13 18:09:11 -04:00
Jan Edmund Lazo
8f4ba0a46b
vim-patch:8.2.2990: Jupyter Notebook files are not recognized
Problem:    Jupyter Notebook files are not recognized.
Solution:   Recognize *.ipynb. (closes vim/vim#8375)
2e66b0d137
2021-06-13 15:27:24 -04:00