commit: 7167de592e3523459a1eb65d902085e828f962b2
parent b99f5d61834ffd86f9e8aeca2b00c704f0a0467e
Author: Hélène <pleroma-dev@helene.moe>
Date: Tue, 26 Jul 2022 23:15:09 +0200
Emoji: apply recommended tail call changes
Behavior matches previous code.
Co-authored-by: Tusooa Zhu <tusooa@kazv.moe>
Diffstat:
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/lib/pleroma/emoji/combinations.ex b/lib/pleroma/emoji/combinations.ex
@@ -13,18 +13,22 @@ defmodule Pleroma.Emoji.Combinations do
# the entire emoji list in emoji-test.txt. This is safe, and, sadly, most
# likely sane too.
- defp qualification_combinations([]), do: [[]]
+ defp qualification_combinations(codepoints) do
+ qualification_combinations([[]], codepoints)
+ end
- defp qualification_combinations(["\uFE0F" | tail]) do
- tail
- |> qualification_combinations()
- |> Enum.flat_map(fn x -> [x, ["\uFE0F" | x]] end)
+ defp qualification_combinations(acc, []), do: acc
+
+ defp qualification_combinations(acc, ["\uFE0F" | tail]) do
+ acc
+ |> Enum.flat_map(fn x -> [x, x ++ ["\uFE0F"]] end)
+ |> qualification_combinations(tail)
end
- defp qualification_combinations([codepoint | tail]) do
- tail
- |> qualification_combinations()
- |> Enum.map(fn x -> [codepoint | x] end)
+ defp qualification_combinations(acc, [codepoint | tail]) do
+ acc
+ |> Enum.map(&Kernel.++(&1, [codepoint]))
+ |> qualification_combinations(tail)
end
def variate_emoji_qualification(emoji) when is_binary(emoji) do