Skip to content

Version 2.0 - #1282

Merged
m0rkeulv merged 29 commits into
HaxeFoundation:developfrom
m0rkeulv:pr/v2.0-rc
Oct 21, 2026
Merged

m0rkeulv merged 29 commits into
HaxeFoundation:developfrom
m0rkeulv:pr/v2.0-rc

Conversation

@m0rkeulv

Copy link
Copy Markdown
Member

No description provided.

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.
The formatter reworked toward haxe-formatter output parity: blank lines,
wrapping, chains, bodies, metadata, imports; hxformat.json import, detection
and JSON schema; the code-style settings UI; and a comparison harness with 152
reference cases.
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.
@m0rkeulv
m0rkeulv merged commit 0950485 into HaxeFoundation:develop Oct 21, 2026
7 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant