Syntax Tree support for ERB.
Currently handles
- ERB
- Tags with and without output
- Tags inside strings
if
,elsif
,else
andunless
statements- blocks
- comments
- Formatting of the ruby-code is done by
syntax_tree
- HTML
- Tags with attributes
- Tags with and without closing tags
- Comments
- Vue
- Attributes, events and slots using
:
,@
and#
respectively
- Attributes, events and slots using
- Text output
- Please add to this pinned issue (#28) or create a separate issue if you encounter formatting or parsing errors.
Add this line to your application's Gemfile:
gem "w_syntax_tree-erb", "~> 0.11", require: false
I added the
w_
prefix to avoid conflicts if there will ever be an officialsyntax_tree-erb
gem.
bundle exec stree ast --plugins=erb "./**/*.html.erb"
bundle exec stree write --plugins=erb "./**/*.html.erb"
require "syntax_tree/erb"
pp SyntaxTree::ERB.parse(source) # print out the AST
puts SyntaxTree::ERB.format(source) # format the AST
In order to get a list of all parsing errors (which needs to be fixed before the formatting works), this script can be used:
#!/bin/ruby
require "syntax_tree/erb"
failures = []
Dir
.glob("./app/**/*.html.erb")
.each do |file|
puts("Processing #{file}")
begin
source = SyntaxTree::ERB.read(file)
SyntaxTree::ERB.parse(source)
SyntaxTree::ERB.format(source)
rescue => exception
failures << { file: file, message: exception.message }
end
end
puts failures
Install husky
:
npm i -g husky
Setup linting:
npm run prepare
Install dependencies and run tests:
bundle
bundle exec rake
Bug reports and pull requests are welcome on GitHub at https://github.com/davidwessman/syntax_tree-erb.
The gem is available as open source under the terms of the MIT License.