عمليات التطبيع في ممثّل Elixir

نظرة عامة على عمليات التطبيع التي يطبّقها ممثّل Elixir على الحلول


يُجري ممثّل Elixir عددًا من عمليات التطبيع. راجع الكود أو بيانات الاختبار لمعرفة التفاصيل.

إزالة التعليقات والتوثيقات

تُزال جميع التعليقات والتوثيقات وتوثيقات الوحدات وتوثيقات الأنواع.

قبل

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

ترتيب الاستيرادات

تُرتَّب عبارات الاستيراد في أعلى الوحدات أو الدوال على النحو التالي: 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. وتُكتب جميع الدوال في الأنابيب بين قوسين، أما الأنواع فتُكتب دونها.

قبل

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