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