From e710acea5700356ef5337811aeb658dab1b7f5c1 Mon Sep 17 00:00:00 2001 From: sabiwara Date: Thu, 20 Nov 2025 08:46:23 +0900 Subject: [PATCH 1/2] Fix dialyzer warning in Code.format_string!/2 Tentative fix for https://github.com/elixir-lang/elixir/issues/14927 --- lib/elixir/lib/code.ex | 2 +- .../test/elixir/fixtures/dialyzer/regressions.ex | 10 ++++++++++ lib/elixir/test/elixir/kernel/dialyzer_test.exs | 5 +++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 lib/elixir/test/elixir/fixtures/dialyzer/regressions.ex diff --git a/lib/elixir/lib/code.ex b/lib/elixir/lib/code.ex index 463a3e723fc..54c6a601c00 100644 --- a/lib/elixir/lib/code.ex +++ b/lib/elixir/lib/code.ex @@ -1090,7 +1090,7 @@ defmodule Code do @doc since: "1.6.0" @spec format_string!(binary, [format_opt]) :: iodata def format_string!(string, opts \\ []) when is_binary(string) and is_list(opts) do - line_length = Keyword.get(opts, :line_length, 98) + {line_length, opts} = Keyword.pop(opts, :line_length, 98) to_quoted_opts = [ diff --git a/lib/elixir/test/elixir/fixtures/dialyzer/regressions.ex b/lib/elixir/test/elixir/fixtures/dialyzer/regressions.ex new file mode 100644 index 00000000000..43119d320cb --- /dev/null +++ b/lib/elixir/test/elixir/fixtures/dialyzer/regressions.ex @@ -0,0 +1,10 @@ +defmodule Dialyzer.Regressions do + def format_opts do + Code.format_string!("", + line_length: 120, + force_do_end_blocks: true, + locals_without_parens: true, + migrate: true + ) + end +end diff --git a/lib/elixir/test/elixir/kernel/dialyzer_test.exs b/lib/elixir/test/elixir/kernel/dialyzer_test.exs index 01aa977ecae..87df238dcf8 100644 --- a/lib/elixir/test/elixir/kernel/dialyzer_test.exs +++ b/lib/elixir/test/elixir/kernel/dialyzer_test.exs @@ -185,6 +185,11 @@ defmodule Kernel.DialyzerTest do assert_dialyze_no_warnings!(context) end + test "no warning in various non-regression cases", context do + copy_beam!(context, Dialyzer.Regressions) + assert_dialyze_no_warnings!(context) + end + defp copy_beam!(context, module) do name = "#{module}.beam" File.cp!(Path.join(context.base_dir, name), Path.join(context.outdir, name)) From 5586241a99d2233d9687fb40f39ff83b1d8c1260 Mon Sep 17 00:00:00 2001 From: sabiwara Date: Thu, 20 Nov 2025 19:34:13 +0900 Subject: [PATCH 2/2] Add regression test for IO.inspect/2 opts --- lib/elixir/test/elixir/fixtures/dialyzer/regressions.ex | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/elixir/test/elixir/fixtures/dialyzer/regressions.ex b/lib/elixir/test/elixir/fixtures/dialyzer/regressions.ex index 43119d320cb..e271b9bf1b2 100644 --- a/lib/elixir/test/elixir/fixtures/dialyzer/regressions.ex +++ b/lib/elixir/test/elixir/fixtures/dialyzer/regressions.ex @@ -1,4 +1,8 @@ defmodule Dialyzer.Regressions do + def io_inspect_opts do + IO.inspect(123, label: "foo", limit: :infinity) + end + def format_opts do Code.format_string!("", line_length: 120,