Files
intellijai/README.md
hgranthorner 37809b8aa7 Phase 3: Grammar-Kit parser, PSI and ParserDefinition
Adds src/main/grammar/Jai.bnf, the generated parser/PSI in src/main/gen, a
JaiParserDefinition, and the Tier 3 corpus parse gate (406/714 files clean).

Two things were not obvious:

- Grammar-Kit mints its own token instances from the .bnf 'tokens' block, which
  are different objects from the ones JaiLexer emits, so every rule silently
  failed to match. Fixed with tokenTypeFactory -> JaiTokenTypes.byName.
- A backslash inside an identifier is a continuation in the compiler's lexer
  (Jai_Lexer/module.jai:444): 'left\_margin' is one identifier. JaiLexer now
  does the same; the Tier 0 round-trip still holds because the token span
  covers the backslash and the skipped spaces.

Constructs that BNF alone cannot express live in JaiParserUtil: directive-name
tests (#ident is one token), '==' before '{' for the switch form, procedure
header vs parenthesised expression, and the declaration lookahead.
2026-08-04 12:05:42 -04:00

61 lines
2.2 KiB
Markdown

# Jai plugin for IntelliJ IDEA
Support for the [Jai](https://jai.community) programming language.
Everything here is derived from the local Jai distribution at `~/.local/jai`,
never from online material (see `AGENTS.md`).
## What works today
- `.jai` file type with its own icon
- Syntax highlighting: keywords, built-in type names, compiler directives
(`#import`, `#run`, …), notes (`@Cleanup`), numbers (hex / binary / hexfloat /
`_` separators), strings, here-strings (`#string DONE … DONE`), nesting block
comments, operators, `---`, `$`/`$$`, `it` / `it_index`
- Colour settings page (**Settings → Editor → Color Scheme → Jai**)
- Comment / uncomment (`//` and nesting `/* */`)
- Brace matching, including the Jai-only `.{` struct-literal and `.[`
array-literal openers
Not yet: parser and PSI, so no structure view, go-to-definition, completion,
formatting, or inspections. See `docs/BUILD_PLAN.md` for the phase plan.
## Install it locally
```bash
./jaigradle buildPlugin
# -> build/distributions/intellijai-1.0.0-SNAPSHOT.zip
```
In the IDE: **Settings → Plugins → ⚙ → Install Plugin from Disk…**, pick that
ZIP, restart when prompted. Requires build 253 (2025.3) or newer; verified
compatible with IU-253, IU-261 and IU-262 by the JetBrains Plugin Verifier.
To try it, open any file from `~/.local/jai/how_to/`.
Uninstall or update the same way — installing a new ZIP over the old one
replaces it.
## Develop
```bash
./jaigradle test # or ./jaitest, which reports the JUnit XML
./jaigradle check # full verification
```
Never call `./gradlew` directly: there is no JDK on `PATH`, and `./jaigradle`
resolves one via mise first. Read `AGENTS.md` before changing anything.
Key docs:
| File | What it is |
| --- | --- |
| `AGENTS.md` | how to work in this repo; current state |
| `docs/JAI_LANGUAGE_REFERENCE.md` | the language, transcribed from the compiler |
| `docs/BUILD_PLAN.md` | phased plan and testing strategy |
Local IntelliJ references are available in `~/programming/thirdparty`:
- `fortran-plugin` — a simple language plugin to use as reference.
- `intellij-elixir` — a more complex plugin to use as reference.
- `intellij-sdk-docs` — local versions of the IntelliJ SDK documentation.