aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/prism/node_ext.rb57
-rw-r--r--test/prism/ruby_api_test.rb12
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)