diff --git a/documentation/explanation/actions.md b/documentation/topics/actions.md similarity index 100% rename from documentation/explanation/actions.md rename to documentation/topics/actions.md diff --git a/documentation/explanation/data-layers.md b/documentation/topics/data-layers.md similarity index 100% rename from documentation/explanation/data-layers.md rename to documentation/topics/data-layers.md diff --git a/documentation/explanation/expressions.md b/documentation/topics/expressions.md similarity index 100% rename from documentation/explanation/expressions.md rename to documentation/topics/expressions.md diff --git a/documentation/explanation/managing-relationships.md b/documentation/topics/managing-relationships.md similarity index 100% rename from documentation/explanation/managing-relationships.md rename to documentation/topics/managing-relationships.md diff --git a/documentation/explanation/policies.md b/documentation/topics/policies.md similarity index 100% rename from documentation/explanation/policies.md rename to documentation/topics/policies.md diff --git a/documentation/explanation/resources.md b/documentation/topics/resources.md similarity index 100% rename from documentation/explanation/resources.md rename to documentation/topics/resources.md diff --git a/documentation/explanation/timeouts.md b/documentation/topics/timeouts.md similarity index 100% rename from documentation/explanation/timeouts.md rename to documentation/topics/timeouts.md diff --git a/lib/ash/doc_index/ash_doc_index.ex b/lib/ash/doc_index/ash_doc_index.ex index 4da822cf..c01e1693 100644 --- a/lib/ash/doc_index/ash_doc_index.ex +++ b/lib/ash/doc_index/ash_doc_index.ex @@ -78,26 +78,57 @@ defmodule Ash.DocIndex.AshDocIndex do end @impl true - @spec code_modules :: list(module()) + @spec code_modules :: %{String.t() => list(module)} def code_modules do - [ - Ash.Resource.Info, - Ash.Api, - Ash.Type, - Ash.Error, - Ash.CiString, - Ash.Changeset, - Ash.Query, - Ash.Filter, - Ash.Sort, - Ash.Resource.Change, - Ash.Resource.Change.Builtins, - Ash.Calculation, - Ash.CodeInterface, - Ash.Dsl.Entity, - Ash.Dsl.Extension, - Ash.Dsl.Section, - ASh.Dsl.Transformer - ] + %{ + "Resources" => [ + Ash.Api, + Ash.Resource.Info, + Ash.Resource.Change, + Ash.Resource.Change.Builtins, + Ash.Calculation, + Ash.Resource.Calculation.Builtins, + Ash.CodeInterface, + Ash.Changeset, + Ash.Query + ], + "Utilities" => [ + Ash.Filter, + Ash.Sort + ], + "Errors" => [ + Ash.Error + ], + "Types" => [ + Ash.Type, + Ash.Type.Enum, + Ash.Type.Atom, + Ash.Type.Binary, + Ash.Type.Boolean, + Ash.Type.CiString, + Ash.CiString, + Ash.Type.Date, + Ash.Type.Decimal, + Ash.Type.DurationName, + Ash.Type.Float, + Ash.Type.Function, + Ash.Type.Integer, + Ash.Type.Map, + Ash.Type.NaiveDatetime, + Ash.Type.String, + Ash.Type.Term, + Ash.Type.Time, + Ash.Type.UUID, + Ash.Type.UrlEncodedBinary, + Ash.Type.UtcDatetime, + Ash.Type.UtcDatetimeUsec + ], + "DSLs and Extensions" => [ + Ash.Dsl.Entity, + Ash.Dsl.Extension, + Ash.Dsl.Section, + ASh.Dsl.Transformer + ] + } end end diff --git a/lib/ash/doc_index/doc_index.ex b/lib/ash/doc_index/doc_index.ex index 75d9b9db..29db2ae1 100644 --- a/lib/ash/doc_index/doc_index.ex +++ b/lib/ash/doc_index/doc_index.ex @@ -21,7 +21,7 @@ defmodule Ash.DocIndex do @callback extensions() :: list(extension()) @callback for_library() :: String.t() @callback guides() :: list(guide()) - @callback code_modules() :: list(module()) + @callback code_modules() :: %{String.t() => list(module())} defmacro __using__(opts) do quote bind_quoted: [guides_from: opts[:guides_from]] do @@ -53,62 +53,6 @@ defmodule Ash.DocIndex do end end - def ensure_documented!(doc_index) do - Enum.each(doc_index.extensions(), fn extension -> - Enum.each(extension.module().sections(), &do_ensure_documented!/1) - end) - end - - defp do_ensure_documented!( - section_or_entity, - trail \\ [] - ) - - defp do_ensure_documented!( - %Ash.Dsl.Section{name: name, schema: schema, entities: entities, sections: sections}, - trail - ) do - case Enum.find(schema, fn {_key, opts} -> - !opts[:links] - end) do - {key, _opts} -> - opt = - trail - |> Enum.reverse([key]) - |> Enum.join(".") - - raise "#{opt} is not documented (must contain links)!" - - _ -> - :ok - end - - Enum.each(entities, &do_ensure_documented!(&1, [name | trail])) - Enum.each(sections, &do_ensure_documented!(&1, [name | trail])) - end - - defp do_ensure_documented!( - %Ash.Dsl.Entity{name: name, schema: schema, entities: entities}, - trail - ) do - case Enum.find(schema, fn {_key, opts} -> - !opts[:links] - end) do - {key, _opts} -> - opt = - trail - |> Enum.reverse([key]) - |> Enum.join(".") - - raise "#{opt} is not documented (must contain links)!" - - _ -> - :ok - end - - Enum.each(entities, &do_ensure_documented!(elem(&1, 1), [name | trail])) - end - def to_name(string) do string |> String.split(~r/[-_]/, trim: true) diff --git a/lib/ash/resource/dsl.ex b/lib/ash/resource/dsl.ex index a8cf4d4e..13a66153 100644 --- a/lib/ash/resource/dsl.ex +++ b/lib/ash/resource/dsl.ex @@ -4,6 +4,8 @@ defmodule Ash.Resource.Dsl do describe: """ Declares an attribute on the resource + For more information, see `{{link:ash:guide:attributes.md}}` + Type can be either a built in type (see `Ash.Type`) for more, or a module implementing the `Ash.Type` behaviour. diff --git a/mix.exs b/mix.exs index 6b130073..846dfcbd 100644 --- a/mix.exs +++ b/mix.exs @@ -86,7 +86,7 @@ defmodule Ash.MixProject do "old_documentation/topics/compile_times.md": [ title: "Compile Times" ], - "documentation/explanation/policies.md": [ + "documentation/topics/policies.md": [ title: "Policies" ] ],