Skip to content

Commit

Permalink
Enable custom ordering for module directives
Browse files Browse the repository at this point in the history
  • Loading branch information
emkguts committed Feb 5, 2025
1 parent 74c75ae commit 0c647d1
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 9 deletions.
12 changes: 12 additions & 0 deletions lib/quokka/config.ex
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ defmodule Quokka.Config do
alias Credo.Check.Readability.MultiAlias
alias Credo.Check.Readability.ParenthesesOnZeroArityDefs
alias Credo.Check.Readability.SinglePipe
alias Credo.Check.Readability.StrictModuleLayout
alias Credo.Check.Refactor.PipeChainStart
alias Quokka.Style.Configs

Expand Down Expand Up @@ -58,6 +59,9 @@ defmodule Quokka.Config do
reorder_configs =
if is_nil(config[:reorder_configs]), do: true, else: config[:reorder_configs]

default_order = [:shortdoc, :moduledoc, :behaviour, :use, :import, :alias, :require]
strict_module_layout_order = credo_opts[:strict_module_layout_order] || default_order

:persistent_term.put(@key, %{
block_pipe_flag: credo_opts[:block_pipe_flag] || false,
block_pipe_exclude: credo_opts[:block_pipe_exclude] || [],
Expand All @@ -75,6 +79,7 @@ defmodule Quokka.Config do
rewrite_multi_alias: credo_opts[:rewrite_multi_alias] || false,
single_pipe_flag: credo_opts[:single_pipe_flag] || false,
sort_order: credo_opts[:sort_order] || :alpha,
strict_module_layout_order: strict_module_layout_order ++ (default_order -- strict_module_layout_order),
zero_arity_parens: credo_opts[:zero_arity_parens] || true
})
end
Expand Down Expand Up @@ -158,6 +163,10 @@ defmodule Quokka.Config do
get(:single_pipe_flag)
end

def strict_module_layout_order() do
get(:strict_module_layout_order)
end

def zero_arity_parens?() do
get(:zero_arity_parens)
end
Expand Down Expand Up @@ -209,6 +218,9 @@ defmodule Quokka.Config do
{SinglePipe, opts}, acc when is_list(opts) ->
Map.put(acc, :single_pipe_flag, true)

{StrictModuleLayout, opts}, acc when is_list(opts) ->
Map.put(acc, :strict_module_layout_order, opts[:order])

_, acc ->
acc
end)
Expand Down
11 changes: 2 additions & 9 deletions lib/style/module_directives.ex
Original file line number Diff line number Diff line change
Expand Up @@ -291,15 +291,8 @@ defmodule Quokka.Style.ModuleDirectives do
nondirectives = acc.nondirectives

directives =
[
acc.shortdoc,
acc.moduledoc,
acc.behaviour,
acc.use,
acc.import,
acc.alias,
acc.require
]
Quokka.Config.strict_module_layout_order()
|> Enum.map(&acc[&1])
|> Stream.concat()
|> Style.fix_line_numbers(List.first(nondirectives))

Expand Down
23 changes: 23 additions & 0 deletions test/style/configs_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ defmodule Quokka.Style.ConfigsTest do

alias Quokka.Style.Configs

setup do
Quokka.Config.set_for_test!(:strict_module_layout_flag, true)
Quokka.Config.set_for_test!(:strict_module_layout_order, [:shortdoc, :moduledoc, :behaviour, :use, :import, :alias, :require])
end

test "only runs on exs files in config folders" do
{ast, _} = Quokka.string_to_quoted_with_comments("import Config\n\nconfig :bar, boop: :baz")
zipper = Quokka.Zipper.zip(ast)
Expand Down Expand Up @@ -352,4 +357,22 @@ defmodule Quokka.Style.ConfigsTest do
)
end
end

test "respects custom strict_module_layout_order" do
Quokka.Config.set_for_test!(:strict_module_layout_order, [:alias, :import, :moduledoc])
assert_style(
"""
@moduledoc "Some doc"
alias Foo.Bar
import Enum
""",
"""
alias Foo.Bar
import Enum
@moduledoc "Some doc"
"""
)
end
end

0 comments on commit 0c647d1

Please sign in to comment.