Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/IndianBoy42/tree-sitter-just

Treesitter grammar for Justfiles (casey/just)
https://github.com/IndianBoy42/tree-sitter-just

Last synced: about 2 months ago
JSON representation

Treesitter grammar for Justfiles (casey/just)

Awesome Lists containing this project

README

        

# tree-sitter-just

Tree-sitter grammar for Justfiles ([casey/just](https://github.com/casey/just))

## Usage

### Neovim

Just queries are now part of `nvim-treesitter`! Please follow installation
instructions at .

### Helix

Just queries are also part of [Helix](https://github.com/helix-editor/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:

```lua
use "IndianBoy42/tree-sitter-just"
```

Plug

```vimscript
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({})`)

```lua
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`:

```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:

```sh
# 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`](https://github.com/casey/just).

```sh
# 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`](https://neovim.io/doc/user/treesitter.html#%3AInspectTree)
command to explore the resulting parse tree, and
[`:Inspect`](https://neovim.io/doc/user/lua.html#%3AInspect) 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.

```just
[private]
# hello!
[no-cd]
foo:
```

```just
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.