diff --git a/lib/elixir/lib/code.ex b/lib/elixir/lib/code.ex index 463a3e723f..54c6a601c0 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 0000000000..e271b9bf1b --- /dev/null +++ b/lib/elixir/test/elixir/fixtures/dialyzer/regressions.ex @@ -0,0 +1,14 @@ +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, + 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 01aa977eca..87df238dcf 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))