[ruby/prism] Provide heredoc? queries

https://github.com/ruby/prism/commit/e148e8fe6a
This commit is contained in:
Kevin Newton 2023-12-01 12:06:57 -05:00 committed by git
parent 2a8d9c59ff
commit ec83bd7356
2 changed files with 53 additions and 16 deletions

View File

@ -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]

View File

@ -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)