hgranthorner dc53033898 Build: regenerate the parser on every build, and always from scratch
Two staleness traps cost real debugging time, and both made grammar edits look
like they had no effect:

- compileJava/compileKotlin read src/main/gen with no task dependency, so an
  edit to Jai.bnf could be compiled against the previous generated parser. The
  compiled JaiParser.class was three minutes older than its source while the
  tests reported green. They now depend on generateParser.
- purgeOldFiles is not enough. Grammar-Kit rewrites only the files whose rule
  changed, so JaiDeclaration kept a getArgumentList() its regenerated Impl no
  longer had and the build failed inside generated code. generateParser now
  deletes src/main/gen first.

Grammar: named return defaults use a private rule rather than 'initializer'.
Giving the default its own PSI element made the enclosing procLiteralExpr end
early, so '-> a: int = 1 { }' silently lost its body.

Corpus parse 90.9% (649/714), ratchet at 645.
2026-08-04 12:37:46 -04:00
2026-08-04 10:12:15 -04:00
2026-08-04 10:12:15 -04:00
2026-08-04 10:12:15 -04:00
2026-08-04 10:12:15 -04:00
2026-08-04 10:12:15 -04:00
2026-08-04 10:12:15 -04:00
2026-08-04 10:12:15 -04:00
2026-08-04 10:12:15 -04:00
2026-08-04 10:12:15 -04:00
2026-08-04 10:12:15 -04:00

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.
Description
A Jai plugin for Intellij.
Readme 342 KiB
Languages
Kotlin 97.3%
Shell 2.7%