diff options
-rw-r--r-- | lib/prism/node_ext.rb | 57 | ||||
-rw-r--r-- | test/prism/ruby_api_test.rb | 12 |
2 files changed, 53 insertions, 16 deletions
diff --git a/lib/prism/node_ext.rb b/lib/prism/node_ext.rb index 5fc13eb06d..8c09632345 100644 --- a/lib/prism/node_ext.rb +++ b/lib/prism/node_ext.rb @@ -14,8 +14,49 @@ module Prism end end + class InterpolatedMatchLastLineNode < Node + include RegularExpressionOptions + end + + class InterpolatedRegularExpressionNode < Node + include RegularExpressionOptions + end + + class MatchLastLineNode < Node + include RegularExpressionOptions + end + + class RegularExpressionNode < Node + include RegularExpressionOptions + end + private_constant :RegularExpressionOptions + module HeredocQuery # :nodoc: + # Returns true if this node was represented as a heredoc in the source code. + def heredoc? + opening&.start_with?("<<") + end + end + + class InterpolatedStringNode < Node + include HeredocQuery + end + + class InterpolatedXStringNode < Node + include HeredocQuery + end + + class StringNode < Node + include HeredocQuery + end + + class XStringNode < Node + include HeredocQuery + end + + private_constant :HeredocQuery + class FloatNode < Node # Returns the value of the node as a Ruby Float. def value @@ -37,18 +78,6 @@ module Prism end end - class InterpolatedMatchLastLineNode < Node - include RegularExpressionOptions - end - - class InterpolatedRegularExpressionNode < Node - include RegularExpressionOptions - end - - class MatchLastLineNode < Node - include RegularExpressionOptions - end - class RationalNode < Node # Returns the value of the node as a Ruby Rational. def value @@ -56,10 +85,6 @@ module Prism end end - class RegularExpressionNode < Node - include RegularExpressionOptions - end - class ConstantReadNode < Node # Returns the list of parts for the full name of this constant. # For example: [:Foo] diff --git a/test/prism/ruby_api_test.rb b/test/prism/ruby_api_test.rb index cd87a81395..54c5fd28e9 100644 --- a/test/prism/ruby_api_test.rb +++ b/test/prism/ruby_api_test.rb @@ -103,6 +103,18 @@ module Prism assert_equal 7, location.end_character_column end + def test_heredoc? + refute parse_expression("\"foo\"").heredoc? + refute parse_expression("\"foo \#{1}\"").heredoc? + refute parse_expression("`foo`").heredoc? + refute parse_expression("`foo \#{1}`").heredoc? + + assert parse_expression("<<~HERE\nfoo\nHERE\n").heredoc? + assert parse_expression("<<~HERE\nfoo \#{1}\nHERE\n").heredoc? + assert parse_expression("<<~`HERE`\nfoo\nHERE\n").heredoc? + assert parse_expression("<<~`HERE`\nfoo \#{1}\nHERE\n").heredoc? + end + private def parse_expression(source) |