Skip to content

Commit 2c3a906

Browse files
authored
Improve NaiveDateTime.from_erl and Time.from_erl specs (#13987)
1 parent cb2e036 commit 2c3a906

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

lib/elixir/lib/calendar/naive_datetime.ex

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ defmodule NaiveDateTime do
252252
Calendar.hour(),
253253
Calendar.minute(),
254254
Calendar.second(),
255-
Calendar.microsecond() | non_neg_integer,
255+
Calendar.microsecond() | non_neg_integer(),
256256
Calendar.calendar()
257257
) :: {:ok, t} | {:error, atom}
258258
def new(year, month, day, hour, minute, second, microsecond \\ {0, 0}, calendar \\ Calendar.ISO)
@@ -317,7 +317,7 @@ defmodule NaiveDateTime do
317317
Calendar.hour(),
318318
Calendar.minute(),
319319
Calendar.second(),
320-
Calendar.microsecond() | non_neg_integer,
320+
Calendar.microsecond() | non_neg_integer(),
321321
Calendar.calendar()
322322
) :: t
323323
def new!(
@@ -993,6 +993,8 @@ defmodule NaiveDateTime do
993993
994994
iex> NaiveDateTime.from_erl({{2000, 1, 1}, {13, 30, 15}})
995995
{:ok, ~N[2000-01-01 13:30:15]}
996+
iex> NaiveDateTime.from_erl({{2000, 1, 1}, {13, 30, 15}}, 5000)
997+
{:ok, ~N[2000-01-01 13:30:15.005000]}
996998
iex> NaiveDateTime.from_erl({{2000, 1, 1}, {13, 30, 15}}, {5000, 3})
997999
{:ok, ~N[2000-01-01 13:30:15.005]}
9981000
iex> NaiveDateTime.from_erl({{2000, 13, 1}, {13, 30, 15}})
@@ -1001,7 +1003,11 @@ defmodule NaiveDateTime do
10011003
{:error, :invalid_date}
10021004
10031005
"""
1004-
@spec from_erl(:calendar.datetime(), Calendar.microsecond(), Calendar.calendar()) ::
1006+
@spec from_erl(
1007+
:calendar.datetime(),
1008+
Calendar.microsecond() | non_neg_integer(),
1009+
Calendar.calendar()
1010+
) ::
10051011
{:ok, t} | {:error, atom}
10061012
def from_erl(tuple, microsecond \\ {0, 0}, calendar \\ Calendar.ISO)
10071013

@@ -1020,13 +1026,19 @@ defmodule NaiveDateTime do
10201026
10211027
iex> NaiveDateTime.from_erl!({{2000, 1, 1}, {13, 30, 15}})
10221028
~N[2000-01-01 13:30:15]
1029+
iex> NaiveDateTime.from_erl!({{2000, 1, 1}, {13, 30, 15}}, 5000)
1030+
~N[2000-01-01 13:30:15.005000]
10231031
iex> NaiveDateTime.from_erl!({{2000, 1, 1}, {13, 30, 15}}, {5000, 3})
10241032
~N[2000-01-01 13:30:15.005]
10251033
iex> NaiveDateTime.from_erl!({{2000, 13, 1}, {13, 30, 15}})
10261034
** (ArgumentError) cannot convert {{2000, 13, 1}, {13, 30, 15}} to naive datetime, reason: :invalid_date
10271035
10281036
"""
1029-
@spec from_erl!(:calendar.datetime(), Calendar.microsecond(), Calendar.calendar()) :: t
1037+
@spec from_erl!(
1038+
:calendar.datetime(),
1039+
Calendar.microsecond() | non_neg_integer(),
1040+
Calendar.calendar()
1041+
) :: t
10301042
def from_erl!(tuple, microsecond \\ {0, 0}, calendar \\ Calendar.ISO) do
10311043
case from_erl(tuple, microsecond, calendar) do
10321044
{:ok, value} ->

lib/elixir/lib/calendar/time.ex

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ defmodule Time do
115115
Calendar.hour(),
116116
Calendar.minute(),
117117
Calendar.second(),
118-
Calendar.microsecond() | non_neg_integer,
118+
Calendar.microsecond() | non_neg_integer(),
119119
Calendar.calendar()
120120
) :: {:ok, t} | {:error, atom}
121121
def new(hour, minute, second, microsecond \\ {0, 0}, calendar \\ Calendar.ISO)
@@ -355,13 +355,21 @@ defmodule Time do
355355
356356
## Examples
357357
358+
iex> Time.from_erl({23, 30, 15})
359+
{:ok, ~T[23:30:15]}
360+
iex> Time.from_erl({23, 30, 15}, 5000)
361+
{:ok, ~T[23:30:15.005000]}
358362
iex> Time.from_erl({23, 30, 15}, {5000, 3})
359363
{:ok, ~T[23:30:15.005]}
360364
iex> Time.from_erl({24, 30, 15})
361365
{:error, :invalid_time}
362366
363367
"""
364-
@spec from_erl(:calendar.time(), Calendar.microsecond(), Calendar.calendar()) ::
368+
@spec from_erl(
369+
:calendar.time(),
370+
Calendar.microsecond() | non_neg_integer(),
371+
Calendar.calendar()
372+
) ::
365373
{:ok, t} | {:error, atom}
366374
def from_erl(tuple, microsecond \\ {0, 0}, calendar \\ Calendar.ISO)
367375

@@ -377,6 +385,8 @@ defmodule Time do
377385
378386
iex> Time.from_erl!({23, 30, 15})
379387
~T[23:30:15]
388+
iex> Time.from_erl!({23, 30, 15}, 5000)
389+
~T[23:30:15.005000]
380390
iex> Time.from_erl!({23, 30, 15}, {5000, 3})
381391
~T[23:30:15.005]
382392
iex> Time.from_erl!({24, 30, 15})

0 commit comments

Comments
 (0)