Normalisations du representer Elixir

Un aperçu des normalisations que le representer Elixir applique aux solutions


Le representer Elixir applique un certain nombre de normalisations. Reporte-toi au code ou aux données de test pour plus de détails.

Supprime les commentaires et les docs

Tous les commentaires, docs, moduledocs et typedocs sont supprimés.

Avant

defmodule Fake do
  @moduledoc """
  Fake module to demonstrate stuff
  """

  @doc "Not much to see here"
  def foo do
    # TODO: return bar
    nil
  end
end

Après

defmodule Fake do
  def foo do
    nil
  end
end

Trie l'ordre des instructions d'import

Les instructions import en haut des modules ou des fonctions sont triées dans cet ordre : alias, use, require, import.

Avant

defmodule Fake do
  import D
  alias A.U.V
  use B
  alias A.{T, S}
  require C

  def foo do
    import Z
    alias X
    use Y
  end

  import NotTouched
  alias NotTouched
end

Après

defmodule Fake do
  alias A.{S, T}
  alias A.U.V
  use B
  require C
  import D

  def foo do
    alias X
    use Y
    import Z
  end

  import NotTouched
  alias NotTouched
end

Formate le code

Le code est formaté avec [mix code][mix-code], ce qui impose des blocs do end. Toutes les fonctions dans les pipes sont écrites avec des parenthèses. Les types s'écrivent sans parenthèses.

Avant

defmodule    Fake   do
        @type foo() :: integer() | atom
def foo, do:    nil |> bar
end

Après

defmodule Fake do
  @type foo() :: integer | atom
  def foo do
    nil |> bar()
  end
end

Normalise les identifiants

Les identifiants sont normalisés en une valeur de remplacement. Certaines variables spéciales et certains attributs de module (_, @spec, __MODULE__, etc.) ne sont pas remplacés. Les clés des maps, des structs et des listes de mots-clés ne sont pas normalisées.

Avant

defmodule Fake do
  alias Fake, as: SuperFake
  @my_constant 42

  @impl true
  def foo(bar) when is_integer(bar) do
    bar + @my_constant
  end

  def foo(%{a: a} = bar) do
    %{bar | a: a + @my_constant}
  end

  def foo(_), do: nil
end

Après

defmodule Placeholder_1 do
  alias Placeholder_1, as: Placeholder_2
  @placeholder_6 42
  @impl true
  def placeholder_4(placeholder_5) when is_integer(placeholder_5) do
    placeholder_5 + @placeholder_6
  end

  def placeholder_4(%{a: placeholder_7} = placeholder_5) do
    %{placeholder_5 | a: placeholder_7 + @placeholder_6}
  end

  def placeholder_4(_) do
    nil
  end
end

Trie les clés dans les maps et les structs

Les clés dans les maps et les structs sont triées. Les clés dans les listes de mots-clés ne sont pas triées.

Avant

defmodule Fake do
  def foo do
    %MyStruct{z: 3, y: 2, x: 1}
    m = %{c: 3, a: 1, b: 2}
    %{m | b: 20, a: 10}
    [b: 2, a: 1]
  end
end

Après

defmodule Fake do
  def foo do
    %MyStruct{x: 1, y: 2, z: 3}
    placeholder_3 = %{a: 1, b: 2, c: 3}
    %{placeholder_3 | a: 10, b: 20}
    [b: 2, a: 1]
  end
end