zachdaniel

zachdaniel

Creator of Ash

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:

https://github.com/ash-project/spark

Where Next?

Popular in Announcing Top

danschultzer
None of the current solutions worked well for me, so I went ahead and built a user management system from scratch. This project took far...
548 29603 241
New
dbern
I’m excited to announce that TaxJar has developed and open-sourced DateTimeParser. We developed it because we found a need to parse user ...
New
aesmail
Hello guys, I have finally made it. I created an admin interface for a framework. It’s been on my todo list for years and with the curre...
New
zorbash
I created Kitto a framework for dashboards inspired by Dashing. The distributed characteristics of Elixir and the low memory footprint...
New
kip
ex_cldr provides localisation and internationalisation support based upon the data from the Unicode CLDR project. Unicode released CLDR ...
407 13014 120
New
nikokozak
Hello all, I’ve been working on Svonix - a library for quickly integrating Svelte components into Phoenix views. It’s a much-needed succ...
New
wojtekmach
Hey everyone! Req is an HTTP client for Elixir that I’ve been working on for quite some time. There is already a lot of HTTP clients out...
New
Qqwy
TypeCheck: Fast and flexible runtime type-checking for your Elixir projects. Core ideas Type- and function specifications are const...
336 14482 100
New
scohen
Lexical Lexical is a next-generation language server for the Elixir programming language. Features Context aware code completion As-you...
New
mattludwigs
Grizzly is a library for working with Z-Wave devices. Z-Wave is a low-frequency radio protocol for controlling smart home devices on a me...
New

Other popular topics Top

danschultzer
None of the current solutions worked well for me, so I went ahead and built a user management system from scratch. This project took far...
548 29603 241
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
AstonJ
Posting this to see if we can make things easier for people to get into Neovim. If you use Neovim and have a favourite distro please let ...
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
Nvim
Anybody knows a comprehensive comparison of Django and Phoenix, thanks for the help. Where are they similar? Where do they differ the m...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
josevalim
Hi everyone, One of the features added to Elixir early on to help integration with Erlang code was the idea of overridable function defi...
New
grych
Hi folks, Few months ago I have announced the proof-of-concept of the library to manipulate the browsers DOM objects directly from Elixi...
639 52673 488
New
vegabook
I’m brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New

Latest on Elixir Forum

Elixir Forum

We're in Beta

About us Mission Statement