nebulab / erb-formatter

Format ERB files with speed and precision
MIT License
151 stars 25 forks source link

ERB::Formatter 🪜

Format ERB files with speed and precision.

Features:

Roadmap:

Installation

Add this line to your application's Gemfile:

$ bundle add erb-formatter

Or install it yourself as:

$ gem install erb-formatter

Usage

From Visual Studio Code

Just install the Ruby ERB::Formatter 🪜 extension and follow the setup instructions there.

From the command line

Update files in-place:

$ erb-format app/views/**/*.html.erb --write

or use stdin/stdout (useful for editor integrations):

$ echo "<div       > asdf  <% if 123%> <%='foobar'%> <%end-%>  </div>" | erb-format --stdin
<div>
  asdf
  <% if 123 %>
    <%= 'foobar' %>
  <% end -%>
</div>

Check out erb-format --help for more options.

From Ruby

require 'erb/formatter'

formatted = ERB::Formatter.format <<-ERB
<div        >
            asdf
                  <% if 123%>
                      <%='foobar'%> <%end-%>
           </div>
ERB

# => "<div>\n  asdf\n  <% if 123 %>\n    <%= 'foobar' %>\n  <% end -%>\n</div>\n"
#
# Same as:
#
#   <div>
#     asdf
#     <% if 123 %>
#       <%= 'foobar' %>
#     <% end -%>
#   </div>

With lint-staged

Add the gem to your gemfile and the following to your package.json:

"lint-staged": {
  // …
  "*.html.erb": "bundle exec erb-format --write"
}

As a TextMate command

Create a command with the following settings:

#!/usr/bin/env bash

cd "$TM_PROJECT_DIRECTORY"
bundle exec erb-format --stdin-filename "$TM_FILEPATH" < /dev/stdin 2> /dev/stdout

With (Neo)VIM ALE

Enable erb-formatter as a fixer in the ALE config:

let g:ale_fixers = {
\   'eruby': ['erb-formatter'],
\}

With Zed editor

With the gem installed, configure settings.json to use the formatter as an external command

"language_overrides": {
  "ERB": {
    "formatter": {
      "external": {
        "command": "erb-format",
        "arguments": ["--stdin", "--print-width", "80"]
      }
    }
  }
}

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake test to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.

In order to run a specific test, use the following command:

m test/erb/test_formatter.rb:123

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/nebulab/erb-formatter.

License

The gem is available as open source under the terms of the MIT License.