Syntax Tree support for ERB.
Currently handles
if
, elsif
, else
and unless
statementssyntax_tree
:
, @
and #
respectivelyAdd 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.