Repository navigation
Version 2.0 - #1282
Merged
Merged
Version 2.0#1282
Conversation
The plugin targets IntelliJ 2026.2 and 2026.3 (since-build 262, until-build 263.*) with the diagram plugin and the profiler module bundled for the IntelliJ IDEA Ultimate features, and Jackson 3.2.3 with its XML data format. The CI workflows build the plugin and run the debugger lanes on that range. Test runs exclude the JUnit vintage engine the platform bootstrap adds, run headless with a 15 minute timeout, and keep the live compiler suites opt-in (-PliveCompilerTests=true). The Kotlin daemon's session folder is ignored and the IDE inspection profiles are no longer tracked. The compiler-message parsing test, rewritten as tables, rides along: it needs nothing from the later commits.
New display-protocol module with the wire types, transports and clients of the Haxe compiler's display protocol: - JSON-RPC for Haxe 4 and later, over --wait sockets (one socket per request) or a framed --server-connect channel; - the --display protocol of Haxe 3.4.7, whose XML answers are repaired and bound to records; - completion, hover, definition, references, diagnostics, server/type and compiled-type answers, with a request observer for metrics. The module has no IntelliJ dependencies; its tests run against recorded answers. The README holds the wire facts. The compiler services use it from the foundation commit on.
New profilers/core module: a neutral snapshot and timeline model and the translators that fill it from HashLink profile dumps, hxcpp reports, Tracy captures (wire protocol versions 69 to 82, live connection, HXTS session files), Flash/AIR Scout telemetry and V8 CPU profiles. No IntelliJ dependencies; the tests run on recorded captures.
tools/LimeProjectParser: a Haxe tool, built into a jar that ships with the plugin, that evaluates Lime and OpenFL project files the way lime does: includes, conditions, haxedefs and .hxp projects. The plugin uses it when the lime command line is not available or not trusted.
Changes inside the debugger modules: - HashLink adapter: enum parameters by position, closure captures typed by their function, eval calls that keep the interrupted frame intact, pause versus racing breakpoint hits, conditional breakpoints; - hxcpp debug server: threads enable debugging on attach, breakpoint and value fixes, Haxe 4.1 compatible sources; - DAP protocol, eval and vshaxe adapter fixes and their tests, compat-matrix updates. The old browser-debugger module's live probes leave here; the module itself is replaced by javascript-debugger in the foundation commit.
The core that most 2.0 features build on. Its parts depend on each other in cycles, so they arrive together: - the v2 project model: build files (hxml, Lime/OpenFL, NME, HXP) and their sections, targets, defines and work directories; per-module language level, SDK and build command; haxelib sync and the library graph; external class paths; trusted-project gating; settings stores; migration of 1.x modules; - resolve contexts: each file is analysed under the build that compiles it, with #if evaluated against that build in the lexer and parser (new grammar); - compiler services core: compilation server and display process management, diagnostics, resolve, usages, types and the generated-code preview; - run configurations: one per runtime (HashLink, hxcpp, Neko, Node.js, Flash, AIR, browser, interpreter), the action configuration and its before-run step; - debugger wiring for the DAP backends and the javascript-debugger module (replacing browser-debugger); - test runner core (utest, munit, buddy, tink_unittest), haxelib explorer panels, semantic inspections base, evaluator and resolver changes; - removal of the 1.x project structure, compile and run code it replaces. - the plugin descriptor and message bundles regrouped (and stored with CRLF line endings); 1.x registrations and keys go, the 2.0 core's arrive. Later features add their own registrations and keys. The features built on this, with their tests, follow in the next commits.
Files that more than one of the project, run/debug and compiler groups needs, so each of those branches builds on the language branch alone: the profiler's IDE bridge, console and build-tool helpers the tool window and run configurations use, the refactoring name-suggestion utilities, and test fixtures that tests in several groups read.
Parser recovery for operators after case patterns, reification in capture initializers and statements starting with macro after a macro-valued declaration; the lexer's '<' context survives highlighter restarts; string literal manipulation for in-place edits; doc-comment PSI. Parser test data is regenerated for the new grammar.
File-based and stub indexes keep entries per conditional-compilation context, tolerate stale module entries, and carry the flags the resolver now asks for.
Map literal entries take key and value types from the map's setter; enum and array patterns resolve at the name level and type their captures from the matched type; classes with unresolvable supertypes resolve in linear time; extern classes list their std overrides as implementations; name suggestions from the expression's shape and type.
Settings page for inactive conditional-compilation branches (parsing, dimming, completion inside dead branches).
Semantic checks as regular inspections with configurable severity and descriptions, language-level checks with migration quick fixes between pre-4.0 and 4.0 syntax, unused-declaration inspections, highlighting of inactive branches and stale conditions, and the annotation test data.
The shared test base classes and the tests that need their new helpers.
Structured doc-comment support: code and tag highlighting, tag completion, enter handling and the doc settings page.
Expected-enum and lambda completion, class names and file paths in strings (navigable and completable), in-place rename including properties with their accessors, name suggestions, copy-paste imports, quote conversion, inlay hint updates, and the editor test data.
The rest of the v2 project model on top of the foundation: the Build Tools and compiler settings pages, hxml/project.xml helpers and schemas, haxelib git pins and repository layout, the 1.x migration from the Project view, the build file inspections (missing library, missing include file, define names with a dash), and the tests for the whole model.
The Haxe tool window: modules, build files and their sections, targets, defines and IDE overrides, libraries (with transitive dependencies), actions and Build & run rows, tools, tests markers and the compilation server row; click-to-choose values and the dialogs behind them.
New-project templates for hxml, Lime/OpenFL and NME projects, SDK selection in the wizard, and the updated file templates.
Custom tools and actions with launch kinds and run-before chains, the Haxe Tools editor menu (formatter, checkstyle), console links for haxe stack traces and utest failures, pseudo-terminal tool runs, the Neko runner, and tests.
Interpreter (eval) debugging with breakpoint conditions, smart step into, the legacy hxcpp debugger as its own configuration, navigation from values to sources, and the debugger tests.
Flash and AIR debugging through the Flex debugger (IntelliJ IDEA Ultimate): fdb sessions, classpath breakpoint scoping, adl launches with per-launch application ids, and the debugger-side test fixtures.
The Node.js Application run configuration with debugging through the js-debug adapter (downloadable from the run configuration), and the browser lane's remaining changes.
The test runner for utest, munit, buddy and tink_unittest: live reporters injected into the test build, gutter markers for suites and single tests, run and debug on every supported target, and the test data and tests.
The Haxe Profiler (IntelliJ IDEA Ultimate) for HashLink, hxcpp (including Tracy), Flash/AIR and JavaScript: run configurations, live session tabs, call charts with lanes, search and frame details, gutter time hints, and navigation to the sources of the build a capture came from.
Compiler-backed editor features (beta): diagnostics and quick fixes, completion with auto-import, Find Usages, Go to Declaration including macro-generated members, compiler type hints, per-feature settings, the post-macro preview, and the live compiler test suites (opt-in).
A project diagram of modules, build files and libraries (IntelliJ IDEA Ultimate), with library include files and extraParams.hxml.
The 2.0.0 changelog and the plugin version.
A review of every test added or changed since develop (doc/planned/test-review-2026-10-21*.md, git-excluded) found tests whose branch a named sibling already asserts at least as strongly, tests that assert constants, defaults or platform behaviour, and live debugger sessions that re-stop at one line to read one value. This removes about 140 test methods and 25 parameterized rows and keeps every covered branch: - build tools: "defaults are empty" store tests, duplicates on the heavy fixture, LINK_KINDS rows on one branch - compiler services: seven settings XML round trips become one (loadState only stores the bean), defaults tests become one, live display tests that repeat a sibling's case - project model: hxml/haxelib duplicates, scanner and DOM rows the shape rules already pin; neutral names replace real handles in the haxelib test data - language syntax: formatter tests that repeat the comparison fixtures (sometimes the same source line), two comparison fixtures whose cases all have their own fixture, index tests sharing one early return - language IDE: the property-rename map asserted at three layers, gating cases their fix tests repeat once those run at the boundary level, short chains the long chain covers - run/test/profiler: Tracy walks and strategy repeats the replays subsume, planner cases pinned at lower levels; the real-toolchain pipeline tests are opt-in (-PliveTestRunnerTests=true) - debuggers: the HashLink locals tables stop once and assertAll (15 sessions -> 2), the statics and whole-array splits re-merge, Firefox probes that only printed their findings go (their wire facts move to the class javadoc), the HL resolver precedence tests HaxeRuntimeToolTest already pins Fixed rather than removed: a completion test that never asserted the narrowing it names, wall-clock asserts in the recursive std inference test (now a pipeline-run bound), a Firefox load-time test that passed if any strategy stopped (now pins the refresh-once flow), and in-place rename tests now dispatch the event queue before reading another file. A test-only accessor on HaxelibMetadata with no remaining caller is gone.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.