نرمال‌سازی‌های representer در Elixir

مروری بر نرمال‌سازی‌هایی که representer در Elixir روی راه‌حل‌ها اعمال می‌کند


Elixir representer چندین نرمال‌سازی اعمال می‌کند. برای جزئیات به کد یا داده‌های آزمون مراجعه کنید.

حذف کامنت‌ها و مستندات

همه‌ی کامنت‌ها، مستندات، مستندات ماژول و مستندات نوع حذف می‌شوند.

قبل

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

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

بعد

defmodule Fake do
  def foo do
    nil
  end
end

مرتب‌سازی ترتیب importها

دستورهای import در بالای ماژول‌ها یا توابع به این ترتیب قرار می‌گیرند: alias، use، require، import.

قبل

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

بعد

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

قالب‌بندی کد

کد با [mix code][mix-code] قالب‌بندی می‌شود و بلوک‌های do و end را الزامی می‌کند. همه‌ی توابع در pipeها با پرانتز نوشته می‌شوند. نوع‌ها بدون پرانتز نوشته می‌شوند.

قبل

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

بعد

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

نرمال‌سازی شناسه‌ها

شناسه‌ها به یک مقدار جانگهدار نرمال‌سازی می‌شوند. برخی متغیرهای خاص و اتریبیوت‌های ماژول (_، @spec، __MODULE__ و غیره) جایگزین نمی‌شوند. کلیدهای نقشه‌ها، ساختارها و لیست‌های کلیدواژه نرمال‌سازی نمی‌شوند.

قبل

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

بعد

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

مرتب‌سازی کلیدها در نقشه‌ها و ساختارها

کلیدها در نقشه‌ها و ساختارها مرتب می‌شوند. کلیدهای لیست‌های کلیدواژه مرتب نمی‌شوند.

قبل

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

بعد

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