[ruby/yarp] Add source to ParseResult

https://github.com/ruby/yarp/commit/f3802e03e0
This commit is contained in:
Jemma Issroff 2023-07-07 12:54:18 -04:00 committed by git
parent 61efa9c823
commit 31f83a6fea
3 changed files with 14 additions and 7 deletions

View File

@ -143,13 +143,14 @@ module YARP
# the AST, any comments that were encounters, and any errors that were
# encountered.
class ParseResult
attr_reader :value, :comments, :errors, :warnings
attr_reader :value, :comments, :errors, :warnings, :source
def initialize(value, comments, errors, warnings)
def initialize(value, comments, errors, warnings, source)
@value = value
@comments = comments
@errors = errors
@warnings = warnings
@source = source
end
def deconstruct_keys(keys)
@ -224,6 +225,10 @@ module YARP
def self.load(source, serialized)
Serialize.load(source, serialized)
end
def self.newlines(source)
YARP.parse(source).source.offsets
end
end
require_relative "yarp/lex_compat"

View File

@ -700,7 +700,7 @@ module YARP
raise StandardError, "Lost tokens when performing lex_compat"
end
ParseResult.new(tokens, result.comments, result.errors, result.warnings)
ParseResult.new(tokens, result.comments, result.errors, result.warnings, [])
end
end

View File

@ -391,10 +391,11 @@ lex_input(input_t *input, const char *filepath) {
lex_data.tokens,
parser_comments(&parser, source),
parser_errors(&parser, lex_data.encoding, source),
parser_warnings(&parser, lex_data.encoding, source)
parser_warnings(&parser, lex_data.encoding, source),
source
};
VALUE result = rb_class_new_instance(4, result_argv, rb_cYARPParseResult);
VALUE result = rb_class_new_instance(5, result_argv, rb_cYARPParseResult);
yp_node_destroy(&parser, node);
yp_parser_free(&parser);
@ -446,10 +447,11 @@ parse_input(input_t *input, const char *filepath) {
yp_ast_new(&parser, node, encoding),
parser_comments(&parser, source),
parser_errors(&parser, encoding, source),
parser_warnings(&parser, encoding, source)
parser_warnings(&parser, encoding, source),
source
};
VALUE result = rb_class_new_instance(4, result_argv, rb_cYARPParseResult);
VALUE result = rb_class_new_instance(5, result_argv, rb_cYARPParseResult);
yp_node_destroy(&parser, node);
yp_parser_free(&parser);