Normalizações do representer de Elixir

Uma visão geral das normalizações que o representer de Elixir aplica às soluções


O representer de Elixir aplica várias normalizações. Consulta o código ou os dados de teste para mais detalhes.

Remover comentários e docs

Todos os comentários, docs, moduledocs e typedocs são removidos.

Antes

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

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

Depois

defmodule Fake do
  def foo do
    nil
  end
end

Ordenar as importações

As instruções de importação no topo dos módulos ou das funções são ordenadas assim: alias, use, require, import.

Antes

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

Depois

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

Formatar o código

O código é formatado com o [mix code][mix-code], forçando blocos do end. Todas as funções em pipes são escritas com parênteses. Os tipos são escritos sem parênteses.

Antes

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

Depois

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

Normalizar os identificadores

Os identificadores são normalizados para um marcador de posição. Algumas variáveis especiais e atributos de módulo (_, @spec, __MODULE__, etc.) não são substituídos. As chaves de mapas, structs e listas de palavras-chave não são normalizadas.

Antes

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

Depois

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

Ordenar as chaves em mapas e structs

As chaves em mapas e structs são ordenadas. As chaves em listas de palavras-chave não são ordenadas.

Antes

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

Depois

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