ludic/tools/editors/jetbrains
Orkuncakilkaya f87964c5f7 Phase 4b: enum types name magic-int value spaces
enum Name { A, B, C } declares named int constants; Enum.Variant is a
compile-time int (index by declaration order), usable in match patterns,
comparisons, setreg. New: parse_enum + dispatch, enum_ordinal resolver
(emit_core), Enum.Variant handling (emit_expr). Scoped to a naming layer over
int (no enum-typed variables), so register/save semantics are untouched.

combat.ludic battle menus dispatch on KnightAct/MageAct instead of 0..3;
chronorift golden byte-identical. Editor vocab (ludic_syntax.h, JetBrains,
TextMate, emacs) gained enum, dropped retired edge/export/pure decl keywords;
check-vocabulary + test-tools 28/0. when/if kept by choice; bitwise stays
functions. Reseeded, fixpoint holds, test.sh 14/14.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-27 16:29:02 +03:00
..
gradle/wrapper Baseline: Ludic compiler + toolchain, Phase 1 syntax fixes complete 2026-08-27 15:15:35 +03:00
src Phase 4b: enum types name magic-int value spaces 2026-08-27 16:29:02 +03:00
build.gradle.kts Baseline: Ludic compiler + toolchain, Phase 1 syntax fixes complete 2026-08-27 15:15:35 +03:00
gradle.properties Baseline: Ludic compiler + toolchain, Phase 1 syntax fixes complete 2026-08-27 15:15:35 +03:00
gradlew Baseline: Ludic compiler + toolchain, Phase 1 syntax fixes complete 2026-08-27 15:15:35 +03:00
gradlew.bat Baseline: Ludic compiler + toolchain, Phase 1 syntax fixes complete 2026-08-27 15:15:35 +03:00
README.md Baseline: Ludic compiler + toolchain, Phase 1 syntax fixes complete 2026-08-27 15:15:35 +03:00
settings.gradle.kts Baseline: Ludic compiler + toolchain, Phase 1 syntax fixes complete 2026-08-27 15:15:35 +03:00

Ludic for JetBrains IDEs

Works in IntelliJ IDEA (Community and Ultimate), CLion, GoLand, PyCharm, Rider, WebStorm — anything on the IntelliJ Platform 2023.2 through 2026.2 (since-build 232, until-build 262.*).

until-build 262 is deliberately ahead of the newest released platform — 2025.3 is build 253, and no 262 IDE exists yet. That headroom is the point: an until-build pinned to today's IDE gets the plugin auto-disabled the moment a user upgrades.

Two things are machine-checked rather than assumed, because a plugin that packages cleanly can still fail to load:

  • ./gradlew verifyPlugin runs JetBrains' own Plugin Verifier over the built artifact against 2025.3 and reports Compatible, with no deprecated or scheduled-for-removal API usages.
  • ./gradlew runIde boots a real IDEA 2025.3 with the plugin installed. The sandbox log line to look for is Loaded custom plugins: LSP4IJ (0.20.1), Ludic (1.0.0) in .intellijPlatform/sandbox/Ludic/IC-2025.3/log/idea.log.

If the plugin does not appear in Settings -> Plugins after installing, the cause is almost always that the IDE's build number is outside since-build..until-build. IntelliJ installs the declared dependency (LSP4IJ) from Marketplace first and only then rejects the incompatible plugin, so the symptom is "LSP4IJ got installed, mine did not". Check Help -> About for the build number and widen pluginUntilBuild in gradle.properties to match.

Building

Gradle must run on JDK 17–21. A newer JDK fails with a bare version number as the error message, which is not obvious the first time you see it:

export JAVA_HOME=$(/usr/libexec/java_home -v 21)     # macOS
cd tools/editors/jetbrains
./gradlew buildPlugin        # -> build/distributions/Ludic-1.0.0.zip
./gradlew runIde             # try it in a sandbox IDE

The first build downloads an IntelliJ IDEA Community distribution (over 1 GB), so expect it to take a while; later builds take seconds. Once the cache is warm,

LUDIC_TEST_JETBRAINS=1 ./tools/test-tools.sh

includes the plugin build in the toolchain's own test run.

Install the zip with Settings -> Plugins -> ⚙ -> Install Plugin from Disk. LSP4IJ is a required dependency; the IDE offers to install it for you.

Settings

Settings -> Languages & Frameworks -> Ludic — the path to ludic-lsp and to ludicc. Both default to build/ under the project root, which is where tools/build-tools.sh puts them.