[PRISM] Sync to latest prism

This commit is contained in:
Kevin Newton 2024-02-23 21:56:56 -05:00
parent e439419baa
commit fc656acee9
No known key found for this signature in database
GPG key ID: 0EAD74C79EC73F26
2 changed files with 46 additions and 5 deletions

View file

@ -9829,7 +9829,7 @@ parser_lex(pm_parser_t *parser) {
)
{
// Since we know we're about to add an __END__ comment, we know we
// need to add all of the newlines to get the correct column
// need at add all of the newlines to get the correct column
// information for it.
const uint8_t *cursor = parser->current.end;
while ((cursor = next_newline(cursor, parser->end - cursor)) != NULL) {

View file

@ -10,6 +10,39 @@ module Prism
JAVA_BACKEND = ENV["PRISM_JAVA_BACKEND"] || "truffleruby"
JAVA_STRING_TYPE = JAVA_BACKEND == "jruby" ? "org.jruby.RubySymbol" : "String"
# This module contains methods for escaping characters in JavaDoc comments.
module JavaDoc
ESCAPES = {
"'" => "'",
"\"" => """,
"@" => "@",
"&" => "&",
"<" => "&lt;",
">" => "&gt;"
}.freeze
def self.escape(value)
value.gsub(/['&"<>@]/, ESCAPES)
end
end
# A comment attached to a field or node.
class Comment
attr_reader :value
def initialize(value)
@value = value
end
def each_line(&block)
value.each_line { |line| yield line.prepend(" ").rstrip }
end
def each_java_line(&block)
Comment.new(JavaDoc.escape(value)).each_line(&block)
end
end
# This represents a field on a node. It contains all of the necessary
# information to template out the code for that field.
class Field
@ -21,8 +54,12 @@ module Prism
@options = options
end
def each_comment_line
comment.each_line { |line| yield line.prepend(" ").rstrip } if comment
def each_comment_line(&block)
Comment.new(comment).each_line(&block) if comment
end
def each_comment_java_line(&block)
Comment.new(comment).each_java_line(&block) if comment
end
def semantic_field?
@ -317,8 +354,12 @@ module Prism
@comment = config.fetch("comment")
end
def each_comment_line
comment.each_line { |line| yield line.prepend(" ").rstrip }
def each_comment_line(&block)
Comment.new(comment).each_line(&block)
end
def each_comment_java_line(&block)
Comment.new(comment).each_java_line(&block)
end
def semantic_fields