View Source Spark.Dsl behaviour (spark v1.1.54)
The primary entry point for adding a DSL to a module.
To add a DSL to a module, add use Spark.Dsl, ...options
. The options supported with use Spark.Dsl
are:
:single_extension_kinds
(list ofatom/0
) - The extension kinds that are allowed to have a single value. For example:[:data_layer]
The default value is[]
.:many_extension_kinds
(list ofatom/0
) - The extension kinds that can have multiple values. e.g[notifiers: [Notifier1, Notifier2]]
The default value is[]
.:untyped_extensions?
(boolean/0
) - Whether or not to support anextensions
key which contains untyped extensions The default value istrue
.:default_extensions
(keyword/0
) - The extensions that are included by default. e.g[data_layer: Default, notifiers: [Notifier1]]
Default values for single extension kinds are overwritten if specified by the implementor, while many extension kinds are appended to if specified by the implementor. The default value is[]
.:opt_schema
(keyword/0
) - A schema for additional options to accept when callinguse YourSpark
The default value is[]
.
See the callbacks defined in this module to augment the behavior/compilation of the module getting a Dsl.
Schemas/Data Types
Spark DSLs use a superset of NimbleOptions
for the schema
that makes up sections/entities of the DSL.
For more information, see Spark.OptionsHelpers
.
Summary
Callbacks
Validate/add options. Those options will be passed to handle_opts
and handle_before_compile
Handle options in the context of the module, after all extensions have been processed. Must return a quote
block.
Handle options in the context of the module. Must return a quote
block.
Validate/add options. Those options will be passed to handle_opts
and handle_before_compile
A callback that is called in the after_verify
hook. Only runs on versions of Elixir >= 1.14.0
Types
@type entity() :: %Spark.Dsl.Entity{ args: term(), auto_set_fields: term(), deprecations: term(), describe: term(), docs: term(), entities: term(), examples: term(), hide: term(), identifier: term(), imports: term(), links: term(), modules: term(), name: term(), no_depend_modules: term(), recursive_as: term(), schema: term(), singleton_entity_keys: term(), snippet: term(), target: term(), transform: term() }
@type opts() :: Keyword.t()
@type section() :: %Spark.Dsl.Section{ auto_set_fields: term(), deprecations: term(), describe: term(), docs: term(), entities: term(), examples: term(), imports: term(), links: term(), modules: term(), name: term(), no_depend_modules: term(), patchable?: term(), schema: term(), sections: term(), snippet: term(), top_level?: term() }
@type t() :: map()
Callbacks
Validate/add options. Those options will be passed to handle_opts
and handle_before_compile
Handle options in the context of the module, after all extensions have been processed. Must return a quote
block.
Handle options in the context of the module. Must return a quote
block.
If you want to persist anything in the DSL persistence layer,
use @persist {:key, value}
. It can be called multiple times to
persist multiple times.
Validate/add options. Those options will be passed to handle_opts
and handle_before_compile
A callback that is called in the after_verify
hook. Only runs on versions of Elixir >= 1.14.0