← All extensions

magequery LSP

v0.1.1 · by Jelle Besseling · added 3 November 2026

Magento 2 wiring answers from magequery: doctor diagnostics, go-to-definition and hover in di.xml/events.xml, reverse-DI references.

Language servers

How to install

With Forge Super installed, the button above opens the app on this extension, where you press Install. Nothing is installed until you do.

You can also open the Extensions panel in the app and search for magequery LSP. The extension's id is magequery-lsp.

Don't have Forge Super yet? Download it here.

README

From the extension's repository, written by its authors and not by Mentenaz. See the source.

magequery LSP for Zed

Live on the Zed extension registry as magequery LSP (magequery-lsp) — install it from zed: extensions in the command palette.

Magento 2 wiring answers inside Zed, powered by the magequery language server: doctor diagnostics as you save, go-to-definition and hover on class names in di.xml/events.xml/webapi.xml, reverse-DI find-references.

The server attaches to the PHP and XML languages (install those extensions), running alongside the language's primary server. Open buffers overlay the checkout, so diagnostics and answers follow your unsaved edits as you type.

Completions are context-aware: class/virtual-type names, event names, config paths, ACL ids, module names, and db_schema tables, in both config XML and PHP strings.

Plugin indicators render as inlay hints (« 7 plugin(s) » at the end of an intercepted method's signature, → Save::execute() on a plugin's interception methods — hover the hint for the breakdown). Enable them in Zed's settings:

"inlay_hints": { "enabled": true }

Rename rewrites an ACL resource id, event name, or layout block name across the config XML and PHP string literals (dispatch(), isAllowed()) — the identifiers a PHP server treats as opaque strings. Class/config-path/template renames are left to your PHP server / a file rename on purpose.

Server binary

magequery from PATH when present; otherwise the extension downloads the current GitHub release for your platform automatically.

Development

Install as a dev extension: zed: install dev extension from the command palette, pointing at this directory. Zed compiles the WASM shim with your local Rust toolchain, targeting wasm32-wasip2 — install that target first or the compile fails ("failed to compile Rust extension"):

rustup target add wasm32-wasip2

License

This extension shim is MIT-licensed (the Zed extension registry requires a license from its allowlist, which excludes the repository's EUPL-1.2). The magequery binary the extension downloads and runs remains EUPL-1.2.

Publishing

Zed extensions are distributed via a PR to zed-industries/extensions. That registration is done — this repository is a submodule at extensions/magequery-lsp (the directory must be named after the extension id) with an extensions.toml entry keyed [magequery-lsp] and path = "editors/zed" (monorepo layout):

[magequery-lsp]
submodule = "extensions/magequery-lsp"
path = "editors/zed"
version = "0.1.0"

Each subsequent release is another PR there: bump version in both that entry and extension.toml, and point the submodule at the new commit.