Skip to content

Commit

Permalink
Merge pull request #512 from danschultzer/elixir-1.15
Browse files Browse the repository at this point in the history
Elixir 1.15
  • Loading branch information
jeremyjh committed Aug 26, 2023
2 parents 25717e5 + 771a2fb commit 997e5bc
Show file tree
Hide file tree
Showing 27 changed files with 113 additions and 45 deletions.
16 changes: 15 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,29 @@ jobs:
- '1.12.3'
- '1.13.4'
- '1.14.3'
- '1.15.4'
otp:
- '23.3'
- '24.3'
- '25.3'
- '26.0'

exclude:
- elixir: '1.12.3'
otp: '25.3'

- elixir: '1.12.3'
otp: '26.0'

- elixir: '1.13.4'
otp: '26.0'

- elixir: '1.14.3'
otp: '26.0'

- elixir: '1.15.4'
otp: '23.3'

steps:
- name: Checkout
uses: actions/checkout@v2
Expand Down Expand Up @@ -87,7 +101,7 @@ jobs:
MIX_ENV: prod

- name: Check source code formatting
if: ${{ matrix.elixir > '1.12.0' }}
if: ${{ matrix.elixir > '1.15.0' }}
run: mix format --check-formatted

- name: Get results in short format
Expand Down
4 changes: 2 additions & 2 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
elixir 1.14.3-otp-25
erlang 25.2.2
elixir 1.15.4-otp-26
erlang 26.0.2
4 changes: 2 additions & 2 deletions lib/dialyxir/plt.ex
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ defmodule Dialyxir.Plt do
end

defp app_info(app) do
app_file = Atom.to_charlist(app) ++ '.app'
app_file = Atom.to_charlist(app) ++ ~c".app"

case :code.where_is_file(app_file) do
:non_existing ->
Expand Down Expand Up @@ -111,7 +111,7 @@ defmodule Dialyxir.Plt do
end

defp resolve_module(module, beams) do
beam = Atom.to_charlist(module) ++ '.beam'
beam = Atom.to_charlist(module) ++ ~c".beam"

case :code.where_is_file(beam) do
path when is_list(path) ->
Expand Down
38 changes: 22 additions & 16 deletions lib/mix/tasks/dialyzer.ex
Original file line number Diff line number Diff line change
Expand Up @@ -339,28 +339,34 @@ defmodule Mix.Tasks.Dialyzer do
end
end

defp check_dialyzer do
if not Code.ensure_loaded?(:dialyzer) do
error("""
DEPENDENCY MISSING
------------------------
If you are reading this message, then Elixir and Erlang are installed but the
Erlang Dialyzer is not available. Probably this is because you installed Erlang
with your OS package manager and the Dialyzer package is separate.
if Version.match?(System.version(), ">= 1.15.0") do
defp check_dialyzer do
Mix.ensure_application!(:dialyzer)
end
else
defp check_dialyzer do
if not Code.ensure_loaded?(:dialyzer) do
error("""
DEPENDENCY MISSING
------------------------
If you are reading this message, then Elixir and Erlang are installed but the
Erlang Dialyzer is not available. Probably this is because you installed Erlang
with your OS package manager and the Dialyzer package is separate.
On Debian/Ubuntu:
On Debian/Ubuntu:
`apt-get install erlang-dialyzer`
`apt-get install erlang-dialyzer`
Fedora:
Fedora:
`yum install erlang-dialyzer`
`yum install erlang-dialyzer`
Arch and Homebrew include Dialyzer in their base erlang packages. Please report a Github
issue to add or correct distribution-specific information.
""")
Arch and Homebrew include Dialyzer in their base erlang packages. Please report a Github
issue to add or correct distribution-specific information.
""")

:erlang.halt(3)
:erlang.halt(3)
end
end
end

