Unexpected EOF with blocks in .html.erb files
jyc opened this issue · 4 comments
jyc commented
Thanks for maintaining rufo!
It looks like it doesn't support blocks in ERB files:
$ rufo .
Format: ./config/environments/development.rb
Format: ./config/environments/test.rb
Format: ./config/initializers/filter_parameter_logging.rb
./app/views/rodauth/_login_form.html.erb:1 syntax error, unexpected end-of-input
Here is the ERB file in question, generated by janko/rodauth-rails:
<%= form_with url: rodauth.login_path, method: :post, data: { turbo: false }, class: "w-full max-w-sm" do |form| %>
<% if rodauth.skip_login_field_on_login? %>
<div class="mb-6">
<%= form.label "login", rodauth.login_label, class: "block text-sm font-semibold" %>
<%= form.email_field rodauth.login_param, value: params[rodauth.login_param], id: "login", readonly: true, class: "mt-2 text-sm w-full py-2 px-0 bg-inherit border-transparent focus:ring-0 focus:border-transparent" %>
</div>
<% else %>
<div class="mb-6">
<%= form.label "login", rodauth.login_label, class: "block text-sm font-semibold" %>
<%= form.email_field rodauth.login_param, value: params[rodauth.login_param], id: "login", autocomplete: "email", required: true, class: "mt-2 text-sm w-full px-3 py-2 border rounded-md dark:bg-gray-900 dark:text-gray-100 dark:focus:bg-gray-800 #{rodauth.field_error(rodauth.login_param) ? "border-red-600 focus:ring-red-600 focus:border-red-600 dark:border-red-400 dark:focus:ring-red-400" : "border-gray-300 dark:border-gray-700 dark:focus:border-emerald-400 dark:focus:ring-emerald-400" }", aria: ({ invalid: true, describedby: "login_error_message" } if rodauth.field_error(rodauth.login_param)) %>
<%= content_tag(:span, rodauth.field_error(rodauth.login_param), class: "block mt-1 text-red-600 text-xs dark:text-red-400", id: "login_error_message") if rodauth.field_error(rodauth.login_param) %>
</div>
<% end %>
<% unless rodauth.skip_password_field_on_login? %>
<div class="mb-6">
<%= form.label "password", rodauth.password_label, class: "block text-sm font-semibold" %>
<%= form.password_field rodauth.password_param, value: "", id: "password", autocomplete: rodauth.password_field_autocomplete_value, required: true, class: "mt-2 text-sm w-full px-3 py-2 border rounded-md dark:bg-gray-900 dark:text-gray-100 dark:focus:bg-gray-800 #{rodauth.field_error(rodauth.password_param) ? "border-red-600 focus:ring-red-600 focus:border-red-600 dark:border-red-400 dark:focus:ring-red-400" : "border-gray-300 dark:border-gray-700 dark:focus:border-emerald-400 dark:focus:ring-emerald-400" }", aria: ({ invalid: true, describedby: "password_error_message" } if rodauth.field_error(rodauth.password_param)) %>
<%= content_tag(:span, rodauth.field_error(rodauth.password_param), class: "block mt-1 text-red-600 text-xs dark:text-red-400", id: "password_error_message") if rodauth.field_error(rodauth.password_param) %>
</div>
<% end %>
<%= form.submit rodauth.login_button, class: "w-full px-8 py-3 cursor-pointer font-semibold text-sm rounded-md text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-600 dark:bg-emerald-400 dark:hover:bg-emerald-500 dark:text-gray-900 dark:focus:ring-emerald-400 dark:focus:ring-offset-current" %>
<% end %>
kzkn commented
@jyc
Thanks for the report.
At least, ErbFormatter seems to support do-end blocks.
rufo/spec/lib/rufo/erb_formatter_spec.rb
Lines 10 to 13 in 22a632a
But your example causes unexpected end-of-input
certainly.
$ cat <<EOF >foo.html.erb
YOURCODE
EOF
$ rufo foo.html.erb
foo.html.erb:1 syntax error, unexpected end-of-input
Could you please try to find a minimum reproducible example?
kzkn commented
I've found.
NG:
$ cat <<EOF | rufo --filename a.erb
pipe heredoc> <%= a(b: true) do %>
pipe heredoc> <% end %>
pipe heredoc> EOF
STDIN is invalid code. Error on line:1 syntax error, unexpected end-of-input
OK:
$ cat <<EOF | rufo --filename b.erb
pipe heredoc> <%= a(b: 1) do %>
pipe heredoc> <% end %>
pipe heredoc> EOF
<%= a(b: 1) do %>
<% end %>
kzkn commented
peterkleinct commented
+1 for this issue. Currently experiencing it with Rails form helper blocks (form_with / form_tag).