Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/nebulab/erb-formatter

Format ERB files with speed and precision
https://github.com/nebulab/erb-formatter

Last synced: about 2 months ago
JSON representation

Format ERB files with speed and precision

Awesome Lists containing this project

README

        

# ERB::Formatter 🪜

Format ERB files with speed and precision.

Features:

- very fast
- attempts to limit length (configurable)
- tries to have an output similar to prettier for HTML
- indents correctly ruby blocks (e.g. `if`/`elsif`/`do`/`end`)
- designed to be integrated into editors and commit hooks
- gives meaningful output in case of errors (most of the time)
- will use multiline values for `class` and `data-action` attributes

Roadmap:

- extensive unit testing
- more configuration options
- more ruby reformatting capabilities
- JavaScript and CSS formatting
- VSCode plugin
- fix spaces after attribute equal signs instead of complaining

## 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](https://code.visualstudio.com)

Just install the [Ruby ERB::Formatter 🪜](https://marketplace.visualstudio.com/items?itemName=elia.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 "

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

asdf
<% if 123 %>
<%= 'foobar' %>
<% end -%>

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

### From [Ruby](https://www.ruby-lang.org/en/)

```ruby
require 'erb/formatter'

formatted = ERB::Formatter.format <<-ERB


asdf
<% if 123%>
<%='foobar'%> <%end-%>

ERB

# => "

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

# asdf
# <% if 123 %>
# <%= 'foobar' %>
# <% end -%>
#

```

### With [`lint-staged`](https://github.com/okonet/lint-staged#readme)

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

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

### As a [TextMate](http://macromates.com) command

Create a command with the following settings:

- **Scope selector:** `text.html.erb`
- **Semantic class:** `callback.document.will-save`
- **Input:** `document` → `text`
- **Output:** `replace document` → `text`
- **Caret placement:** `line-interpolation`

```bash
#!/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](https://github.com/dense-analysis/ale)

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

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

### With [Zed](https://zed.dev/) editor

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

```json
"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](https://rubygems.org).

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

```bash
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](https://opensource.org/licenses/MIT).