71 Commits
Author SHA1 Message Date
Lewis Russell 5ee56f95c7 Merge pull request #19540 from lewis6991/cmd_refactor 2022-08-03 11:44:17 +01:00
Lewis Russellandzeertzjq cc1ceebf8f refactor: quickfix.c (#19603)
Simplify variable declarations

Co-authored-by: zeertzjq <zeertzjq@outlook.com>
2022-08-02 23:16:07 +01:00
Lewis Russell dc2745e9ea refactor(cmd): unify execute_cmd with do_one_cmd 2022-08-02 10:46:14 +01:00
Lewis Russell dc24cb668c refactor(cmd): hoist out some code into functions 2022-08-02 10:32:00 +01:00
Lewis Russell 1f847edc63 refactor(cmd): format do_one_cmd()
- Comment style
- Minimise scope of locals
2022-08-02 10:32:00 +01:00
Lewis Russell bcb4186cf6 refactor: replace_makeprg (#19570) 2022-08-01 12:02:53 +01:00
Lewis Russell d27e4d657b perf(api): optimize nvim_cmd (#19513)
Reduce the amount of string allocations and length calculations.

With the following benchmark:

```lua
total = 0
for _ = 1, loops do
  local start = now()
  vim.api.nvim_cmd({cmd = 'let', args = {'a', '=', '1'}}, {})
  total = total + (now() - start)
end
print('nvim_cmd', total / loops)
```

```
hyperfine 'nvim --clean test.lua +source +q'
```

Before: 234.5ms
After:  173.8ms
2022-07-27 23:35:01 +01:00
Lewis Russell d529523027 vim-patch:8.1.1763: evalfunc.c is still too big (#17952) 2022-07-24 15:02:39 +01:00
Lewis Russell 559ef3e903 feat(lua): allow vim.cmd to be indexed (#19238) 2022-07-20 12:29:24 +01:00
Lewis Russell d73c31a41f Merge pull request #19167 from dundargoc/refactor/conversion
refactor: enable -Wconversion warning for memline.c
2022-07-18 20:22:18 +01:00
Lewis Russell 5b609bbefb build: add github action annotations for clint 2022-07-04 14:20:10 +01:00
Lewis Russell ed429c00d7 refactor(fold): style #19175
* refactor(fold): update comment formatting
* refactor(fold): use post-increment/decrement
* refactor(fold): reduce scope of local variables
* refactor(fold): use booleans
2022-07-02 04:29:27 -07:00
Lewis Russell d23465534a fix(api): nvim_set_option_value for global-local options
global-local window options need to be handled specially. When `win` is
given but `scope` is not, then we want to set the local version of the
option but not the global one, therefore we need to force
`scope='local'`.

Note this does not apply to window-local only options (e.g. 'number')

Example:

   nvim_set_option_value('scrolloff', 10, {})       -- global-local window option; set global value
   nvim_set_option_value('scrolloff', 20, {win=0})  -- global-local window option; set local value
   nvim_set_option_value('number', true, {})        -- local window option

is now equivalent to:

   nvim_set_option_value('scrolloff', 10, {})
   nvim_set_option_value('scrolloff', 20, {win=0, scope='local'})  -- changed from before
   nvim_set_option_value('number', true, {win=0})                  -- unchanged from before

Only the global-local option with a `win` provided gets forced to local
scope.
2022-06-22 11:08:30 +01:00
Lewis Russell 34ae896b82 refactor(option): DRY get/set option value #19038
The main motivation for this is for the buf and win cases which need to
set up and restore context, and it's what specifically makes the
semantics of options nuanced, and thus this should not be repeated more
than once.

- nvim_get/set_option_value now share argument validation.
2022-06-21 19:09:50 -07:00
Lewis Russell e0aa1d87e8 test(treesitter): add benchmark #18989
add benchmark from #18109
2022-06-16 17:22:43 -07:00
Lewis Russell eab4d03a32 fix(treesitter): offset directive associates range with capture (#18276)
Previously the `offset!` directive populated the metadata in such a way
that the new range could be attributed to a specific capture. #14046
made it so the directive simply stored just the new range in the
metadata and information about what capture the range is based from is
lost.

This change reverts that whilst also correcting the docs.
2022-05-28 19:22:18 +02:00
Lewis Russell 4c97e17d38 refactor: remove unused USE_WCHAR_FUNCTIONS #18618
USE_WCHAR_FUNCTIONS is never defined and we don't trust libc wchar
functions anyway.
2022-05-20 20:31:32 -07:00
Lewis Russell 3eea66d65a feat(lsp): option to reuse_win for jump actions (#18577) 2022-05-18 21:03:24 +02:00
Lewis RussellandGregory Anders 6219331c4d feat(api): add win and buf to nvim_set_option_value
Co-authored-by: Gregory Anders <8965202+gpanders@users.noreply.github.com>
2022-05-17 14:48:10 +01:00
Lewis Russell 5c41165c8e feat(lua): allow some viml functions to run in fast
This change adds the necessary plumbing to annotate functions in funcs.c
as being allowed in run in luv fast events.
2022-05-17 10:29:33 +01:00
Lewis Russell 6786b6afad vim-patch:8.1.1687: the evalfunc.c file is too big (#17949)
Problem:    The evalfunc.c file is too big.
Solution:   Move testing support to a separate file.
https://github.com/vim/vim/commit/ecaa70ea29c269dd0dabd3cd5acdfa0ce42ccd54
2022-04-03 09:26:59 +08:00
Lewis Russell 3cc29b7f0d fix(keymap): don't coerce false to '' 2022-04-01 09:09:30 +01:00
Lewis Russell dc3bbd31a9 fix(api): delete all autocmds with the same ID 2022-04-01 08:38:58 +01:00
Lewis Russell 929293815b fix(api): improve autocmd error handling
- nvim_del_augroup_* now works with pcall
- nvim_del_autocmd now errors for invalid ids
2022-03-31 14:23:53 +01:00
Lewis Russell f1d5a2e82d chore: add .mailmap (#17453)
Consolidate commit author details

- Prefer user/email with either most commits or most recent commit
- Generally less preference for @users.noreply.github.com emails
- Avoided consolidating common names
2022-03-29 19:44:35 +02:00
Lewis Russell 81d7628c3f vim-patch:8.2.4644: redrawing too often when 'relativenumber' is set (#17756)
Problem:  Redrawing too often when 'relativenumber' is set.
Solution: Only redraw when the cursor line changed. (Lewis Russell,
          closes vim/vim#10040)
https://github.com/vim/vim/commit/1624639ec8a6c3c99e417a2990f2f02f0d0b6e10
2022-03-29 19:37:42 +08:00
Lewis Russell 58140a9428 feat(keymap): return nil from an expr keymap
For Lua callback expr keymaps, returning `nil` or `false` is equivalent
to an empty string
2022-03-24 13:59:20 +00:00
Lewis Russell fcd57980f9 chore: add additional compiler flags (#17815)
Added:
  - -Wdouble-promotion
  - -Wmissing-noreturn
  - -Wmissing-format-attribute
  - -Wsuggest-attribute={pure,const,malloc,cold}

Resolves: #343
2022-03-24 12:14:04 +01:00
Lewis Russell 7863e6b709 vim-patch:8.2.1078: highlight and match functionality together in one file (#17805)
Problem:  Highlight and match functionality together in one file.
Solution: Move match functionality to a separate file. (Yegappan Lakshmanan,
          closes vim/vim#6352)

https://github.com/vim/vim/commit/06cf97e714fd8bf9b35ff5f8a6f2302c79acdd03
2022-03-23 06:31:50 +08:00
Lewis Russell f63a52a0db vim-patch:8.1.1608: the evalfunc.c file is too big (#17807)
Problem:    The evalfunc.c file is too big.
Solution:   Move sign functionality to sign.c.

https://github.com/vim/vim/commit/b60d8514b8813e2f3acefd454efcccbe04ac135a
2022-03-23 06:31:06 +08:00
Lewis Russell 087a9603d0 vim-patch:8.1.1743: 'hlsearch' and match highlighting in the wrong place
Problem:  'hlsearch' and match highlighting in the wrong place.
Solution: Move highlighting from inside screen functions to highlight.c.

https://github.com/vim/vim/commit/bbca7732e8a3deb6e5dcf84739579a2667a75475
2022-03-20 22:01:56 +00:00
Lewis Russell 3c62a3f9dd vim-patch:8.1.1742: still some match functions in evalfunc.c
Problem:    Still some match functions in evalfunc.c.
Solution:   Move them to highlight.c.

https://github.com/vim/vim/commit/7dfb016d25e3e3e1f4411026dda21d1536f21acc
2022-03-20 22:01:56 +00:00
Lewis Russell 6566a4bdbd vim-patch:8.1.1734: the evalfunc.c file is too big
Problem:    The evalfunc.c file is too big.
Solution:   Move some functions to other files.

https://github.com/vim/vim/commit/29b7d7a9aac591f920edb89241c8cde27378e50b
2022-03-20 22:01:56 +00:00
Lewis Russell 9e66d27d37 fix(syntax.c): correct hunk from Vim patch 8.0.0647 (#17761) 2022-03-18 21:15:18 +08:00
Lewis Russellandzeertzjq 00effff569 vim-patch:8.1.1693: syntax coloring and highlighting is in one big file (#17721)
Problem:    Syntax coloring and highlighting is in one big file.
Solution:   Move the highlighting to a separate file. (Yegappan Lakshmanan,
            closes vim/vim#4674)

https://github.com/vim/vim/commit/f9cc9f209ede9f15959e4c2351e970477c139614

Name the new file highlight_group.c instead.

Co-authored-by: zeertzjq <zeertzjq@outlook.com>
2022-03-18 12:47:08 +08:00
Lewis Russell f3f67da340 refactor: column drawing
- move some logic out of win_line into specific easy to read
  sub-functions.

- remove drawing logic from get_sign_display_info.
2022-03-13 22:41:31 +08:00
Lewis Russell 8ba8f1a018 fix(signcol): always trigger a redraw
Whenever we change the size of the buffer signcol value, always trigger
a redraw.

Fixes: #17693
2022-03-12 16:27:11 +00:00
Lewis Russell 4be92ba90d refactor(decorations): unglobal decor_providers
Now all the decoration provider code is in one place, decor_providers no
longer need to be global.
2022-03-10 22:41:21 +00:00
Lewis Russell 1b054119ec refactor(decorations): move provider code
Move decoration provider code to a separate file.
2022-03-10 22:41:20 +00:00
Lewis Russell 2ab2af598e fix(extmarks): fix signs
Don't add sign extmarks to state->active. Instead when drawing signs,
perform a full line scan for sign marks. This allows decor_redraw_line
to be moved back inside the `!number_only` block in screen.c, which
prevents decor scans when redrawing the number column when
'relativenumber' is set.

Fixes: #17638
2022-03-08 22:08:57 +00:00
Lewis Russell 8e7446b3cb refactor(signcol): smarter invalidation (#17533)
Previously b_signcols was invalidated whenever a sign was added/removed
or when a buffer line was added/removed.

This change introduces a sentinel linenr_T into the buffer state which
is a line number used to determine the signcolumn. With this
information, we can invalidate the signcolumn less often. Now the
signcolumn is only invalidated when a sign or line at the sentinel line
number is removed.
2022-03-06 22:45:26 +01:00
Lewis Russell 30e4cc3b3f feat(decorations): support signs
Add the following options to extmarks:
  - sign_text
  - sign_hl_group
  - number_hl_group
  - line_hl_group
  - cursorline_hl_group

Note: ranges are unsupported and decorations are only applied to
start_row
2022-03-05 16:51:59 +00:00
Lewis Russell 9d53791cf8 fix(signcol): update cursor when signcol changes
Fixes #14195
2022-02-24 22:36:00 +00:00
Lewis Russell eb6e5d0991 refactor(signcol): store signcol in win_T 2022-02-24 22:36:00 +00:00
Lewis Russell e67cd22c38 fix(signcol): handle edge case with maximum value
50250542 failed to consider that the maximum passed to buf_signcols
is window scoped whereas the signcols value is buffer scoped. This can
lead to a bug where the signcolumn becomes incorrect if:
- global signcolumn is set to auto:N
- signcolumn in a window is changed locally to auto:M where M > N
- the buffer has a line with M or greater signs.
2022-02-24 22:35:59 +00:00
Lewis Russell b5bf4877c0 feat(highlight): support for blend in nvim_set_hl (#17516) 2022-02-24 09:50:05 -07:00
Lewis Russell 1e7cb2dcd9 fix(highlight): accept NONE as a color name (#17487)
... for when `ns=0`.

Also update the documentation of nvim_set_hl to clarify the set
behaviour.

Fixes #17478
2022-02-21 13:17:36 -07:00
Lewis Russell adad10284d refactor(lua): call loadfile internally
.. instead of luaL_loadfile

allows files to be cached
2022-02-18 10:39:45 +00:00
Lewis Russell dc24eeb9fe feat(highlight): support color names for cterm 2022-02-16 22:48:34 +00:00
Lewis Russell 876aaf2003 fix(highlight): allow globals to be cleared
- and reduce heap allocations

Fixes #17420
2022-02-16 20:22:09 +00:00
Lewis Russell d512be55a2 fix(api): re-route nvim_get_runtime_file errors
This allows nvim_get_runtime_file to be properly used via pcall
2022-02-15 23:00:28 +00:00
Lewis Russell 50250542c3 refactor(signs): more efficient signcol calc
When iterating signs to calculate the sign column, stop iterating when
we reach the maximum configured from 'signcolumn'.
2022-02-12 17:56:39 +00:00
Lewis Russell b518b577ea fix(lua): restore priority of the preloader
Neovim currently places its own loader for searching runtime files at
the front of `package.loaders`. This prevents any preloaders in
`package.preload` from being used. This change fixes that by moving the
default package preloader to run before Neovim's loader. For example,
LuaJIT provides preloaders for the built-in modules `ffi` and `bit`, so
this optimisation will improve the loading of those.
2022-02-05 21:46:04 +00:00
Lewis Russell 92e92f02e7 fix(diff): make algorithm work for vim.diff (#17300)
Fixes #17207
2022-02-05 09:49:48 -08:00
Lewis Russell 4aa0cdd3aa feat(highlight): ns=0 to set :highlight namespace
Passing ns=0 to nvim_set_hl will alter the `:highlight` namespace.
2022-02-01 11:54:12 +00:00
Lewis Russell f9080b24c4 fix(ts): escape lang when loading parsers (#16668)
When trying to load a language parser, escape the value of
the language.

With language injection, the language might be picked up from the
buffer. If this value is erroneous it can cause `nvim_get_runtime_file`
to hard error.

E.g., the markdown expression `~~~{` will extract '{' as a language and
then try to get the parser using `parser/{*` as the pattern.
2022-01-27 10:42:59 +01:00
Lewis Russell a34652ee84 fix(api): validate user_command name (#17004)
The name argument of nvim_add_user_command must begin with an uppercase
character. Check that is does.
2022-01-09 08:54:03 -07:00
Lewis Russell f89989dbf3 vim-patch:8.2.3921: the way xdiff is used is inefficient
Problem:    The way xdiff is used is inefficient.
Solution:   Use hunk_func instead of the out_line callback. (Lewis Russell,
            closes vim/vim#9344)
https://github.com/vim/vim/commit/d9da86e94ea8dbaa056270a666892945c40a6674
2021-12-28 21:12:44 +00:00
Lewis Russell e11a44aa22 feat(lua): add vim.spell (#16620) 2021-12-25 12:36:56 -07:00
Lewis Russell e0750f3e8a chore: suppress -Wunused-but-set-variable warns 2021-12-19 13:20:17 +00:00
Lewis Russell 6e6c36ca5b feat(treesitter): multiline match predicates 2021-12-12 12:16:42 +00:00
Lewis Russell 6c5e7bde9a feat(lua): allow passing handles to vim.b/w/t
vim.bo can target a specific buffer by indexing with a number, e.g:
`vim.bo[2].filetype` can get/set the filetype for buffer 2. This change
replicates that behaviour for the variable namespace.
2021-10-19 19:47:33 +01:00
Lewis Russell c5d76c5b9b fix(doc): example for vim.diff() (#15464) 2021-08-23 13:47:54 +02:00
Lewis Russell 783140c670 fix(doc): move vim.diff doc (#15456)
... to prevent bots from overwriting it
2021-08-22 13:52:56 +02:00
Lewis Russell 3d3c0c669d feat(api): add lua C bindings for xdiff (#14536)
* feat(api): add lua C bindings for xdiff

* chore: opt.hunk_lines -> opt.result_type

opt.on_hunk now takes precedence over opt.result_type

* chore: fix indents

Fix indents

* chore: change how priv is managed

Assign priv NULL and unconditionally apply XFREE_CLEAR to it when
finished.
2021-08-22 12:22:04 +02:00
Lewis Russell a6cdfa27d5 chore(deps): bump LibLUV to 1.34.1 and lua-compat-53 to 0.9 (#14985)
This bumps the bundled LibLUV to 1.34.1 in order to make the newly introduced `uv.fs_mkstemp` available in the official builds. (The minimum required version remains at 1.30.1.)

The bump of lua-compat-53 to 0.9 is needed to build with the updated LibLUV.
2021-07-05 14:30:50 +02:00
Lewis Russell 65b0918c24 signs: Change b_signcols_max -> b_signcols_valid
b_signcols_max isn't used to store the max value, it is use to
invalidate b_signcols.
2021-07-04 21:50:27 +01:00
Lewis Russell 9fbeaf7771 vim-patch:8.1.2205: sign entry structure has confusing name (#14289)
Problem:    Sign entry structure has confusing name.
Solution:   Rename signlist_T to sign_entry_T and prefix se_ to the fields.
2021-04-05 06:16:44 -04:00
Lewis Russell d82b599ea5 vim-patch:8.1.1899: sign_place() does not work as documented
Problem:    sign_place() does not work as documented.
Solution:   Make accept line numbers like line(). (Yegappan Lakshmanan,
            closes #4848)
2021-04-03 23:56:55 +01:00
Lewis Russell 5257bce979 vim-patch:8.1.1682: placing a larger number of ...
...signs is slow

Problem:    Placing a larger number of signs is slow.
Solution:   Add functions for dealing with a list of signs. (Yegappan
            Lakshmanan, closes #4636)
2021-04-03 23:56:54 +01:00
Lewis Russell 0b7e5eeb62 vim-patch:8.1.1631: displaying signs is inefficient
+ support for neovim's dynamic width signcolumn

Problem:    Displaying signs is inefficient.
Solution:   Avoid making multiple calls to get information about a placed
            sign. (Yegappan Lakshmanan, closes #4586)
2021-04-03 23:39:56 +01:00