* build(contrib): add zsh completion
this is not part of the build system yet, so packager managers are
supposed to install the file by themselves.
bash doesn't seem to provide shell completion, zsh embeds its own
completion that is bundled with vim's.
Instead of copying zsh's completion, this generated one via
https://github.com/RobSis/zsh-completion-generator
---------
Co-authored-by: Eisuke Kawashima <e.kawaschima+github@gmail.com>
Problem:
RelWithDebInfo generates redundant flags:
Compilation: /usr/bin/cc -O2 -g -Og -g
The `CMAKE_C_FLAGS_RELWITHDEBINFO` variable is being modified in a way
that caused duplicate `-Og` and `-g` flags to be added. The resulting
flags were `-O2 -g -Og -g`.
- `-Og` (Optimize for debugging) and `-O2` (Optimize for performance)
are different optimization levels. We can't use both at once.
- The duplicate `-g` flag is redundant and no effect.
multiple -O flags has no effect for code, just redundant.
> If you use multiple -O options, with or without level numbers, the last such option is the one that is effective.
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
Solution:
Adjust the flags to use the more appropriate `-O2 -g`.
Compilation: /usr/bin/cc -O2 -g
BEFORE:
```
:verbose version
NVIM v0.11.0-dev-1443+ge00cd1ab40
Build type: RelWithDebInfo
LuaJIT 2.1.1734355927
Compilation: /usr/bin/cc -O2 -g -Og -g -flto -fno-fat-lto-ob
jects -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict
...
```
AFTER:
```
:verbose version
NVIM v0.11.0-dev-e00cd1ab4-dirty
Build type: RelWithDebInfo
LuaJIT 2.1.1734355927
Compilation: /usr/bin/cc -O2 -g -flto -fno-fat-lto-objects -
Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-protot
...
```
Problem:
`termopen` has long been a superficial wrapper around `jobstart`, and
has no real purpose. Also, `vim.system` and `nvim_open_term` presumably
will replace all features of `jobstart` and `termopen`, so centralizing
the logic will help with that.
Solution:
- Introduce `eval/deprecated.c`, where all deprecated eval funcs will live.
- Introduce "term" flag of `jobstart`.
- Deprecate `termopen`.
Problem: Adding support for modern Nvim features (reflow, OSC 8, full
utf8/emoji support) requires coupling libvterm to Nvim internals
(e.g., utf8proc).
Solution: Vendor libvterm at v0.3.3.
- Updates nixpkgs to source a necessary Tree-sitter version
- Updates to a new llvm version as the old one was removed from nixpkgs
- Properly moves `doCheck` from a regular param to an attribute option
Problem:
The documentation flow (`gen_vimdoc.py`) has several issues:
- it's not very versatile
- depends on doxygen
- doesn't work well with Lua code as it requires an awkward filter script to convert it into pseudo-C.
- The intermediate XML files and filters makes it too much like a rube goldberg machine.
Solution:
Re-implement the flow using Lua, LPEG and treesitter.
- `gen_vimdoc.py` is now replaced with `gen_vimdoc.lua` and replicates a portion of the logic.
- `lua2dox.lua` is gone!
- No more XML files.
- Doxygen is now longer used and instead we now use:
- LPEG for comment parsing (see `scripts/luacats_grammar.lua` and `scripts/cdoc_grammar.lua`).
- LPEG for C parsing (see `scripts/cdoc_parser.lua`)
- Lua patterns for Lua parsing (see `scripts/luacats_parser.lua`).
- Treesitter for Markdown parsing (see `scripts/text_utils.lua`).
- The generated `runtime/doc/*.mpack` files have been removed.
- `scripts/gen_eval_files.lua` now instead uses `scripts/cdoc_parser.lua` directly.
- Text wrapping is implemented in `scripts/text_utils.lua` and appears to produce more consistent results (the main contributer to the diff of this change).
- remove "ran-" prefix from touch files as it's redundant since the
they're already in the directory named `touches`.
- Include `contrib` when formatting with `make formatlua`.
- Use TARGET_FILE generator expression instead of assuming the
executable location.
- reuse logic that determines whether to use lua or luajit.
- add translations to the `nvim` target.
Makefile improvements:
- rename variable `CMAKE_PRG` to `CMAKE` to make it more consistent with
the builtin `MAKE` variable.
- stop propagating flags to generator. Users should use cmake for
non-standard use cases.
- remove `+` prefix from targets. If the user for whatever reason wants
to dry-run a target then they should be able to.
* fix(flake): clang-tools moved to nativeBuildInputs
Buildtime binaries should go in `nativeBuildInputs`
Before `clang-tools` version was overwriten breaking the Lsp.
Relevant issues:
https://github.com/NixOS/nixpkgs/issues/76486
* remove cmake, available in the nixpkgs derivation
- YouCompleteMe is unnecessary since Nvim LSP works well.
- vim-addon-local-vimrc is not needed since we added `.editorconfig`.
- Inline flake8 arguments. Eventually we will remove all python code,
don't need a top-level `.flake8` file meanwhile.
Problem:
- The layout of the doxygen HTML "dev docs" has been broken for 1+ years.
- There is no evidence that anyone uses the doxygen HTML.
- In the meantime since we introduced the doxygen HTML pages, the Nvim
C docstrings have been surfaced in other ways:
- Nvim LSP client
- Generated :help docs like ":help api" and ":help ui".
Solution:
- Remove `contrib/doxygen/` from neovim repo.
- Note: keep `src/Doxyfile`, it is used by `scripts/gen_vimdoc.py`. ☠️
- Remove `doc/dev/` from website. https://github.com/neovim/neovim.github.io/pull/291
- Remove doxygen job from the neovim/doc repo. https://github.com/neovim/doc/pull/28
- Future/ongoing: ":help dev" and other :help docs will continue to be
improved as the "source of truth" for developer-related docs.
ref https://github.com/neovim/neovim/pull/824
The Sumneko Lua language server has matured quite a bit and many
Neovim developers use it while working on Neovim. Having a default
configuration for Neovim development is a nice convenience (and
dovetails well with the auto-generated compile_command.json for C
development).
The file is shipped under `contrib` and users can make use of it by
symlinking to `.luarc.json` in the project root.
* refactor: disable formatting for attribute in macro
* fixup: disable/enable uncrustify with uncrustify:indent-off/on
* fixup: stop indenting contents inside braces in case
* fixup: remove case brace if no variable declaration