class RuboCop::Cop::Rails::SquishedSQLHeredocs
Checks SQL
heredocs to use `.squish`. Some SQL
syntax (e.g. PostgreSQL comments and functions) requires newlines to be preserved in order to work, thus auto-correction for this cop is not safe.
@example
# bad <<-SQL SELECT * FROM posts; SQL <<-SQL SELECT * FROM posts WHERE id = 1 SQL execute(<<~SQL, "Post Load") SELECT * FROM posts WHERE post_id = 1 SQL # good <<-SQL.squish SELECT * FROM posts; SQL <<~SQL.squish SELECT * FROM table WHERE id = 1 SQL execute(<<~SQL.squish, "Post Load") SELECT * FROM posts WHERE post_id = 1 SQL
Constants
- MSG
- SQL
- SQUISH
Public Instance Methods
on_heredoc(node)
click to toggle source
# File lib/rubocop/cop/rails/squished_sql_heredocs.rb, line 50 def on_heredoc(node) return unless offense_detected?(node) add_offense(node) do |corrector| corrector.insert_after(node, SQUISH) end end
Private Instance Methods
message(node)
click to toggle source
# File lib/rubocop/cop/rails/squished_sql_heredocs.rb, line 72 def message(node) format( MSG, expect: "#{node.source}#{SQUISH}", current: node.source ) end
offense_detected?(node)
click to toggle source
# File lib/rubocop/cop/rails/squished_sql_heredocs.rb, line 60 def offense_detected?(node) sql_heredoc?(node) && !using_squish?(node) end
sql_heredoc?(node)
click to toggle source
# File lib/rubocop/cop/rails/squished_sql_heredocs.rb, line 64 def sql_heredoc?(node) delimiter_string(node) == SQL end
using_squish?(node)
click to toggle source
# File lib/rubocop/cop/rails/squished_sql_heredocs.rb, line 68 def using_squish?(node) node.parent&.send_type? && node.parent&.method?(:squish) end