feat: add Spark integration - #835
Draft
doorgan wants to merge 3 commits into
Draft
Conversation
doorgan
force-pushed
the
doorgan/ash-support
branch
from
August 4, 2026 09:35
32ba7e7 to
64414b3
Compare
doorgan
force-pushed
the
doorgan/ash-support
branch
from
August 13, 2026 20:02
64414b3 to
fccd00f
Compare
doorgan
force-pushed
the
doorgan/ash-support
branch
from
August 13, 2026 20:21
fccd00f to
ea7ce5b
Compare
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.
This is an experiment I started over the weekend, and I think it's very viable
It implements support for Spark with the skeleton for an integrations system. Rather than a plugin system, it's just some file organization and integration points to make it easier for contributors to figure out how to add other integrations. The main assumption I am making is that user integrations will always be managed by the Engine. I do not know what a proper extensible plugin system will look like, but I do foresee it running in the engine and be contained within the engine.
RIght now there's two integration points: beam indexing, and completions, which is what the Spark integration needs.
During indexing, the beam data is passed to the enabled integrations, which produce indexer entries specific to them via the new
:integrationsubtype and:metadatafield for arbitrary information.When requesting completions, integrations also run against the completion request and can either replace, augment or leave untouched the list of completions provided by core expert. Integration completions are returned at the top of the list as they are more likely(in my opinion) to be what the user expects, and we treat the core expert completions are generic completions for that context.
As for the Spark integration itself, it takes advantage of Spark compiling all its DSL as data within the compiled module, so the indexer basically extracts all the DSL metadata from the beam and converts it to integration entires. The completion side of it figures out the cursor context and provides the appropriate completions and docs from the DSL.
For example, for the Ash framework, if the module you are editing has
use Ash.Resource, the Spark integration will:actions,attributes, etc: