Skip to content

Commit d0f00cf

Browse files
committed
Dialyzer in the green
1 parent 5b67ded commit d0f00cf

File tree

5 files changed

+97
-53
lines changed

5 files changed

+97
-53
lines changed

lib/cldr/date.ex

+17-9
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ defmodule Cldr.Date do
2222
import Cldr.DateTime,
2323
only: [resolve_plural_format: 4, apply_preference: 2]
2424

25+
@typep options :: Keyword.t() | map()
26+
2527
@format_types [:short, :medium, :long, :full]
2628
@default_format_type :medium
2729
@default_prefer :unicode
@@ -122,7 +124,10 @@ defmodule Cldr.Date do
122124
{Cldr.DateTime.UnresolvedFormat, "No available format resolved for :dy"}}
123125
124126
"""
125-
@spec to_string(Cldr.Calendar.any_date_time(), Cldr.backend() | Keyword.t(), Keyword.t()) ::
127+
@spec to_string(Cldr.Calendar.any_date_time(), Cldr.backend(), options()) ::
128+
{:ok, String.t()} | {:error, {module, String.t()}}
129+
130+
@spec to_string(Cldr.Calendar.any_date_time(), options(), []) ::
126131
{:ok, String.t()} | {:error, {module, String.t()}}
127132

128133
def to_string(date, backend \\ Cldr.Date.default_backend(), options \\ [])
@@ -241,8 +246,11 @@ defmodule Cldr.Date do
241246
"juin 2024"
242247
243248
"""
244-
@spec to_string!(Cldr.Calendar.any_date_time(), Cldr.backend() | Keyword.t(), Keyword.t()) ::
245-
String.t() | no_return
249+
@spec to_string!(Cldr.Calendar.any_date_time(), Cldr.backend(), options()) ::
250+
String.t() | no_return()
251+
252+
@spec to_string!(Cldr.Calendar.any_date_time(), options(), []) ::
253+
String.t() | no_return()
246254

247255
def to_string!(date, backend \\ Cldr.Date.default_backend(), options \\ [])
248256

@@ -267,7 +275,7 @@ defmodule Cldr.Date do
267275
%{locale: locale, number_system: number_system, format: format, prefer: prefer}
268276
end
269277

270-
defp normalize_options(date, backend, options) do
278+
defp normalize_options(date, backend, options) when is_list(options) do
271279
{locale, _backend} = Cldr.locale_and_backend_from(options[:locale], backend)
272280
locale_number_system = Cldr.Number.System.number_system_from_locale(locale, backend)
273281
number_system = Keyword.get(options, :number_system, locale_number_system)
@@ -276,12 +284,12 @@ defmodule Cldr.Date do
276284
format = format_from_options(date, format_option, @default_format_type, prefer)
277285

278286
options
279-
|> Keyword.put(:locale, locale)
280-
|> Keyword.put(:format, format)
281-
|> Keyword.put(:prefer, prefer)
282-
|> Keyword.delete(:style)
283-
|> Keyword.put_new(:number_system, number_system)
284287
|> Map.new()
288+
|> Map.put(:locale, locale)
289+
|> Map.put(:format, format)
290+
|> Map.put(:prefer, prefer)
291+
|> Map.delete(:style)
292+
|> Map.put_new(:number_system, number_system)
285293
end
286294

287295
# Full date, no option, use the default format

lib/cldr/date_time.ex

+11-3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ defmodule Cldr.DateTime do
2323
alias Cldr.LanguageTag
2424
alias Cldr.Locale
2525

26+
@typep options :: Keyword.t() | map()
27+
2628
@format_types [:short, :medium, :long, :full]
2729
@default_format_type :medium
2830
@default_style :default
@@ -185,7 +187,10 @@ defmodule Cldr.DateTime do
185187
{:ok, "semaine 1 de 2000"}
186188
187189
"""
188-
@spec to_string(Cldr.Calendar.any_date_time(), Cldr.backend() | Keyword.t(), Keyword.t()) ::
190+
@spec to_string(Cldr.Calendar.any_date_time(), Cldr.backend(), options()) ::
191+
{:ok, String.t()} | {:error, {module, String.t()}}
192+
193+
@spec to_string(Cldr.Calendar.any_date_time(), options(), []) ::
189194
{:ok, String.t()} | {:error, {module, String.t()}}
190195

191196
def to_string(datetime, backend \\ Cldr.Date.default_backend(), options \\ [])
@@ -316,8 +321,11 @@ defmodule Cldr.DateTime do
316321
"semaine 1 de 2000"
317322
318323
"""
319-
@spec to_string!(Cldr.Calendar.any_date_time(), Cldr.backend() | Keyword.t(), Keyword.t()) ::
320-
String.t() | no_return
324+
@spec to_string!(Cldr.Calendar.any_date_time(), Cldr.backend(), options()) ::
325+
String.t() | no_return()
326+
327+
@spec to_string!(Cldr.Calendar.any_date_time(), options(), []) ::
328+
String.t() | no_return()
321329

322330
def to_string!(datetime, backend \\ Cldr.Date.default_backend(), options \\ [])
323331

lib/cldr/interval/date.ex

+27-14
Original file line numberDiff line numberDiff line change
@@ -383,15 +383,11 @@ defmodule Cldr.Date.Interval do
383383
def to_string(unquote(date()) = from, unquote(date()) = to, backend, options) do
384384
{locale, backend} = Cldr.locale_and_backend_from(options[:locale], backend)
385385
formatter = Module.concat(backend, DateTime.Formatter)
386-
format = options[:date_format] || options[:format] || @default_format
387-
locale_number_system = Cldr.Number.System.number_system_from_locale(locale, backend)
388-
number_system = Keyword.get(options, :number_system, locale_number_system)
389-
prefer = Keyword.get(options, :prefer, @default_prefer) |> List.wrap()
386+
options = normalize_options(locale, backend, options)
390387

391-
options =
392-
options
393-
|> Keyword.put(:locale, locale)
394-
|> Keyword.put(:number_system, number_system)
388+
number_system = options.number_system
389+
prefer = options.prefer
390+
format = options.format
395391

396392
with {:ok, _} <- from_less_than_or_equal_to(from, to),
397393
{:ok, backend} <- Cldr.validate_backend(backend),
@@ -659,6 +655,26 @@ defmodule Cldr.Date.Interval do
659655
end
660656
end
661657

658+
defp normalize_options(_locale, _backend, %{} = options) do
659+
options
660+
end
661+
662+
defp normalize_options(locale, backend, options) do
663+
format = options[:date_format] || options[:format] || @default_format
664+
locale_number_system = Cldr.Number.System.number_system_from_locale(locale, backend)
665+
number_system = Keyword.get(options, :number_system, locale_number_system)
666+
prefer = Keyword.get(options, :prefer, @default_prefer) |> List.wrap()
667+
style = Keyword.get(options, :style, @default_style)
668+
669+
options
670+
|> Map.new()
671+
|> Map.put(:format, format)
672+
|> Map.put(:style, style)
673+
|> Map.put(:locale, locale)
674+
|> Map.put(:number_system, number_system)
675+
|> Map.put(:prefer, prefer)
676+
end
677+
662678
defp from_less_than_or_equal_to(from, to) do
663679
case Date.compare(from, to) do
664680
comp when comp in [:eq, :lt] -> {:ok, comp}
@@ -667,13 +683,10 @@ defmodule Cldr.Date.Interval do
667683
end
668684

669685
defp resolve_format(from, to, formats, options) do
670-
requested_format = Keyword.get(options, :format, @default_format)
671-
requested_style = Keyword.get(options, :style, @default_style)
672-
673-
with {:ok, style} <- validate_style(requested_style),
674-
{:ok, format} <- validate_format(formats, style, requested_format),
686+
with {:ok, style} <- validate_style(options.style),
687+
{:ok, format} <- validate_format(formats, style, options.format),
675688
{:ok, greatest_difference} <- greatest_difference(from, to) do
676-
greatest_difference_format(format, requested_format, requested_style, greatest_difference)
689+
greatest_difference_format(format, format, style, greatest_difference)
677690
end
678691
end
679692

lib/cldr/interval/time.ex

+26-20
Original file line numberDiff line numberDiff line change
@@ -239,15 +239,11 @@ defmodule Cldr.Time.Interval do
239239
def to_string(unquote(time()) = from, unquote(time()) = to, backend, options) do
240240
{locale, backend} = Cldr.locale_and_backend_from(options[:locale], backend)
241241
formatter = Module.concat(backend, DateTime.Formatter)
242-
format = options[:time_format] || options[:format] || @default_format
243-
locale_number_system = Cldr.Number.System.number_system_from_locale(locale, backend)
244-
number_system = Keyword.get(options, :number_system, locale_number_system)
245-
prefer = Keyword.get(options, :prefer, @default_prefer)
242+
options = normalize_options(locale, backend, options)
246243

247-
options =
248-
options
249-
|> Keyword.put(:locale, locale)
250-
|> Keyword.put(:number_system, number_system)
244+
number_system = options.number_system
245+
prefer = options.prefer
246+
format = options.format
251247

252248
with {:ok, backend} <- Cldr.validate_backend(backend),
253249
{:ok, locale} <- Cldr.validate_locale(locale, backend),
@@ -399,6 +395,26 @@ defmodule Cldr.Time.Interval do
399395
end
400396
end
401397

398+
defp normalize_options(_locale, _backend, %{} = options) do
399+
options
400+
end
401+
402+
defp normalize_options(locale, backend, options) do
403+
format = options[:time_format] || options[:format] || @default_format
404+
locale_number_system = Cldr.Number.System.number_system_from_locale(locale, backend)
405+
number_system = Keyword.get(options, :number_system, locale_number_system)
406+
prefer = Keyword.get(options, :prefer, @default_prefer)
407+
style = Keyword.get(options, :style, @default_style)
408+
409+
options
410+
|> Map.new()
411+
|> Map.put(:format, format)
412+
|> Map.put(:style, style)
413+
|> Map.put(:locale, locale)
414+
|> Map.put(:number_system, number_system)
415+
|> Map.put(:prefer, prefer)
416+
end
417+
402418
@doc """
403419
Returns the format code representing the date or
404420
time unit that is the greatest difference between
@@ -434,19 +450,9 @@ defmodule Cldr.Time.Interval do
434450
Cldr.Date.Interval.greatest_difference(from, to)
435451
end
436452

437-
# defp from_less_than_or_equal_to(from, to) do
438-
# case Time.compare(from, to) do
439-
# comp when comp in [:eq, :lt] -> {:ok, comp}
440-
# _other -> {:error, Cldr.Date.Interval.datetime_order_error(from, to)}
441-
# end
442-
# end
443-
444453
defp resolve_format(from, to, formats, locale, options) do
445-
format = Keyword.get(options, :format, @default_format)
446-
style = Keyword.get(options, :style, @default_style)
447-
448-
with {:ok, style} <- validate_style(style),
449-
{:ok, format} <- validate_format(formats, style, locale, format),
454+
with {:ok, style} <- validate_style(options.style),
455+
{:ok, format} <- validate_format(formats, style, locale, options.format),
450456
{:ok, greatest_difference} <- greatest_difference(from, to) do
451457
greatest_difference_format(from, to, format, greatest_difference)
452458
end

lib/cldr/time.ex

+16-7
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ defmodule Cldr.Time do
2424
import Cldr.DateTime,
2525
only: [resolve_plural_format: 4, apply_preference: 2]
2626

27+
@typep options :: Keyword.t() | map()
28+
2729
@format_types [:short, :medium, :long, :full]
2830
@default_format_type :medium
2931
@default_prefer :unicode
@@ -129,7 +131,10 @@ defmodule Cldr.Time do
129131
{Cldr.DateTime.UnresolvedFormat, "No available format resolved for :m"}}
130132
131133
"""
132-
@spec to_string(map, Cldr.backend() | Keyword.t(), Keyword.t()) ::
134+
@spec to_string(Cldr.Calendar.any_date_time(), Cldr.backend(), options()) ::
135+
{:ok, String.t()} | {:error, {module, String.t()}}
136+
137+
@spec to_string(Cldr.Calendar.any_date_time(), options(), []) ::
133138
{:ok, String.t()} | {:error, {module, String.t()}}
134139

135140
def to_string(time, backend \\ Cldr.Date.default_backend(), options \\ [])
@@ -247,7 +252,11 @@ defmodule Cldr.Time do
247252
"11:11 PM"
248253
249254
"""
250-
@spec to_string!(map, Cldr.backend() | Keyword.t(), Keyword.t()) :: String.t() | no_return
255+
@spec to_string!(Cldr.Calendar.any_date_time(), Cldr.backend(), options()) ::
256+
String.t() | no_return()
257+
258+
@spec to_string!(Cldr.Calendar.any_date_time(), options(), []) ::
259+
String.t() | no_return()
251260

252261
def to_string!(time, backend \\ Cldr.Date.default_backend(), options \\ [])
253262

@@ -281,12 +290,12 @@ defmodule Cldr.Time do
281290
format = format_from_options(time, format_option, @default_format_type, prefer)
282291

283292
options
284-
|> Keyword.put(:locale, locale)
285-
|> Keyword.put(:format, format)
286-
|> Keyword.put(:prefer, prefer)
287-
|> Keyword.delete(:style)
288-
|> Keyword.put_new(:number_system, number_system)
289293
|> Map.new()
294+
|> Map.put(:locale, locale)
295+
|> Map.put(:format, format)
296+
|> Map.put(:prefer, prefer)
297+
|> Map.delete(:style)
298+
|> Map.put_new(:number_system, number_system)
290299
end
291300

292301
# Full date, no option, use the default format

0 commit comments

Comments
 (0)