class RuboCop::Cop::InternalAffairs::ExampleHeredocDelimiter
RUBY
example_ruby_code
expect_offense(<<~RUBY)
# good
CODE
example_ruby_code
expect_offense(<<~CODE)
# bad
@example
the delimiter.
Some editors may apply better syntax highlighting by using appropriate language names for
Use ‘RUBY` for heredoc delimiter of example Ruby code.
def autocorrect(corrector, node)
-
(void)
-
Parameters:
-
node
(RuboCop::AST::StrNode
) -- -
corrector
(RuboCop::Cop::Corrector
) --
def autocorrect(corrector, node) [ heredoc_opening_delimiter_range_from(node), heredoc_closing_delimiter_range_from(node) ].each do |range| corrector.replace(range, EXPECTED_HEREDOC_DELIMITER) end end
def expected_heredoc_delimiter?(node)
-
(Boolean)
-
Parameters:
-
node
(RuboCop::AST::StrNode
) --
def expected_heredoc_delimiter?(node) heredoc_delimiter_string_from(node) == EXPECTED_HEREDOC_DELIMITER end
def expected_heredoc_delimiter_in_body?(node)
-
(Boolean)
-
Parameters:
-
node
(RuboCop::AST::StrNode
) --
def expected_heredoc_delimiter_in_body?(node) node.location.heredoc_body.source.lines.any? do |line| line.strip == EXPECTED_HEREDOC_DELIMITER end end
def heredoc_closing_delimiter_range_from(node)
-
(Parser::Source::Range)
-
Parameters:
-
node
(RuboCop::AST::StrNode
) --
def heredoc_closing_delimiter_range_from(node) node.location.heredoc_end.end.adjust( begin_pos: -heredoc_delimiter_string_from(node).length ) end
def heredoc_delimiter_string_from(node)
-
(String)
-
Parameters:
-
node
(RuboCop::AST::StrNode
) --
def heredoc_delimiter_string_from(node) node.source[Heredoc::OPENING_DELIMITER, 2] end
def heredoc_node_from(node)
-
(RuboCop::AST::StrNode, nil)
-
Parameters:
-
node
(RuboCop::AST::SendNode
) --
def heredoc_node_from(node) return unless node.first_argument.respond_to?(:heredoc?) return unless node.first_argument.heredoc? node.first_argument end
def heredoc_opening_delimiter_range_from(node)
-
(Parser::Source::Range)
-
Parameters:
-
node
(RuboCop::AST::StrNode
) --
def heredoc_opening_delimiter_range_from(node) match_data = node.source.match(Heredoc::OPENING_DELIMITER) node.source_range.begin.adjust( begin_pos: match_data.begin(2), end_pos: match_data.end(2) ) end
def on_send(node)
-
(void)
-
Parameters:
-
node
(RuboCop::AST::SendNode
) --
def on_send(node) heredoc_node = heredoc_node_from(node) return unless heredoc_node return if expected_heredoc_delimiter?(heredoc_node) return if expected_heredoc_delimiter_in_body?(heredoc_node) add_offense(heredoc_node) do |corrector| autocorrect(corrector, heredoc_node) end end