diff --git a/CHANGELOG.md b/CHANGELOG.md index 35ef47df1..2d340bd41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ **Note that `ex_cldr` version 2.39.0 and later are supported on Elixir 1.12 and later only.** +## Cldr v2.40.1 + +This is the changelog for Cldr v2.40.1 released on August 16th, 2024. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr/tags) + +### Bug Fixes + +* Fix specs to suport dialyzer flags `:error_handling, :unknown, :underspecs, :extra_return, :missing_return` + ## Cldr v2.40.0 This is the changelog for Cldr v2.40.0 released on July 26th, 2024. For older changelogs please consult the release tag on [GitHub](https://github.com/elixir-cldr/cldr/tags) diff --git a/README.md b/README.md index 3da87f164..32cb36f1d 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ > does not attempt to read the configuration of either Phoenix of Ecto. > > Specifing the `:json_library` parameter under the `:ex_cldr` -> configuration key in `config.exs` is recommended however when executing on OTP +> configuration key in `config.exs` is recommended when executing on OTP > versions below OTP 27 but the availability of `Jason` or `Poison` will still be > automatically detected and configured if the `:json_library` key is not set. diff --git a/lib/cldr.ex b/lib/cldr.ex index 8ff13b778..eecb05566 100644 --- a/lib/cldr.ex +++ b/lib/cldr.ex @@ -1279,7 +1279,7 @@ defmodule Cldr do "「Quoted String」" """ - @spec quote(String.t(), backend(), Keyword.t()) :: String.t() + @spec quote(String.t(), backend(), Keyword.t()) :: String.t() | {:error, {module, String.t()}} def quote(string, backend \\ default_backend!(), options \\ []) def quote(string, options, []) when is_binary(string) and is_list(options) do @@ -1336,7 +1336,8 @@ defmodule Cldr do "And furthermore … there is much to be done" """ - @spec ellipsis(String.t() | list(String.t()), backend(), Keyword.t()) :: String.t() + @spec ellipsis(String.t() | list(String.t()), backend(), Keyword.t()) :: + String.t() | {:error, {module, String.t()}} def ellipsis(string, backend \\ default_backend!(), options \\ []) def ellipsis(string, options, []) when is_list(options) do @@ -2430,8 +2431,9 @@ defmodule Cldr do |> String.downcase() |> String.to_existing_atom() |> validate_measurement_system() - rescue ArgumentError -> - {:error, unknown_measurement_system_error(system)} + rescue + ArgumentError -> + {:error, unknown_measurement_system_error(system)} end def validate_measurement_system(system) when system in @measurement_systems do diff --git a/lib/cldr/backend/cldr_backend.ex b/lib/cldr/backend/cldr_backend.ex index dcb809617..4d8514467 100644 --- a/lib/cldr/backend/cldr_backend.ex +++ b/lib/cldr/backend/cldr_backend.ex @@ -70,7 +70,7 @@ defmodule Cldr.Backend do :"001" """ - @spec default_territory() :: Locale.territory_code() + @spec default_territory() :: Locale.territory_code() | {:error, {module, String.t()}} def default_territory do Cldr.Locale.territory_from_locale(@default_locale) end @@ -474,7 +474,7 @@ defmodule Cldr.Backend do "「Quoted String」" """ - @spec quote(String.t(), Keyword.t()) :: String.t() + @spec quote(String.t(), Keyword.t()) :: String.t() | {:error, {module, String.t()}} def quote(string, options \\ []) when is_binary(string) and is_list(options) do locale = options[:locale] || Cldr.get_locale() @@ -530,7 +530,8 @@ defmodule Cldr.Backend do "And furthermore … there is much to be done" """ - @spec ellipsis(String.t() | list(String.t()), Keyword.t()) :: String.t() + @spec ellipsis(String.t() | list(String.t()), Keyword.t()) :: + String.t() | {:error, {module, String.t()}} def ellipsis(string, options \\ []) when is_list(options) do locale = options[:locale] || Cldr.get_locale() diff --git a/lib/cldr/backend/locale.ex b/lib/cldr/backend/locale.ex index 32ee7489c..971dd7a07 100644 --- a/lib/cldr/backend/locale.ex +++ b/lib/cldr/backend/locale.ex @@ -47,7 +47,7 @@ defmodule Cldr.Locale.Backend do """ @spec territory_from_locale(LanguageTag.t() | Locale.locale_name()) :: - Locale.territory_code() + Locale.territory_code() | {:error, {module, String.t()}} @doc since: "2.18.2" diff --git a/lib/cldr/config/config.ex b/lib/cldr/config/config.ex index c12b02e60..9be053ea7 100644 --- a/lib/cldr/config/config.ex +++ b/lib/cldr/config/config.ex @@ -1513,7 +1513,7 @@ defmodule Cldr.Config do true """ - @spec gettext_configured?(t()) :: boolean + @spec gettext_configured?(t()) :: boolean | nil def gettext_configured?(config) do Application.ensure_all_started(:gettext) gettext_module = gettext(config) diff --git a/lib/cldr/config/dependents.ex b/lib/cldr/config/dependents.ex index bf469bf63..b8c280088 100644 --- a/lib/cldr/config/dependents.ex +++ b/lib/cldr/config/dependents.ex @@ -10,7 +10,7 @@ defmodule Cldr.Config.Dependents do Cldr.Unit => {Cldr.Unit.Backend, :define_unit_module}, Cldr.Territory => {Cldr.Territory.Backend, :define_territory_module}, Cldr.Calendar => {Cldr.Calendar.Backend, :define_calendar_module}, - Cldr.PersonName => {Cldr.PersonName.Backend, :define_person_name_module}, + Cldr.PersonName => {Cldr.PersonName.Backend, :define_person_name_module} } end diff --git a/lib/cldr/config/rbnf_config.ex b/lib/cldr/config/rbnf_config.ex index 06982042d..cec3ce54e 100644 --- a/lib/cldr/config/rbnf_config.ex +++ b/lib/cldr/config/rbnf_config.ex @@ -122,7 +122,7 @@ defmodule Cldr.Rbnf.Config do # a valid RBNF locale def for_locale(locale_name) when Cldr.is_locale_name(locale_name) do - if File.exists?(locale_path(locale_name)) do + if File.exists?(locale_path(locale_name)) do rules = locale_name |> locale_path diff --git a/lib/cldr/kino/data_table.ex b/lib/cldr/kino/data_table.ex index 37d88b238..35aa042eb 100644 --- a/lib/cldr/kino/data_table.ex +++ b/lib/cldr/kino/data_table.ex @@ -19,4 +19,4 @@ defmodule Cldr.Kino.DataTable do :default end end -end \ No newline at end of file +end diff --git a/lib/cldr/language_tag.ex b/lib/cldr/language_tag.ex index 2f4c6d04c..3f58b39f7 100644 --- a/lib/cldr/language_tag.ex +++ b/lib/cldr/language_tag.ex @@ -384,7 +384,7 @@ defmodule Cldr.LanguageTag do string = Cldr.LanguageTag.to_string(language_tag) backend = language_tag.backend - "#{inspect backend}.Locale.new!(" <> inspect(string) <> ")" + "#{inspect(backend)}.Locale.new!(" <> inspect(string) <> ")" # "#Cldr.LanguageTag<" <> language_tag.canonical_locale_name <> " [validated]>" end end diff --git a/lib/cldr/locale.ex b/lib/cldr/locale.ex index bb591379d..d22cf5fec 100644 --- a/lib/cldr/locale.ex +++ b/lib/cldr/locale.ex @@ -1074,7 +1074,8 @@ defmodule Cldr.Locale do however it is correctly parsed to support future use. """ - @spec territory_from_locale(LanguageTag.t() | locale_name() | String.t()) :: territory_code() + @spec territory_from_locale(LanguageTag.t() | locale_name() | String.t()) :: + territory_code() | {:error, {module, String.t()}} @doc since: "2.18.2" @@ -1866,7 +1867,7 @@ defmodule Cldr.Locale do end end - @spec gettext_locale_name(Cldr.LanguageTag.t()) :: locale_name | nil + @spec gettext_locale_name(Cldr.LanguageTag.t()) :: String.t() | nil defp gettext_locale_name(%LanguageTag{} = language_tag) do language_tag |> first_match(&known_gettext_locale_name(&1, &2, language_tag.backend)) diff --git a/lib/cldr/locale/loader.ex b/lib/cldr/locale/loader.ex index 202ca2fae..6ee4239c5 100644 --- a/lib/cldr/locale/loader.ex +++ b/lib/cldr/locale/loader.ex @@ -121,7 +121,7 @@ defmodule Cldr.Locale.Loader do "locale_display_names", "languages", "lenient_parse", - "dates", + "dates" ] @doc false @@ -201,7 +201,6 @@ defmodule Cldr.Locale.Loader do Map.put(content, :dates, dates) end - @doc false def underscore(string) when is_binary(string) do string diff --git a/lib/cldr/plural_rules/plural_rule.ex b/lib/cldr/plural_rules/plural_rule.ex index 9d974c7c1..e89cf12fd 100644 --- a/lib/cldr/plural_rules/plural_rule.ex +++ b/lib/cldr/plural_rules/plural_rule.ex @@ -448,7 +448,7 @@ defmodule Cldr.Number.PluralRule do Math.number_or_decimal(), Locale.locale_name() | LanguageTag.t(), atom() | pos_integer() - ) :: Cldr.Number.PluralRule.plural_type() + ) :: Cldr.Number.PluralRule.plural_type() | {:error, {module, String.t()}} def plural_rule(number, locale, rounding \\ Math.default_rounding()) @@ -655,7 +655,7 @@ defmodule Cldr.Number.PluralRule do first :: Cldr.Number.PluralRule.plural_type(), last :: Cldr.Number.PluralRule.plural_type(), locale :: Cldr.Locale.locale_name() | Cldr.LanguageTag.t() - ) :: Cldr.Number.PluralRule.plural_type() + ) :: Cldr.Number.PluralRule.plural_type() | {:error, {module, String.t()}} def plural_rule(first, last, %Cldr.LanguageTag{language: language}) do plural_rule(first, last, language) diff --git a/lib/cldr/substitution.ex b/lib/cldr/substitution.ex index d70a2c480..fb8e522d5 100644 --- a/lib/cldr/substitution.ex +++ b/lib/cldr/substitution.ex @@ -29,7 +29,7 @@ defmodule Cldr.Substitution do of templates that simplify and speed up parameter substitution at runtime. """ - @spec parse(String.t()) :: [String.t() | integer, ...] + @spec parse(String.t()) :: [String.t() | integer, ...] | {:error, String.t()} def parse("") do [] end @@ -70,7 +70,7 @@ defmodule Cldr.Substitution do def substitute(item, [0]) do [item] end - + def substitute([item], [0]) do [item] end diff --git a/mix.exs b/mix.exs index 96b491ded..e29d1d736 100644 --- a/mix.exs +++ b/mix.exs @@ -23,7 +23,13 @@ defmodule Cldr.Mixfile do dialyzer: [ ignore_warnings: ".dialyzer_ignore_warnings", plt_add_apps: ~w(gettext inets jason mix sweet_xml nimble_parsec)a, - flags: [:underspecs] + flags: [ + :error_handling, + :unknown, + :underspecs, + :extra_return, + :missing_return + ] ], compilers: [:yecc, :leex] ++ Mix.compilers() ] diff --git a/mix.lock b/mix.lock index 9b39d810c..140e27862 100644 --- a/mix.lock +++ b/mix.lock @@ -1,18 +1,18 @@ %{ "benchee": {:hex, :benchee, "1.3.1", "c786e6a76321121a44229dde3988fc772bca73ea75170a73fd5f4ddf1af95ccf", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}, {:statistex, "~> 1.0", [hex: :statistex, repo: "hexpm", optional: false]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "76224c58ea1d0391c8309a8ecbfe27d71062878f59bd41a390266bf4ac1cc56d"}, - "cldr_utils": {:hex, :cldr_utils, "2.28.0", "ce309d11b79fc13e1f22f808b5e3c1647102b01b11734ca8cb0296ca6d406fe4", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:certifi, "~> 2.5", [hex: :certifi, repo: "hexpm", optional: true]}, {:decimal, "~> 1.9 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "e7ac4bcea0fdbc11b5295ef30dd7b18d0922512399361af06a97198e57d23742"}, + "cldr_utils": {:hex, :cldr_utils, "2.28.1", "3d85c835e1d0b7bceb9feed1647025ff7df59180246f13b582422f12b1afd52c", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:certifi, "~> 2.5", [hex: :certifi, repo: "hexpm", optional: true]}, {:decimal, "~> 1.9 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "79a5f645481d09b1372962384aa275d67d69273e73e3b38a9fee363eb57c2b79"}, "decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, "dialyxir": {:hex, :dialyxir, "1.4.3", "edd0124f358f0b9e95bfe53a9fcf806d615d8f838e2202a9f430d59566b6b53b", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "bf2cfb75cd5c5006bec30141b131663299c661a864ec7fbbc72dfa557487a986"}, - "earmark_parser": {:hex, :earmark_parser, "1.4.40", "f3534689f6b58f48aa3a9ac850d4f05832654fe257bf0549c08cc290035f70d5", [:mix], [], "hexpm", "cdb34f35892a45325bad21735fadb88033bcb7c4c296a999bde769783f53e46a"}, + "earmark_parser": {:hex, :earmark_parser, "1.4.41", "ab34711c9dc6212dda44fcd20ecb87ac3f3fce6f0ca2f28d4a00e4154f8cd599", [:mix], [], "hexpm", "a81a04c7e34b6617c2792e291b5a2e57ab316365c2644ddc553bb9ed863ebefa"}, "erlex": {:hex, :erlex, "0.2.7", "810e8725f96ab74d17aac676e748627a07bc87eb950d2b83acd29dc047a30595", [:mix], [], "hexpm", "3ed95f79d1a844c3f6bf0cea61e0d5612a42ce56da9c03f01df538685365efb0"}, "ex_doc": {:hex, :ex_doc, "0.34.2", "13eedf3844ccdce25cfd837b99bea9ad92c4e511233199440488d217c92571e8", [:mix], [{:earmark_parser, "~> 1.4.39", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "5ce5f16b41208a50106afed3de6a2ed34f4acfd65715b82a0b84b49d995f95c1"}, - "expo": {:hex, :expo, "0.5.2", "beba786aab8e3c5431813d7a44b828e7b922bfa431d6bfbada0904535342efe2", [:mix], [], "hexpm", "8c9bfa06ca017c9cb4020fabe980bc7fdb1aaec059fd004c2ab3bff03b1c599c"}, - "gettext": {:hex, :gettext, "0.24.0", "6f4d90ac5f3111673cbefc4ebee96fe5f37a114861ab8c7b7d5b30a1108ce6d8", [:mix], [{:expo, "~> 0.5.1", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "bdf75cdfcbe9e4622dd18e034b227d77dd17f0f133853a1c73b97b3d6c770e8b"}, - "jason": {:hex, :jason, "1.4.3", "d3f984eeb96fe53b85d20e0b049f03e57d075b5acda3ac8d465c969a2536c17b", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "9a90e868927f7c777689baa16d86f4d0e086d968db5c05d917ccff6d443e58a3"}, + "expo": {:hex, :expo, "1.0.0", "647639267e088717232f4d4451526e7a9de31a3402af7fcbda09b27e9a10395a", [:mix], [], "hexpm", "18d2093d344d97678e8a331ca0391e85d29816f9664a25653fd7e6166827827c"}, + "gettext": {:hex, :gettext, "0.25.0", "98a95a862a94e2d55d24520dd79256a15c87ea75b49673a2e2f206e6ebc42e5d", [:mix], [{:expo, "~> 0.5.1 or ~> 1.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "38e5d754e66af37980a94fb93bb20dcde1d2361f664b0a19f01e87296634051f"}, + "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, "makeup": {:hex, :makeup, "1.1.2", "9ba8837913bdf757787e71c1581c21f9d2455f4dd04cfca785c70bbfff1a76a3", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cce1566b81fbcbd21eca8ffe808f33b221f9eee2cbc7a1706fc3da9ff18e6cac"}, "makeup_elixir": {:hex, :makeup_elixir, "0.16.2", "627e84b8e8bf22e60a2579dad15067c755531fea049ae26ef1020cad58fe9578", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "41193978704763f6bbe6cc2758b84909e62984c7752b3784bd3c218bb341706b"}, - "makeup_erlang": {:hex, :makeup_erlang, "1.0.0", "6f0eff9c9c489f26b69b61440bf1b238d95badae49adac77973cbacae87e3c2e", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "ea7a9307de9d1548d2a72d299058d1fd2339e3d398560a0e46c27dab4891e4d2"}, + "makeup_erlang": {:hex, :makeup_erlang, "1.0.1", "c7f58c120b2b5aa5fd80d540a89fdf866ed42f1f3994e4fe189abebeab610839", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "8a89a1eeccc2d798d6ea15496a6e4870b75e014d1af514b1b71fa33134f57814"}, "nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"}, "statistex": {:hex, :statistex, "1.0.0", "f3dc93f3c0c6c92e5f291704cf62b99b553253d7969e9a5fa713e5481cd858a5", [:mix], [], "hexpm", "ff9d8bee7035028ab4742ff52fc80a2aa35cece833cf5319009b52f1b5a86c27"}, "stream_data": {:hex, :stream_data, "1.1.1", "fd515ca95619cca83ba08b20f5e814aaf1e5ebff114659dc9731f966c9226246", [:mix], [], "hexpm", "45d0cd46bd06738463fd53f22b70042dbb58c384bb99ef4e7576e7bb7d3b8c8c"}, diff --git a/mix/support/consolidate.ex b/mix/support/consolidate.ex index 92b846843..a7185b84b 100644 --- a/mix/support/consolidate.ex +++ b/mix/support/consolidate.ex @@ -880,7 +880,14 @@ defmodule Cldr.Consolidate do special: ~x"./@special"s ) |> Enum.map(fn - %{source: source, base_unit: target, special: "", offset: offset, factor: factor, systems: systems} -> + %{ + source: source, + base_unit: target, + special: "", + offset: offset, + factor: factor, + systems: systems + } -> {underscore(source), %{ base_unit: underscore(target), @@ -888,6 +895,7 @@ defmodule Cldr.Consolidate do offset: Parser.parse(offset, 0) |> Expression.run(constants), systems: Parser.systems(systems) }} + %{source: source, base_unit: target, special: special, systems: systems} -> {underscore(source), %{ diff --git a/mix/support/normalize/normalize_datetime.ex b/mix/support/normalize/normalize_datetime.ex index 5abc7d5a4..ed5292196 100644 --- a/mix/support/normalize/normalize_datetime.ex +++ b/mix/support/normalize/normalize_datetime.ex @@ -122,12 +122,23 @@ defmodule Cldr.Normalize.DateTime do end) |> Enum.group_by(&elem(&1, 0), &elem(&1, 1)) |> Enum.map(fn - {key, [item]} -> {key, item} - {key, [format, %{ascii: ascii_format}]} -> {key, %{unicode: format, ascii: ascii_format}} - {key, [%{ascii: ascii_format}, format]} -> {key, %{unicode: format, ascii: ascii_format}} - {key, [format, %{variant: variant_format}]} -> {key, %{default: format, variant: variant_format}} - {key, [%{variant: variant_format}, format]} -> {key, %{default: format, variant: variant_format}} - {key, list} when is_list(list) -> {key, Cldr.Map.merge_map_list(list)} + {key, [item]} -> + {key, item} + + {key, [format, %{ascii: ascii_format}]} -> + {key, %{unicode: format, ascii: ascii_format}} + + {key, [%{ascii: ascii_format}, format]} -> + {key, %{unicode: format, ascii: ascii_format}} + + {key, [format, %{variant: variant_format}]} -> + {key, %{default: format, variant: variant_format}} + + {key, [%{variant: variant_format}, format]} -> + {key, %{default: format, variant: variant_format}} + + {key, list} when is_list(list) -> + {key, Cldr.Map.merge_map_list(list)} end) |> Map.new() @@ -138,8 +149,8 @@ defmodule Cldr.Normalize.DateTime do formats = formats |> Enum.map(fn {interval_name, interval_formats} -> - interval_formats = map_interval_formats(interval_formats) - {interval_name, interval_formats} + interval_formats = map_interval_formats(interval_formats) + {interval_name, interval_formats} end) |> Map.new() @@ -156,10 +167,17 @@ defmodule Cldr.Normalize.DateTime do end) |> Enum.group_by(&elem(&1, 0), &elem(&1, 1)) |> Enum.map(fn - {key, [item]} -> {key, item} - {key, [format, %{variant: variant_format}]} -> {key, %{default: format, variant: variant_format}} - {key, [%{variant: variant_format}, format]} -> {key, %{default: format, variant: variant_format}} - {key, list} when is_list(list) -> {key, Cldr.Map.merge_map_list(list)} + {key, [item]} -> + {key, item} + + {key, [format, %{variant: variant_format}]} -> + {key, %{default: format, variant: variant_format}} + + {key, [%{variant: variant_format}, format]} -> + {key, %{default: format, variant: variant_format}} + + {key, list} when is_list(list) -> + {key, Cldr.Map.merge_map_list(list)} end) |> Map.new() end diff --git a/mix/support/normalize/normalize_number.ex b/mix/support/normalize/normalize_number.ex index 1d0848f65..1f9b08d8a 100644 --- a/mix/support/normalize/normalize_number.ex +++ b/mix/support/normalize/normalize_number.ex @@ -101,7 +101,7 @@ defmodule Cldr.Normalize.Number do |> Enum.uniq() end - @spec normalize_short_format(%{}) :: list() + @spec normalize_short_format(%{}) :: list() | nil def normalize_short_format(nil) do nil end diff --git a/mix/support/normalize/normalize_person_names.ex b/mix/support/normalize/normalize_person_names.ex index bc009b0be..eeef1e96b 100644 --- a/mix/support/normalize/normalize_person_names.ex +++ b/mix/support/normalize/normalize_person_names.ex @@ -13,7 +13,8 @@ defmodule Cldr.Normalize.PersonName do |> Map.delete("sample_name") |> Cldr.Map.deep_map(fn {k, v} -> - if k != "formality" && String.starts_with?(k, "formal") || String.starts_with?(k, "informal") do + if (k != "formality" && String.starts_with?(k, "formal")) || + String.starts_with?(k, "informal") do {String.split(k, "_"), v} else {String.to_atom(k), v} @@ -24,16 +25,21 @@ defmodule Cldr.Normalize.PersonName do end) |> Cldr.Map.deep_map(fn {k, v} when k in [:addressing, :monogram, :referring] -> - formats = Enum.group_by(v, fn {key, _value} -> hd(key) end, fn {_key, value} -> value end) + formats = + Enum.group_by(v, fn {key, _value} -> hd(key) end, fn {_key, value} -> value end) + {k, formats} + other -> other end) |> Cldr.Map.deep_map(fn {k, v} when k in ["formal", "informal"] -> {String.to_atom(k), Enum.sort(v)} + {k, v} when k in [:formality, :length] -> {k, String.to_atom(v)} + other -> other end) diff --git a/test/cldr_test.exs b/test/cldr_test.exs index 055cc1d52..ecd4ba0a3 100644 --- a/test/cldr_test.exs +++ b/test/cldr_test.exs @@ -247,12 +247,12 @@ defmodule Cldr.Test do test "that we can have repeated currencies in a territory" do assert Cldr.Config.territory(:PS)[:currency] == - [ - ILP: %{from: ~D[1967-06-01], to: ~D[1980-02-22]}, - ILS: %{from: ~D[1985-09-04]}, - JOD: %{from: ~D[1996-02-12]}, - JOD: %{from: ~D[1950-07-01], to: ~D[1967-06-01]} - ] + [ + ILP: %{from: ~D[1967-06-01], to: ~D[1980-02-22]}, + ILS: %{from: ~D[1985-09-04]}, + JOD: %{from: ~D[1996-02-12]}, + JOD: %{from: ~D[1950-07-01], to: ~D[1967-06-01]} + ] end test "that we get the correct default json library" do