aboutsummaryrefslogtreecommitdiff
path: root/CONTRIBUTING.md
Commit message (Collapse)AuthorAge
* build: replace LuaLS with EmmyLuaLewis Russell2026-09-07
| | | | | | | | | | | | | | | 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
* fix(style): drop clang-format #39514Riccardo Mazzarini2026-05-01
| | | | | | | Problem: C formatting is enforced in CI via uncrustify, but when working on C code clangd formats on save via clang-format, forcing users to manually run `make formatc` after they're done. Solution: disable clang-format.
* ci: drop cirrus #39321Justin M. Keyes2026-04-22
| | | | | | | | Problem: cirrus will shutdown soon, and we are running out of minutes anyway, which causes ci failures. Solution: Drop cirrus config.
* docs: miscJustin M. Keyes2026-03-16
|
* docs: api, messages, lsp, trustJustin M. Keyes2026-03-11
| | | | | gen_vimdoc.lua: In prepare for the upcoming release, comment-out the "Experimental" warning for prerelease features.
* ci: lint and format treesitter queriesRiley Bruins2026-02-21
| | | | | This also adds a `formatquery` rule to write the new format to the query files.
* docs: lsp, options, promptbufJustin M. Keyes2026-02-12
| | | | | | | | | | | | | Close #37630 Close #37682 Close #37762 Close #37785 Co-authored-by: Daniel Schmitt <d.schmitt@lansoftware.de> Co-authored-by: Duane Hilton <duane9@gmail.com> Co-authored-by: NeOzay <colpaert.benoit@gmail.com> Co-authored-by: Yi Ming <ofseed@foxmail.com> Co-authored-by: "Justin M. Keyes" <justinkz@gmail.com>
* build: ship "_core/*" as bytecode (built-into Nvim binary)Justin M. Keyes2025-12-30
| | | | | | | | | | | | | | | | | | | | | | | | | | Problem: We want to encourage implementing core features in Lua instead of C, but it's clumsy because: - Core Lua code (built into `nvim` so it is available even if VIMRUNTIME is missing/invalid) requires manually updating CMakeLists.txt, or stuffing it into `_editor.lua`. - Core Lua modules are not organized similar to C modules, `_editor.lua` is getting too big. Solution: - Introduce `_core/` where core Lua code can live. All Lua modules added there will automatically be included as bytecode in the `nvim` binary. - Move these core modules into `_core/*`: ``` _defaults.lua _editor.lua _options.lua _system.lua shared.lua ``` TODO: - Move `_extui/ => _core/ui2/`
* docs: miscJustin M. Keyes2025-11-23
| | | | | | | | | | Close #36441 Close #36631 Close #36656 Co-authored-by: Maria José Solano <majosolano99@gmail.com> Co-authored-by: glepnir <glephunter@gmail.com> Co-authored-by: "Mike J. McGuirk" <mike.j.mcguirk@gmail.com>
* docs: misc #36580Justin M. Keyes2025-11-16
| | | | | | | | Co-authored-by: nguyenkd27 <nguyenkd27@gmail.com> Co-authored-by: dundargoc <gocdundar@gmail.com> Co-authored-by: Yochem van Rosmalen <git@yochem.nl> Co-authored-by: Tuure Piitulainen <tuure.piitulainen@gmail.com> Co-authored-by: Maria Solano <majosolano99@gmail.com> Co-authored-by: tao <2471314@gmail.com>
* docs: dev-quickstart, dev-test #36304Justin M. Keyes2025-10-24
|
* docs: rename builtin.txt, eval.txt #34212Phạm Bình An2025-05-30
| | | | | | | | | | | | Problem: Despite the name, `builtin.txt` only includes Vimscript functions, which is confusing, especially to people who only use Lua to configure Nvim Solution: From justinmk's suggestion - Rename `builtin.txt` to `vimfn.txt` - Rename `eval.txt` to `vimeval.txt` - The tags `*builtin.txt*` and `*eval.txt*` should be kept for Vim-patches Closes #33743
* refactor(docs): remove unnecessary `@private`/`@nodoc` annotations (#33951)Maria José Solano2025-05-10
| | | | | * refactor(docs): remove `@private` annotations from local functions * refactor(docs): remove unnecessary `@nodoc` annotations
* build: move all generator scripts to `src/gen/`Lewis Russell2025-02-26
| | | | | | | | | | | - Move all generator Lua scripts to the `src/gen/` - Add a `.luarc.json` to `src/gen/` - Add a `preload.lua` to `src/gen/` - Add `src` to `package.path` so it aligns with `.luarc.json' - Fix all `require` statements in `src/gen/` so they are consistent: - `require('scripts.foo')` -> `require('gen.foo')` - `require('src.nvim.options')` -> `require('nvim.options')` - `require('api.dispatch_deprecated')` -> `require('nvim.api.dispatch_deprecated')`
* feat(ui): UI :detach commandJustin M. Keyes2025-02-10
| | | | | | | | | | | Problem: Cannot detach the current UI. Solution: - Introduce `:detach`. - Introduce `Channel.detach`. Co-authored-by: bfredl <bjorn.linse@gmail.com>
* build: remove `lintcommit` from `lint` targetdundargoc2024-12-23
| | | | | | | Previously, `make lint` would invoke `lintcommit` which would fail if there were fixup or other disallowed commits. This would disrupt local development as developers would often want non-commit linting to work early on without needing to adhere to the strict commit rules.
* docs: misc (#28837)dundargoc2024-06-07
| | | | | | | | | | | | | | | Co-authored-by: Danymat <d.danymat@gmail.com> Co-authored-by: Gregory Anders <greg@gpanders.com> Co-authored-by: Jakub Okoński <jakub@okonski.org> Co-authored-by: John L. Villalovos <john@sodarock.com> Co-authored-by: Maria José Solano <majosolano99@gmail.com> Co-authored-by: Michaili K <git@michaili.dev> Co-authored-by: TheLeoP <eugenio2305@hotmail.com> Co-authored-by: Tobias Schmitz <tobiasschmitz2001@gmail.com> Co-authored-by: W20MC <157727813+W20MC@users.noreply.github.com> Co-authored-by: Will Hopkins <willothyh@gmail.com> Co-authored-by: Yifan Hu <141280278+b0ae989c@users.noreply.github.com> Co-authored-by: glepnir <glephunter@gmail.com> Co-authored-by: prljav <74116121+prljav@users.noreply.github.com>
* docs: newsJustin M. Keyes2024-05-15
| | | | Set dev_xx.txt help files to use "flow" layout.
* docs(CONTRIBUTING): mention process of changing ft detection (#28598)zeertzjq2024-05-02
|
* docs: misc #24163Justin M. Keyes2024-04-30
| | | | | | | | | | - Also delete old perl scripts which are not used since 8+ years ago. fix #23251 fix #27367 ref https://github.com/neovim/neovim/issues/2252#issuecomment-1902662577 Helped-by: Daniel Kongsgaard <dakongsgaard@gmail.com> Co-authored-by: Kevin Pham <keevan.pham@gmail.com>
* build: do not use GIT_REPOSITORY for local dependenciesdundargoc2024-04-25
| | | | | | | | | This reverts a large portion of 2c1e8f7e96926f70151d737ea32f1e6ff3589263. The conclusion from that commit is incorrect: local builds are not used/updated correctly so much as it's not used at all. Instead the build will always use `master` branch rather than the current files.
* docs: remove mentions of scan-builddundargoc2024-04-17
| | | | | These same checks are already checked by the clang-analyzer job, so this duplication is not necessary.
* build: use `GIT_REPOSITORY` for local URLsdundargoc2024-03-23
| | | | | | | `GIT_REPOSITORY` will cause cmake to rebuild if local dependency changes, which isn't the case for `URL`. Also document how to test a different commits of a dependency.
* feat(docs): replace lua2dox.luaLewis Russell2024-02-27
| | | | | | | | | | | | | | | | | | | | | | | | | | 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).
* docs: include backtrace for bug-crash #27065Jongwook Choi2024-01-28
| | | | | | | | | | | | Github Issue template: - Add pointers to |dev-tools-backtrace|. - Add pointers to CONTRIBUTING.md (Reporting Problems), which includes additional helpful instructions for issue reporting. - Search existing issues: include label `bug-crash` as well as `bug`. CONTRIBUTING.md: - Fix broken link on "stacktrace" after moving to help from wiki.
* build(docs): separate lint job to validate vimdoc #27227Jongwook Choi2024-01-28
| | | | | | | | | | | | | | | | | | | | | | | | | Summary: Separate the lint job (`make lintdoc`) to validate runtime/doc, it is no longer as a part of functionaltest (help_spec). Build (cmake) and CI: - `make lintdoc`: validate vimdoc files and test-generate HTML docs. CI will run this as a part of the "docs" workflow. - `scripts/lintdoc.lua` is added as an entry point (executable script) for validating vimdoc files. scripts/gen_help_html.lua: - Move the tests for validating docs and generating HTMLs from `help_spec.lua` to `gen_help_html`. Added: - `gen_help_html.run_validate()`. - `gen_help_html.test_gen()`. - Do not hard-code `help_dir` to `build/runtime/doc`, but resolve from `$VIMRUNTIME`. Therefore, the `make lintdoc` job will check doc files on `./runtime/doc`, not on `./build/runtime/doc`. - Add type annotations for gen_help_html.
* docs: various #25289Justin M. Keyes2024-01-18
| | | | | | Co-authored-by: Jongwook Choi <wookayin@gmail.com> Co-authored-by: Oliver Marriott <hello@omarriott.com> Co-authored-by: Benoit de Chezelles <bew@users.noreply.github.com> Co-authored-by: Jongwook Choi <wookayin@gmail.com>
* docs: move vim-patch wiki page to runtime documentationdundargoc2023-12-13
|
* docs: add wiki FAQ to the runtime documentation (#26539)dundargoc2023-12-13
| | | | | | Problem: Wiki contents are not discoverable and hard to maintain. Solution: Move FAQ to runtime docs. Co-authored-by: Christian Clason <c.clason@uni-graz.at>
* docs: move minimum reproduction template from wiki to repodundargoc2023-12-12
| | | | | Instead of a markdown file, just use a lua file instead that users can use directly.
* build: remove PVSdundargoc2023-11-12
| | | | | | | We already have an extensive suite of static analysis tools we use, which causes a fair bit of redundancy as we get duplicate warnings. PVS is also prone to give false warnings which creates a lot of work to identify and disable.
* docs: update contributingdundargoc2023-11-10
|
* build: enable ASAN for MSVCdundargoc2023-11-05
| | | | | | | | | | | | | | | | | It is enabled with ENABLE_ASAN_UBSAN like other compilers. Technically it only enables ASAN as UBSAN is not available, meaning to make the variable names fully correct we'd need to separate it into two checks: ENABLE_ASAN and ENABLE_UBSAN, but the convenience of combining them into the same flag outweighs the theoretical correctness. Also note in CONTRIBUTING.md that debug builds in ASAN is not supported. Technically it is the debug runtime that is not supported, which cmake automatically enables when using the debug build type. However, neovim can't be built with debug builds without linking to the debug runtime since the third party libraries has likely been linked to the debug runtime if it was built with debug build type. This technicality is likely uninteresting to the potential developer and it's easier to just say to use a release build type.
* docs: Lua docstrings guidance #25345dundargoc2023-09-27
| | | | | | Recommend adding a space after i.e. `--- @see`. The "space" variant is common for the vast majority of docstring formats such as doxygen, javadoc and typescript.
* docs: misc #24561Justin M. Keyes2023-09-20
| | | | fix #24699 fix #25253
* build: fix "make iwyu" not working (#24873)zeertzjq2023-08-26
|
* docs(generators): bake into cmakeLewis Russell2023-08-23
|
* feat: add .luarc.json (#24592)Lewis Russell2023-08-07
|
* docs: remove "#" comment char in @returnJustin M. Keyes2023-08-03
| | | | | | | Everything after a "#" char is a "description" comment, i.e. luals won't treat it as a type, name, etc. But "#" should not be present in the generated docs (such as :help docs). https://github.com/LuaLS/lua-language-server/wiki/Annotations#return
* docs: miscJustin M. Keyes2023-08-03
| | | | Co-authored-by: Kevin Pham <keevan.pham@gmail.com>
* docs: CONTRIBUTING.md updates (#24280)Lewis Russell2023-07-07
|
* docs #22363Justin M. Keyes2023-06-19
| | | | | | | | | Co-authored by: zeertzjq <zeertzjq@outlook.com> Co-authored by: Steven Todd McIntyre II <114119064+stmii@users.noreply.github.com> Co-authored by: nobe4 <nobe4@users.noreply.github.com> - docs: mention --luadev-mod to run with lua runtime files When changing a lua file in the ./runtime folder, a new contributor might expect changes to be applied to the built Neovim binary.
* build: add ubsan default optionsii142023-05-15
| | | | Use print_stacktrace=1 for UBSAN by default.
* build: add "ci" configure preset to reduce verbositydundargoc2023-04-23
| | | | | | | | | | `cmake --preset ci` is equivalent to `cmake -B build -G Ninja -D CI_BUILD=ON` Also remove build presets as they're not very useful without workflow presets, which are only available in schema versions 6 and above.
* build!: rename sanitizer options from CLANG_* to ENABLE_*ii142023-03-17
|
* revert: "build: enable cmake workflow presets (#21860)"dundargoc2023-03-11
| | | | | | | | This reverts commit 00a976129b603b60f1e309ee7484cb0f4b5a9792. Visual Studio fails the build if the CMakePresets.json version is too high and the CMakePresets.json integration is enabled. Closes https://github.com/neovim/neovim/issues/22608.
* ci: split ci.yml into a test workflow and a build test workflow (#22302)dundargoc2023-02-18
| | | | | Having a workflow that only builds neovim without running all of the tests is a cheap way to test the build still works without burning too much CI time.
* build(ci): let ASAN print tracebacks for more errors (SIGABORT, SIGILL)bfredl2023-02-10
|
* ci: simplify lintcommit output (#22204)dundargoc2023-02-10
| | | | | | - Suggest reading CONTRIBUTING.md once, not for each commit failure - Suggest using "fix" type if none of the provided types are appropriate - Remove "dist" type. It's rarely used and can be replaced by using the "build" type
* build: enable ccache by default if available (#22020)dundargoc2023-01-28
| | | | | | | | Initial benchmarks show that this gives a nice 50% compile time reduction for neovim. This shouldn't affect users or CI, but it's a nice speedup for local development. The C_COMPILER_LAUNCHER target property is only supported by Makefiles and Ninja generators only, so this won't give a speedup when using the Xcode and Visual Studio generators even if ccache is available.