Closes #2408 Plugin run targets were static argv wrappers: a plugin couldn't refuse a built-in Run/Test/Debug launch through its target (for example when its container project is stopped), so the wrapper started and could start the environment as a side effect. API 1.5 adds an optional run-target-validation export: after trust, ownership, process-grant and pin checks the host calls validate with the operation, bare program name and working directory; an error refuses the launch with the plugin's (prefixed, bounded) message and keeps the selected target. Plugins without the export behave as before. Calls wake reclaimed instances, use the host call timeout, are cancelled with the launch, and fail closed on trap/timeout; for remote projects validation runs on the server. SDK helpers, plugins/README.md and fixtures updated.
test-runner — API 1.4 example
Put this directory on PATH before installing/granting the plugin, so
process:openidea-example-tests resolves to the included executable. Copy
example.tests to a trusted project. Its presence enables the dynamic
run-configurations export. Open it as plain text and click a gutter run
button, or use Example: Run Tests / the Run selector for all tests.
The gutter command appends the test name as a filter to run.start. The fake
executable prints a deliberately tiny start NAME / pass NAME protocol;
test-results.parse retains split lines and emits stable test ids. Replace
that protocol/parser and executable to integrate a real framework. This is an
API example for integrating a test framework.
Build from the repository root:
plugins/build.sh official/test-runner
cargo test --manifest-path plugins/official/test-runner/Cargo.toml
cargo run -p ide-host --bin openidea-plugin -- check plugins/official/test-runner
Install the built package folder through Settings › Plugins › Install from Disk. See the plugin guide and official/community policy.
test-results.select-tests returns the selected names as the complete argv for
openidea-example-tests, enabling Rerun Failed Tests and Run from the test tree.
It returns None for unknown configurations or paths this example cannot filter.