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

2.2 KiB

Jai plugin for IntelliJ IDEA

Support for the Jai 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

./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

./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.