Spark - DSL builder with goodies

The underpinnings of Ash Framework are its DSL building and extending tools. Given that the DSL tooling underpinning Ash is, by design, made to allow extension by end users, it fits for it to be its own tool. While its not the simplest way to build a DSL in elixir, there are a few things that you can get out of the box:

  • Extensibility. Anyone can write extensions for your DSL.
  • Autocomplete and in-line documentation: An elixir_sense plugin that “Just Works” for any DSL implemented with Spark. i.e ElixirLS will autocomplete and show in-line documentation in any supported editor.
  • Tools to generate documentation for your DSL automatically.
  • Tools to create rich library documentation. AshHq’s documentation is all derived from Spark.DocIndex.
  • A mix task to add every part of the DSL to the locals_without_parens of your library automatically.

There is still tons of work to be done to document and test this stuff now that it lives outside of Ash Framework, but it seems to me like something that could be useful for anyone who wants to build DSLs without having to do all the complex work listed above. I’m sure there are many ways to improve the library. The next big thing on the roadmap for me is… generators :partying_face:. Any DSL module will support these generators out of the box, and they will be more powerful than standard generators, supporting file creations, additions, removals, modifications and file deletions. This will make it really easy to provide one-liner commands that can be used to get started very quickly, as well as commands to make modifications to your DSLs.

Anyway, anyone that is interested should feel free to contact me and/or dive in :slight_smile: