# spark v2.7.1 - Table of Contents

> Generic tooling for building DSLs

## GUIDES

- Tutorials
  - [Spark](get-started-with-spark.md)

- How To
  - [Upgrading to 2.0](upgrade-to-2-0.md)
  - [Writing Extensions](writing-extensions.md)
  - [Splitting Up Large DSLs](split-up-large-dsls.md)
  - [Using Source Annotations](use-source-annotations.md)
  - [Setting up autocomplete](setup-autocomplete.md)
  - [Building Extensions with the Builder API](build-extensions-with-builders.md)
  - [Testing Spark Verifiers](test-spark-verifiers.md)

## Modules

- DSLs and Extensions
  - [Spark.Dsl](Spark.Dsl.md): The primary entry point for defining a DSL.
  - [Spark.Dsl.Builder](Spark.Dsl.Builder.md): Utilities for building DSL objects programatically, generally used in transformers.

  - [Spark.Dsl.Entity](Spark.Dsl.Entity.md): Declares a DSL entity.
  - [Spark.Dsl.Extension](Spark.Dsl.Extension.md): An extension to the Spark DSL.
  - [Spark.Dsl.Fragment](Spark.Dsl.Fragment.md): Allows splitting up a DSL into multiple modules, potentially organizing large DSLs
  - [Spark.Dsl.Patch.AddEntity](Spark.Dsl.Patch.AddEntity.md): Supply this when defining an extension to add entity builders to another extension's section.
  - [Spark.Dsl.Section](Spark.Dsl.Section.md): Declares a DSL section.
  - [Spark.Dsl.Transformer](Spark.Dsl.Transformer.md): A transformer manipulates and/or validates the entire DSL state of a module at compile time.
  - [Spark.Dsl.Verifier](Spark.Dsl.Verifier.md): A verifier validates DSL state after compilation without modifying it.
  - [Spark.Dsl.Verifiers.VerifyEntityUniqueness](Spark.Dsl.Verifiers.VerifyEntityUniqueness.md): Verifies that each entity that has an identifier is unique at each path.

  - [Spark.Dsl.Verifiers.VerifySectionSingletonEntities](Spark.Dsl.Verifiers.VerifySectionSingletonEntities.md): Verifies that entities specified in a section's `singleton_entity_keys`
appear at most once within that section.

- Options
  - [Spark.Options](Spark.Options.md): Provides a standard API to handle keyword-list-based options.
  - [Spark.Options.Helpers](Spark.Options.Helpers.md): Helpers for use with spark options

  - [Spark.Options.ValidationError](Spark.Options.ValidationError.md): An error that is returned (or raised) when options are invalid.
  - [Spark.Options.Validator](Spark.Options.Validator.md): Defines a validator module for an option schema.
  - [Spark.OptionsHelpers](Spark.OptionsHelpers.md): Helpers for working with options lists.

- Errors
  - [Spark.Error.DslError](Spark.Error.DslError.md): Used when a DSL is incorrectly configured.

- Internals
  - [Spark](Spark.md): <!--
SPDX-FileCopyrightText: 2020 Zach Daniel
SPDX-FileCopyrightText: 2022 spark contributors <https://github.com/ash-project/spark/graphs.contributors>
  - [Spark.Builder.Entity](Spark.Builder.Entity.md): Builder for constructing `Spark.Dsl.Entity` structs.
  - [Spark.Builder.Field](Spark.Builder.Field.md): Builder for individual schema field specifications.
  - [Spark.Builder.Section](Spark.Builder.Section.md): Builder for constructing `Spark.Dsl.Section` structs.
  - [Spark.CheatSheet](Spark.CheatSheet.md): Tools to generate cheat sheets for spark DSLs
  - [Spark.CodeHelpers](Spark.CodeHelpers.md): Helpers for meta programming around code and code snippets

  - [Spark.Docs](Spark.Docs.md): Tools for generating docs & search data for extras.

  - [Spark.Formatter](Spark.Formatter.md): Formats Spark modules.
  - [Spark.Igniter](Spark.Igniter.md): Helpers for patching Spark DSLs.

  - [Spark.InfoGenerator](Spark.InfoGenerator.md): Used to dynamically generate configuration functions for Spark extensions
based on their DSL.
  - [Spark.Regex](Spark.Regex.md): Utilities for caching compiled regular expressions.
  - [Spark.Test](Spark.Test.md): ExUnit helpers for testing Spark DSL verifiers.

## Mix Tasks

- Internals
  - [mix spark.cheat_sheets](Mix.Tasks.Spark.CheatSheets.md): Creates cheat sheets for each Extension provided. Useful for CI with `--check` flag.
  - [mix spark.cheat_sheets_in_search](Mix.Tasks.Spark.CheatSheetsInSearch.md): Includes generated cheat sheets in the search bar
  - [mix spark.formatter](Mix.Tasks.Spark.Formatter.md): Manages a variable called `spark_locals_without_parens` in the .formatter.exs from a list of DSL extensions.
  - [mix spark.install](Mix.Tasks.Spark.Install.md): Installs spark by adding the `Spark.Formatter` plugin, and providing a basic configuration for it in `config.exs`.
  - [mix spark.replace_doc_links](Mix.Tasks.Spark.ReplaceDocLinks.md): Replaces any documentation links with text appropriate for hex docs.

