class RuboCop::Cop::Rails::SquishedSQLHeredocs


SQL
WHERE post_id = 1
SELECT * FROM posts
execute(<<~SQL.squish, “Post Load”)
SQL
WHERE id = 1
SELECT * FROM table
<<~SQL.squish
SQL
SELECT * FROM posts;
<<-SQL.squish
# good
SQL
WHERE post_id = 1
SELECT * FROM posts
execute(<<~SQL, “Post Load”)
SQL
WHERE id = 1
SELECT * FROM posts
<<-SQL
SQL
SELECT * FROM posts;
<<-SQL
# bad
@example
to be preserved in order to work, thus autocorrection for this cop is not safe.
Some SQL syntax (e.g. PostgreSQL comments and functions) requires newlines
@safety
Checks SQL heredocs to use ‘.squish`.

def message(node)

def message(node)
  format(MSG, expect: "#{node.source}#{SQUISH}", current: node.source)
end

def offense_detected?(node)

def offense_detected?(node)
  sql_heredoc?(node) && !using_squish?(node) && !singleline_comments_present?(node)
end

def on_heredoc(node)

def on_heredoc(node)
  return unless offense_detected?(node)
  add_offense(node) do |corrector|
    corrector.insert_after(node, SQUISH)
  end
end

def singleline_comments_present?(node)

def singleline_comments_present?(node)
  sql = node.children.map { |c| c.is_a?(String) ? c : c.source }.join('\n')
  sql.gsub(SQL_IDENTIFIER_MARKERS, '').include?('--')
end

def sql_heredoc?(node)

def sql_heredoc?(node)
  delimiter_string(node) == SQL
end

def using_squish?(node)

def using_squish?(node)
  node.parent&.send_type? && node.parent.method?(:squish)
end