Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:
name: Ex${{matrix.elixir}}/OTP${{matrix.otp}}
strategy:
matrix:
elixir: ['1.14.2']
elixir: ['1.14.2', '1.15.0']
otp: ['25.1.2']
steps:
- uses: actions/checkout@v3
Expand Down
23 changes: 23 additions & 0 deletions lib/style/single_node.ex
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,29 @@ defmodule Styler.Style.SingleNode do
defp style({{:., dm, [{:__aliases__, am, [:Logger]}, :warn]}, funm, args}),
do: {{:., dm, [{:__aliases__, am, [:Logger]}, :warning]}, funm, args}

# Transform Timex defdelegates
defp style({{:., dm, [{:__aliases__, am, [:Timex]}, :today]}, funm, args}),
do: {{:., dm, [{:__aliases__, am, [:Date]}, :utc_today]}, funm, args}

defp style({{:., dm, [{:__aliases__, am, [:Timex]}, :now]}, funm, args}),
do: {{:., dm, [{:__aliases__, am, [:DateTime]}, :utc_now]}, funm, args}
Comment on lines +99 to +103
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let me sit on these ones -- i'd considered doing the same earlier, but nixed it as too specific to adbe internals 🤔 still, this repo is all about forcing our views on others xD


if Version.match?(System.version(), ">= 1.15.0-dev") do
# Timex.{before?,after?} -> DateTime.{before?,after?}
defp style({{:., dm, [{:__aliases__, am, [:Timex]}, fun]}, funm, args}) when fun in [:before?, :after?],
do: {{:., dm, [{:__aliases__, am, [:DateTime]}, fun]}, funm, args}

# {DateTime,NaiveDateTime,Time,Date}.compare(a, b) == :lt -> {DateTime,NaiveDateTime,Time,Date}.before?(a, b)
defp style({:==, _, [{{:., dm, [{:__aliases__, am, [mod]}, :compare]}, funm, args}, {:__block__, _, [:lt]}]})
when mod in ~w[DateTime NaiveDateTime Time Date]a,
do: {{:., dm, [{:__aliases__, am, [mod]}, :before?]}, funm, args}

# {DateTime,NaiveDateTime,Time,Date}.compare(a, b) == :gt -> {DateTime,NaiveDateTime,Time,Date}.after?(a, b)
defp style({:==, _, [{{:., dm, [{:__aliases__, am, [mod]}, :compare]}, funm, args}, {:__block__, _, [:gt]}]})
when mod in ~w[DateTime NaiveDateTime Time Date]a,
do: {{:., dm, [{:__aliases__, am, [mod]}, :after?]}, funm, args}
end

# Remove parens from 0 arity funs (Credo.Check.Readability.ParenthesesOnZeroArityDefs)
defp style({def, dm, [{fun, funm, []} | rest]}) when def in ~w(def defp)a and is_atom(fun),
do: style({def, dm, [{fun, Keyword.delete(funm, :closing), nil} | rest]})
Expand Down
32 changes: 32 additions & 0 deletions test/style/single_node_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,38 @@ defmodule Styler.Style.SingleNodeTest do
assert_style("Logger.warn(foo, bar)", "Logger.warning(foo, bar)")
end

test "Timex.now -> DateTime.utc_now" do
assert_style("Timex.now()", "DateTime.utc_now()")
end

test "Timex.today -> Date.utc_today" do
assert_style("Timex.today()", "Date.utc_today()")
end

if Version.match?(System.version(), ">= 1.15.0-dev") do
test "Timex.before?(a, b) -> DateTime.before?(a, b)" do
assert_style("Timex.before?(a, b)", "DateTime.before?(a, b)")
end

test "Timex.after?(a, b) -> DateTime.after?(a, b)" do
assert_style("Timex.after?(a, b)", "DateTime.after?(a, b)")
end

test "{DateTime,NaiveDateTime,Time,Date}.compare to {DateTime,NaiveDateTime,Time,Date}.before?" do
assert_style("DateTime.compare(foo, bar) == :lt", "DateTime.before?(foo, bar)")
assert_style("NaiveDateTime.compare(foo, bar) == :lt", "NaiveDateTime.before?(foo, bar)")
assert_style("Time.compare(foo, bar) == :lt", "Time.before?(foo, bar)")
assert_style("Date.compare(foo, bar) == :lt", "Date.before?(foo, bar)")
end

test "{DateTime,NaiveDateTime,Time,Date}.compare to {DateTime,NaiveDateTime,Time,Date}.after?" do
assert_style("DateTime.compare(foo, bar) == :gt", "DateTime.after?(foo, bar)")
assert_style("NaiveDateTime.compare(foo, bar) == :gt", "NaiveDateTime.after?(foo, bar)")
assert_style("Time.compare(foo, bar) == :gt", "Time.after?(foo, bar)")
assert_style("Time.compare(foo, bar) == :gt", "Time.after?(foo, bar)")
end
end

describe "def / defp" do
test "0-arity functions have parens removed" do
assert_style("def foo(), do: :ok", "def foo, do: :ok")
Expand Down