`mix format` adds newlines
m1dnight opened this issue · comments
Christophe De Troyer commented
Environment
- Elixir version (elixir -v): 1.16.3
- Phoenix version (mix deps): phoenix 1.7.14
- Phoenix LiveView version (mix deps): phoenix_live_view 0.20.15
- Operating system: macOS
- Browsers you attempted to reproduce this bug on (the more the merrier):
- Does the problem persist after removing "assets/node_modules" and trying again? Yes/no:
Actual behavior
When formatting a file, newlines are inserted. When the formatter is run again, the newlines are duplicated.
Using the example input:
<div>
<div>
<script nonce={@csp_nonce}>
window.appConfig = window.appConfig || {}
window.appConfig.clientUpload = window.appConfig.clientUpload || {}
window.appConfig.clientUpload.flow = "<%= @flow %>"
<%= if @type == :files_client do %>
window.appConfig.clientUpload.client = <%= raw(Jason.encode!(JustifiedInternalApi.ClientView.render("client.json", %{client: @client}))) %>
window.appConfig.clientUpload.existingFiles = <%= raw(Jason.encode!(@existing_client_files)) %>
<% end %>
</script>
</div>
</div>
Formatting once results in:
<div>
<div>
<script nonce={@csp_nonce}>
window.appConfig = window.appConfig || {}
window.appConfig.clientUpload = window.appConfig.clientUpload || {}
window.appConfig.clientUpload.flow = "<%= @flow %>"
<%= if @type == :files_client do %>
window.appConfig.clientUpload.client = <%= raw(Jason.encode!(JustifiedInternalApi.ClientView.render("client.json", %{client: @client}))) %>
window.appConfig.clientUpload.existingFiles = <%= raw(Jason.encode!(@existing_client_files)) %>
<% end %>
</script>
</div>
</div>
Formatting 10 times results in:
<div>
<div>
<script nonce={@csp_nonce}>
window.appConfig = window.appConfig || {}
window.appConfig.clientUpload = window.appConfig.clientUpload || {}
window.appConfig.clientUpload.flow = "<%= @flow %>"
<%= if @type == :files_client do %>
window.appConfig.clientUpload.client = <%= raw(Jason.encode!(JustifiedInternalApi.ClientView.render("client.json", %{client: @client}))) %>
window.appConfig.clientUpload.existingFiles = <%= raw(Jason.encode!(@existing_client_files)) %>
<% end %>
</script>
</div>
</div>
This happened with phoenix_live_view
at 0.20.15, but not with 0.20.14.
I think it will be related to these changes: v0.20.14...v0.20.15#diff-463a21df4167ac1fea6a9c66d1cd80e22d32115a2c21b44c90f696bc09c9feb4
I can't really spot the cause right away, though.
Gary Rennie commented
I used the following to bisect this:
source.ex
defmodule SomeModule do
def render(assigns) do
~H"""
<div>
<div>
<script nonce={@csp_nonce}>
window.appConfig = window.appConfig || {}
window.appConfig.clientUpload = window.appConfig.clientUpload || {}
window.appConfig.clientUpload.flow = "<%= @flow %>"
<%= if @type == :files_client do %>
window.appConfig.clientUpload.client = <%= raw(Jason.encode!(JustifiedInternalApi.ClientView.render("client.json", %{client: @client}))) %>
window.appConfig.clientUpload.existingFiles = <%= raw(Jason.encode!(@existing_client_files)) %>
<% end %>
</script>
</div>
</div>
"""
end
end
script.sh
#!/bin/bash
mix deps.get
mix run -e "{f, _} = Mix.Tasks.Format.formatter_for_file(\"../source.ex\"); if f.(File.read!(\"../source.ex\")) == File.read!(\"../source.ex\"), do: System.halt(0), else: System.halt(1)"
Running git bisect run bash script.sh
points to this commit: