Skip to content

Instantly share code, notes, and snippets.

@phund
Last active July 8, 2019 09:59
Show Gist options
  • Save phund/cf5e0a9561cbd7ecc55a66b21b967152 to your computer and use it in GitHub Desktop.
Save phund/cf5e0a9561cbd7ecc55a66b21b967152 to your computer and use it in GitHub Desktop.
Rake task check syntax in a Rails app.
namespace :syntax do
desc 'Checks the syntax of ERB files'
task :erb do
require 'action_view'
puts "Start check ERB files: "
errors = []
Dir['app/views/**/*.erb'].each do |file|
template = File.read(file)
begin
ActionView::Template::Handlers::Erubis \
.new(template, :filename => file) \
.result
print '.'
# ERB syntax errors.
rescue SyntaxError => error
print 'F'
errors << error.message
# Calls to undefined methods, etc. We only care about the syntax.
rescue Exception => error
print '.'
end
end
if errors.blank?
puts "\nERB OK!\n"
else
puts "\nErrors: \n"
errors.each do |e|
puts e
end
end
end
desc 'Checks the syntax of HAML files'
task :haml do
begin
require 'haml'
puts "Start check HAML files: "
errors = []
Dir['app/views/**/*.haml'].each do |file|
template = File.read(file)
begin
Haml::Engine.new(template, :filename => file)
print '.'
rescue Haml::SyntaxError, Haml::Error => error
line = error.backtrace[0].match(/(\d+)$/)[1]
print 'F'
errors << "#{file}: line ##{line}: #{error.message}"
end
end
if errors.blank?
puts "\nHAML OK!\n"
else
puts "\nErrors: \n"
errors.each do |e|
puts e
end
end
rescue LoadError => e
end
end
desc 'Checks the syntax of SLIM files'
task :slim do
begin
require 'slim'
puts "Start check SLIM files: "
errors = []
Dir['app/views/**/*.slim'].each do |file|
begin
Slim::Template.new(file)
print '.'
rescue Slim::Parser::SyntaxError => error
line = error.backtrace[0].match(/(\d+)$/)[1]
print 'F'
errors << "#{file}: line ##{line}: #{error.message}"
end
end
if errors.blank?
puts "\nSLIM OK!\n"
else
puts "\nErrors: \n"
errors.each do |e|
puts e
end
end
rescue LoadError => e
end
end
desc 'Checks the syntax of YAML files'
task :yaml do
require 'yaml'
puts "Start check YAML files: "
errors = []
Dir['./**/*.{yml,yaml}'].each do |file|
begin
YAML.load_file(file)
print '.'
rescue => error
print 'F'
errors << "#{file}: #{error.message}"
end
end
if errors.blank?
puts "\nYAML OK!\n"
else
puts "\nErrors: \n"
errors.each do |e|
puts e
end
end
end
desc 'Checks the syntax of ruby files'
task :ruby do
require 'open3'
puts "Start check ruby files: "
errors = []
Dir['./**/*.rb'].each do |file|
cmd = "ruby -c #{file} | grep 'syntax error'"
Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thr|
msg = stderr.read
if msg.blank?
print '.'
else
trace_msg = msg.split("\n")[0]
print "F"
puts "\n#{trace_msg}\n"
errors << trace_msg
end
end
end
if errors.blank?
puts "\nRuby OK!\n"
else
puts "\nErrors: \n"
errors.each do |e|
puts e
end
end
end
end
# desc 'Checks the syntax of various files'
task :syntax => ['syntax:erb', 'syntax:yaml', 'syntax:haml', 'syntax:slim', 'syntax:ruby']
# How run??
# rake syntax:erb syntax:ruby syntax:yaml syntax:haml syntax:slim
# rake syntax
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment