Commit Graph

6042 Commits

Author SHA1 Message Date
Lewis Russell
69371f0148 feat(install)!: migrate to latest async.nvim impl (#7856)
Provides significantly simpler blocking installation and update.
2025-05-16 18:33:52 +02:00
Christian Clason
7a4a35de3e refactor(indent): use `node:byte_length() 2025-05-16 15:00:37 +02:00
Christian Clason
b0a20057b0 feat(config)!: remove ignore_install
This was only useful for no longer supported `auto_install` option.
2025-05-16 08:48:27 +02:00
Christian Clason
864e75a85d fix(c,cpp,fsharp,idl,powershell,sql,systemtap): remove unneeded escapes 2025-05-13 18:12:58 +02:00
Christian Clason
25f08b82af fix(hcl): remove unnecessary escapes 2025-05-13 18:12:58 +02:00
Christian Clason
6b55bc0fab ci(test): remove parser cache
Since installation now installs parsers _and_ queries, caching parsers
doesn't allow skipping the installation step (and caching queries does
not pay off).
2025-05-13 18:12:58 +02:00
Christian Clason
e8bfe271b0 docs: update to rewrite
This updates

* README
* CONTRIBUTING
* the `:h nvim-treesitter` documentation

to the current state of `main`. It also adds a pull request template for
adding a new language.
2025-05-12 18:43:41 +02:00
Christian Clason
a7ab4381ae feat(parsers): update t32, query, markdown, markdown_inline, meson, hyprlang, mlir, cpp, cylc 2025-05-12 18:43:41 +02:00
Christian Clason
f10bcac66b feat(parsers): update vim, gren, comment, purescript, elm, matlab, javadoc, swift, godot_resource, query, vimdoc, ledger 2025-05-12 18:43:41 +02:00
Christian Clason
dc8f3415a7 feat!: update tier 1 parsers to versions 2025-05-12 18:43:41 +02:00
Christian Clason
18bb653917 feat(locals)!: remove locals module
Problem: `locals.lua` was neither used nor tested, and providing it goes
against the goal of nvim-treesitter not being a required dependency for
other plugins.

Solution: Remove the module and document that the queries are provided
as-is for limited backward compatibility only.
2025-05-12 18:43:41 +02:00
Christian Clason
53dccb3a77 feat(tests)!: new infrastructure based on makefile
Problem: Not easy to run all checks and tests locally. Redundant CI
workflows.

Solution: Separate CI into two workflows:
 * lint: Lua files (stylua, luals), query files (valid captures,
   predicates, directives using tsqueryls), docs
   (SUPPORTED_LANGUAGES.md) -- does not need parser installation
 * tests: parsers (ABI compatibility), query files (tsqueryls on
   Linux/macOS; nvim on Windows), highlight and indent tests (separated
   for better readability) -- needs parser installation (but only once)

Switch to https://github.com/nvim-treesitter/highlight-assertions fork
with ABI 15 support.

Run all tests (on Linux and macOS) through `make` (`formatlua`,
`checklua`, `lintquery`, `formatquery`, `checkquery`, `docs`, `tests`),
which downloads and caches all necessary dependencies.

Remove `update-readme` workflow (replaced by lint job on PRs).
2025-05-12 18:43:41 +02:00
Riley Bruins
4e906caca3 refactor(locals): fix type annotations and warnings 2025-05-12 18:43:40 +02:00
Christian Clason
afaf01ebd3 tests(angular): don' reset filetype
`htmlangular` filetype support is now included in Nvim, so don't set
the filetype.
2025-05-12 18:43:40 +02:00
Christian Clason
75ee7ff2f0 tests(gleam): fix assert tests that no longer parse correctly 2025-05-12 18:43:40 +02:00
Christian Clason
a83f2d1417 feat(vim): update parser and queries
* add support for `:substitute` command
* add support for `=` lua chunks
2025-05-12 18:43:40 +02:00
Christian Clason
3d0e642764 feat(gdscript)!: update parser and queries
`(underscore)` node was removed
2025-05-12 18:43:40 +02:00
Christian Clason
f7c5f7de55 feat(parsers): update robot, earthfile, racket, javadoc, scheme, t32, tact, templ, kotlin, tcl, meson, mlir 2025-05-12 18:43:40 +02:00
Christian Clason
11736494df fix(indent): don't skip parsing for yaml 2025-05-12 18:43:40 +02:00
Christian Clason
44bb06bc12 chore: remove lockfile and update script
`main` branch and `parsers.lua` is the record of truth now
2025-05-12 18:43:40 +02:00
Christian Clason
53d7118483 refactor(lua): fix some luals warnings 2025-05-12 18:43:40 +02:00
Christian Clason
bdc2e01958 feat(install)!: always generate from json if possible 2025-05-12 18:43:40 +02:00
Christian Clason
522e0c6991 feat(setup)!: remove ensure_install field
Instead, call `require('nvim-treesitter').install( { ... } )` manually.

This gives users full control over how they want to install parsers
(sync, from grammar, limited concurrency) and obviates the need for
calling `setup` for most users.
2025-05-12 18:43:40 +02:00
Christian Clason
73adbe597e feat(parsers): update swift, tact, tcl, templ, mlir, kotlin, koto, elixir, php_only, ocaml, ocaml_interface, php, astro, slang, slim, blade, gleam, v, ledger 2025-05-12 18:43:40 +02:00
Christian Clason
037ac775e1 feat: add .tsqueryrc.json 2025-05-12 18:43:40 +02:00
Christian Clason
ed1f573aae feat(parsers): update ziggy, ziggy_schema, bibtex, latex 2025-05-12 18:43:40 +02:00
Christian Clason
308c9b26c7 feat(tcl)!: update parser and queries 2025-05-12 18:43:40 +02:00
Christian Clason
990110336c feat(julia)!: update parser and queries 2025-05-12 18:43:40 +02:00
Christian Clason
c13511c884 feat(parsers): update nickel, sql, devicetree, dhall, htmldjango, t32, gap, javadoc, templ, jinja, tera, verilog, meson, mlir, typespec, wit, phpdoc, superhtml, git_config, swift, terraform, vim, koto, rasi, rescript, bp, enforce, erlang, jinja_inline, cmake, fennel, comment, slint, elm, rust, hcl 2025-05-12 18:43:40 +02:00
Christian Clason
cbfe8a20c7 feat(html): use gsub for mimetype lookup 2025-05-12 18:43:40 +02:00
Christian Clason
328ee3db54 fix(install): skip tier 4 parsers when installing and updating 2025-05-12 18:43:40 +02:00
Christian Clason
9365cf8a97 fix(install): don't prompt on installed parsers (skip)
Use `:TSInstall!` or `force = true` to reinstall.
2025-05-12 18:43:40 +02:00
Christian Clason
12e0246e4f fix(formatter): increase match limit
Problem: Some very long patterns were not formatted correctly.

Solution: Increase the match limit when iterating to 1024.
2025-05-12 18:43:40 +02:00
przepompownia
6fe0032640 feat(install): allow pass callback to update()
Problem: cannot run `:TSUpdate synchronously`

Solution: pass callback used after exiting jobs
(like in `install-parsers`).
2025-05-12 18:43:40 +02:00
Sebastian Lyng Johansen
02a1a0537c fix(install): early return if parser_info does not exist 2025-05-12 18:43:40 +02:00
Christian Clason
a9f34d5a76 feat(parsers): rework tiers
* stable: updates follow semver releases (todo)
* unstable: updates follow HEAD (default)
* unmaintained: no automatic updates
* unsupported: no updates, cannot be installed
2025-05-12 18:43:40 +02:00
Christian Clason
188bbf7a09 fix(ci): update to changed neovim release name 2025-05-12 18:43:40 +02:00
Christian Clason
aaf5b7fdf7 fix(install): return error code in callback 2025-05-12 18:43:40 +02:00
Christian Clason
a2841d29d7 feat(install)!: bump minimum tree-sitter version to 0.24 2025-05-12 18:43:40 +02:00
Christian Clason
c5a8c9d01a ci(tests): add optional workflow for generating grammars
run on PR by adding label `ci:generate` or manually
2025-05-12 18:43:40 +02:00
Christian Clason
83dae49a10 feat(install): allow specifying max jobs 2025-05-12 18:43:40 +02:00
Christian Clason
ab230eadd4 feat(config)!: remove auto_install
use https://github.com/lewis6991/ts-install.nvim instead
2025-05-12 18:43:40 +02:00
Christian Clason
a8677385b7 feat(install)!: drop support for git
Problem: Using git for installing parsers can lead to data loss if in a
git commit buffer.

Solution: Only support downloading via curl+tar, which are installed on
all supported platforms (since Windows 10). Curl will also be required
for WASM parsers (and for `vim.net.download()`).
2025-05-12 18:43:40 +02:00
Christian Clason
214cfcf851 feat!: use tree-sitter build 2025-05-12 18:43:40 +02:00
Christian Clason
c17de56890 feat!: track parser revision in Lua
Problem: Tracking parser revision in lockfile and allowing override
through the parsers module complicates the code. In addition, only
revision changes are handled robustly, not changes to other installation
info.

Solution: Track parser revision in the parsers module directly. Reload
parser table on every install or update call. Support modifying parser
table in a `User TSUpdate` autocommand.
2025-05-12 18:43:40 +02:00
Christian Clason
054080bf59 fix: vim.tbl_flatten is deprecated 2025-05-12 18:43:40 +02:00
Christian Clason
5a38df5627 feat(install)!: generate from json instead of requiring node
Problem: Many parsers require node/npm to evaluate the `grammar.js`
before being able to generate a parser from it.

Solution: Generate from `grammar.json` instead, which is fully resolved.
Drops `node` and `npm` as (optional) requirements for nvim-treesitter.

Note that this requires parsers to commit the generated json iff the
grammar requires evaluation (which is currently the case for all tracked
languages).
2025-05-12 18:43:40 +02:00
nvim-treesitter-bot[bot]
8f8cf7144d bot(readme): update 2025-05-12 18:43:40 +02:00
Christian Clason
c70daa36dc feat(install)!: add explicit path field to parser info (#6476)
Problem: Using `url` for both remote repo and local path complicates the
code.

Solution: Add `path` field that overrides `url` and bypasses
git-specific manipulations, i.e., the contents of the `path` are used
as-is (no git repo needed).

This means `:TSUpdate` will skip such parsers; use `:TSInstall!` instead
after making local changes.

---------

Co-authored-by: Lewis Russell <lewis6991@gmail.com>
2025-05-12 18:43:40 +02:00
Lewis Russell
0bb981c876 fix: do not use vim.iter (#6469) 2025-05-12 18:43:40 +02:00