IndianBoy42 / tree-sitter-just

Treesitter grammar for Justfiles (casey/just)
Apache License 2.0
146 stars 26 forks source link

tree-sitter-just

Tree-sitter grammar for Justfiles (casey/just)

Usage

Neovim

Just queries are now part of nvim-treesitter! Please follow installation instructions at https://github.com/nvim-treesitter/nvim-treesitter.

Helix

Just queries are also part of Helix! They should be installed by default.

Manual Installation (Neovim)

This grammar can also be used locally, as a plugin with Plug, Packer, or a manual clone. This also requires a simple ftdetect plugin for detecting justfiles.

Packer:

use "IndianBoy42/tree-sitter-just"

Plug

Plug 'IndianBoy42/tree-sitter-just'

Manual

git clone https://github.com/IndianBoy42/tree-sitter-just \
  ~/.local/share/nvim/site/pack/tree-sitter-queries/start/tree-sitter-just

You can then do require('tree-sitter-just').setup({}) to register the parser with tree-sitter. You can then do TSInstall/TSUpdate as usual to install the parser

You can also add the parser manually using (This is similar to what is done in require"tree-sitter-just".setup({}))

require("nvim-treesitter.parsers").get_parser_configs().just = {
  install_info = {
    url = "https://github.com/IndianBoy42/tree-sitter-just", -- local path or git repo
    files = { "src/parser.c", "src/scanner.c" },
    branch = "main",
    -- use_makefile = true -- this may be necessary on MacOS (try if you see compiler errors)
  },
  maintainers = { "@IndianBoy42" },
}

Don't forget to :TSInstall after adding this. With this method you do not have to add this repo as a plugin.

Please note that the nightly version of nvim-treesitter, at least since 5b90ea2abaa4303b9205b5c9002a8cdd0acd11a5 (2024-01-19) is required.

Manual Installation (Helix)

To use the latest version of this repository with Helix, you just need to update the languages.toml file, often at ~/.config/helix/languages.toml:

[[grammar]]
name = "just"
# Use this line to use a local dependency
source = { path = "/path/toa/tree-sitter-just" }
# Use this line to use a git dependency
# source = { git = "https://github.com/IndianBoy42/tree-sitter-just", rev = "7ad370abd9eb80e9e5266ea04a1e77d5b1692321" }

[[language]]
name = "just"
scope = "scope.just"
file-types = ["justfile", "JUSTFILE", "just"]

After updating languages.toml, run hx --grammar build to update.

To get syntax highlighting and other query-based features you will need to place the queries in a queries/just directory within your runtime folder. To link to a cloned repository, the following should work:

# Change the second path to your runtime directory if not at `~/.config/helix/runtime`
ln -s $(realpath queries-flavored/helix/) ~/.config/helix/runtime/queries/just

Contributing

The easiest way to get started is, fittingly, with just.

# Make sure dependencies are available
just setup

# Create autogenerated files and run tests
just test

# Create autogenerated files without testing
just gen

# Check linting rules
just lint

# Apply formatting
just fmt

Note that just lint and just fmt must pass for all changes. You can verify these automatically before committing by running just pre-commit-install.

All our queries are in queries-src. This directory is what gets tested by tree-sitter, and should be usable by helix. To generate queries for NeoVim, run ./build-flavored-queries.py (this is run as part of npm run gen).

You can use the :InspectTree command to explore the resulting parse tree, and :Inspect to view highlight groups.

Quirks of Just

Just currently doesn't seem to support comments between attributes or within if statements, so we do not either.

[private]
# hello!
[no-cd]
foo:
foo := if true {
  # nope!
  "abcd"
}

Test Information

The tests directory contains "corpus" tests that are checked for syntax, as well as "highlight" tests that check the result. The "highlight" test directory includes some test files generated by the fuzzer that aren't always human readable.