Expand Down
28 changes: 14 additions & 14 deletions test/dialyxir/formatter_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ defmodule Dialyxir.FormatterTest do
describe "exs ignore" do
test "evaluates an ignore file and ignores warnings matching the pattern" do
warnings = [
{:warn_return_no_exit, {'lib/short_description.ex', 17},
{:warn_return_no_exit, {~c"lib/short_description.ex", 17},
{:no_return, [:only_normal, :format_long, 1]}},
{:warn_return_no_exit, {'lib/file/warning_type.ex', 18},
{:warn_return_no_exit, {~c"lib/file/warning_type.ex", 18},
{:no_return, [:only_normal, :format_long, 1]}},
{:warn_return_no_exit, {'lib/file/warning_type/line.ex', 19},
{:warn_return_no_exit, {~c"lib/file/warning_type/line.ex", 19},
{:no_return, [:only_normal, :format_long, 1]}}
]

Expand All @@ -35,11 +35,11 @@ defmodule Dialyxir.FormatterTest do

test "evaluates an ignore file of the form {file, short_description} and ignores warnings matching the pattern" do
warnings = [
{:warn_return_no_exit, {'lib/poorly_written_code.ex', 10},
{:warn_return_no_exit, {~c"lib/poorly_written_code.ex", 10},
{:no_return, [:only_normal, :do_a_thing, 1]}},
{:warn_return_no_exit, {'lib/poorly_written_code.ex', 20},
{:warn_return_no_exit, {~c"lib/poorly_written_code.ex", 20},
{:no_return, [:only_normal, :do_something_else, 2]}},
{:warn_return_no_exit, {'lib/poorly_written_code.ex', 30},
{:warn_return_no_exit, {~c"lib/poorly_written_code.ex", 30},
{:no_return, [:only_normal, :do_many_things, 3]}}
]

Expand All @@ -53,7 +53,7 @@ defmodule Dialyxir.FormatterTest do

test "does not filter lines not matching the pattern" do
warning =
{:warn_return_no_exit, {'a/different_file.ex', 17},
{:warn_return_no_exit, {~c"a/different_file.ex", 17},
{:no_return, [:only_normal, :format_long, 1]}}

in_project(:ignore, fn ->
Expand All @@ -66,7 +66,7 @@ defmodule Dialyxir.FormatterTest do

test "can filter by regex" do
warning =
{:warn_return_no_exit, {'a/regex_file.ex', 17},
{:warn_return_no_exit, {~c"a/regex_file.ex", 17},
{:no_return, [:only_normal, :format_long, 1]}}

in_project(:ignore, fn ->
Expand All @@ -79,7 +79,7 @@ defmodule Dialyxir.FormatterTest do

test "lists unnecessary skips as warnings if ignoring exit status" do
warning =
{:warn_return_no_exit, {'a/regex_file.ex', 17},
{:warn_return_no_exit, {~c"a/regex_file.ex", 17},
{:no_return, [:only_normal, :format_long, 1]}}

filter_args = [{:ignore_exit_status, true}]
Expand All @@ -94,7 +94,7 @@ defmodule Dialyxir.FormatterTest do

test "error on unnecessary skips without ignore_exit_status" do
warning =
{:warn_return_no_exit, {'a/regex_file.ex', 17},
{:warn_return_no_exit, {~c"a/regex_file.ex", 17},
{:no_return, [:only_normal, :format_long, 1]}}

filter_args = [{:ignore_exit_status, false}]
Expand All @@ -109,7 +109,7 @@ defmodule Dialyxir.FormatterTest do

test "overwrite ':list_unused_filters_present'" do
warning =
{:warn_return_no_exit, {'a/regex_file.ex', 17},
{:warn_return_no_exit, {~c"a/regex_file.ex", 17},
{:no_return, [:only_normal, :format_long, 1]}}

filter_args = [{:list_unused_filters, false}]
Expand All @@ -126,7 +126,7 @@ defmodule Dialyxir.FormatterTest do
describe "simple string ignore" do
test "evaluates an ignore file and ignores warnings matching the pattern" do
warning =
{:warn_matching, {'a/file.ex', 17}, {:pattern_match, ['pattern \'ok\'', '\'error\'']}}
{:warn_matching, {~c"a/file.ex", 17}, {:pattern_match, [~c"pattern 'ok'", ~c"'error'"]}}

in_project(:ignore_string, fn ->
assert Formatter.format_and_filter([warning], Project, [], :dialyzer) ==
Expand All @@ -137,9 +137,9 @@ defmodule Dialyxir.FormatterTest do

test "listing unused filter behaves the same for different formats" do
warnings = [
{:warn_return_no_exit, {'a/regex_file.ex', 17},
{:warn_return_no_exit, {~c"a/regex_file.ex", 17},
{:no_return, [:only_normal, :format_long, 1]}},
{:warn_return_no_exit, {'a/another-file.ex', 18}, {:unknown_type, {:M, :F, :A}}}
{:warn_return_no_exit, {~c"a/another-file.ex", 18}, {:unknown_type, {:M, :F, :A}}}
]

expected_warning = "a/another-file.ex:18"
Expand Down
8 changes: 6 additions & 2 deletions test/dialyxir/project_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,17 @@ defmodule Dialyxir.ProjectTest do
import ExUnit.CaptureIO, only: [capture_io: 1, capture_io: 2]

defp in_project(app, f) when is_atom(app) do
Mix.Project.in_project(app, "test/fixtures/#{Atom.to_string(app)}", fn _ -> f.() end)
in_project(app, "test/fixtures/#{Atom.to_string(app)}", f)
end

defp in_project(apps, f) when is_list(apps) do
path = Enum.map_join(apps, "/", &Atom.to_string/1)
app = List.last(apps)
Mix.Project.in_project(app, "test/fixtures/#{path}", fn _ -> f.() end)
in_project(app, "test/fixtures/#{path}", f)
end

defp in_project(app, path, f) do
Mix.Project.in_project(app, path, fn _ -> f.() end)
end

test "Default Project PLT File in _build dir" do
Expand Down
7 changes: 6 additions & 1 deletion test/fixtures/alt_core_path/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ defmodule AltCorePath.Mixfile do
use Mix.Project

def project do
[app: :alt_core_path, version: "1.0.0", dialyzer: [plt_core_path: "_build"]]
[
app: :alt_core_path,
prune_code_paths: false,
version: "1.0.0",
dialyzer: [plt_core_path: "_build"]
]
end
end
7 changes: 6 additions & 1 deletion test/fixtures/alt_local_path/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ defmodule AltLocalPath.Mixfile do
use Mix.Project

def project do
[app: :alt_local_path, version: "1.0.0", dialyzer: [plt_local_path: "dialyzer"]]
[
app: :alt_local_path,
prune_code_paths: false,
version: "1.0.0",
dialyzer: [plt_local_path: "dialyzer"]
]
end
end
2 changes: 1 addition & 1 deletion test/fixtures/default_apps/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ defmodule DefaultApps.Mixfile do
use Mix.Project

def project do
[app: :default_apps, version: "0.1.0", deps: deps()]
[app: :default_apps, prune_code_paths: false, version: "0.1.0", deps: deps()]
end

def application do
Expand Down
8 changes: 7 additions & 1 deletion test/fixtures/direct_apps/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@ defmodule DirectApps.Mixfile do
use Mix.Project

def project do
[app: :direct_apps, version: "0.1.0", deps: deps(), dialyzer: [plt_add_deps: :apps_direct]]
[
app: :direct_apps,
prune_code_paths: false,
version: "0.1.0",
deps: deps(),
dialyzer: [plt_add_deps: :apps_direct]
]
end

def application do
Expand Down
1 change: 1 addition & 0 deletions test/fixtures/ignore/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ defmodule Ignore.Mixfile do
[
app: :ignore,
version: "0.1.0",
prune_code_paths: false,
dialyzer: [
ignore_warnings: "ignore_test.exs",
list_unused_filters: true
Expand Down
1 change: 1 addition & 0 deletions test/fixtures/ignore_apps/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ defmodule IgnoreApps.Mixfile do
[
app: :ignore_apps,
version: "0.1.0",
prune_code_paths: false,
deps: deps(),
dialyzer: [
plt_ignore_apps: [:logger]
Expand Down
1 change: 1 addition & 0 deletions test/fixtures/ignore_strict/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ defmodule IgnoreStrict.Mixfile do
[
app: :ignore_strict,
version: "0.1.0",
prune_code_paths: false,
dialyzer: [
ignore_warnings: "ignore_strict_test.exs",
list_unused_filters: true
Expand Down
1 change: 1 addition & 0 deletions test/fixtures/ignore_string/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ defmodule IgnoreString.Mixfile do
[
app: :ignore_string,
version: "0.1.0",
prune_code_paths: false,
dialyzer: [
ignore_warnings: "dialyzer.ignore-warnings",
list_unused_filters: true
Expand Down
7 changes: 6 additions & 1 deletion test/fixtures/local_plt/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ defmodule LocalPlt.Mixfile do
use Mix.Project

def project do
[app: :local_plt, version: "1.0.0", dialyzer: [plt_file: "local.plt"]]
[
app: :local_plt,
prune_code_paths: false,
version: "1.0.0",
dialyzer: [plt_file: "local.plt"]
]
end
end
7 changes: 6 additions & 1 deletion test/fixtures/local_plt_no_warn/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ defmodule LocalPltNoWarn.Mixfile do
use Mix.Project

def project do
[app: :local_plt_no_warn, version: "1.0.0", dialyzer: [plt_file: {:no_warn, "local.plt"}]]
[
app: :local_plt_no_warn,
prune_code_paths: false,
version: "1.0.0",
dialyzer: [plt_file: {:no_warn, "local.plt"}]
]
end
end
1 change: 1 addition & 0 deletions test/fixtures/no_lockfile/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ defmodule NoLockfile.Mixfile do
def project do
[
app: :no_lockfile,
prune_code_paths: false,
version: "1.0.0"
]
end
Expand Down
1 change: 1 addition & 0 deletions test/fixtures/no_umbrella/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ defmodule NoUmbrella.Mixfile do
def project do
[
app: :no_umbrella,
prune_code_paths: false,
version: "0.1.0",
lockfile: "../mix.lock",
elixir: "~> 1.3",
Expand Down
7 changes: 6 additions & 1 deletion test/fixtures/nonexistent_deps/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@ defmodule NonexistentDeps.Mixfile do
use Mix.Project

def project do
[app: :nonexistent_deps, version: "0.1.0", deps: deps()]
[
app: :nonexistent_deps,
prune_code_paths: false,
version: "0.1.0",
deps: deps()
]
end

def application do
Expand Down
1 change: 1 addition & 0 deletions test/fixtures/plt_add_deps_deprecations/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ defmodule PltAddDepsDeprecations.Mixfile do
def project do
[
app: :plt_add_deps_deprecations,
prune_code_paths: false,
version: "0.1.0",
dialyzer: [
plt_add_deps: true
Expand Down
1 change: 1 addition & 0 deletions test/fixtures/umbrella/apps/first_one/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ defmodule FirstOne.Mixfile do
def project do
[
app: :first_one,
prune_code_paths: false,
version: "0.1.0",
build_path: "../../_build",
config_path: "../../config/config.exs",
Expand Down
1 change: 1 addition & 0 deletions test/fixtures/umbrella/apps/second_one/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ defmodule SecondOne.Mixfile do
def project do
[
app: :second_one,
prune_code_paths: false,
version: "0.1.0",
build_path: "../../_build",
config_path: "../../config/config.exs",
Expand Down
1 change: 1 addition & 0 deletions test/fixtures/umbrella/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ defmodule Umbrella.Mixfile do
def project do
[
apps_path: "apps",
prune_code_paths: false,
build_embedded: Mix.env() == :prod,
start_permanent: Mix.env() == :prod,
deps: []
Expand Down

0 comments on commit 997e5bc

Please sign in to comment.