[ruby/prism] Fix up lex result constants

https://github.com/ruby/prism/commit/084baca463
This commit is contained in:
Kevin Newton 2024-08-15 12:39:19 -04:00 committed by git
parent d2361ba156
commit 5cb6954baa
3 changed files with 43 additions and 10 deletions

View File

@ -21,6 +21,7 @@ VALUE rb_cPrismParseError;
VALUE rb_cPrismParseWarning;
VALUE rb_cPrismResult;
VALUE rb_cPrismParseResult;
VALUE rb_cPrismLexResult;
VALUE rb_cPrismParseLexResult;
VALUE rb_cPrismDebugEncoding;
@ -635,16 +636,16 @@ parse_lex_input(pm_string_t *input, const pm_options_t *options, bool return_nod
rb_ary_push(offsets, ULONG2NUM(parser.newline_list.offsets[index]));
}
VALUE value;
VALUE result;
if (return_nodes) {
value = rb_ary_new_capa(2);
VALUE value = rb_ary_new_capa(2);
rb_ary_push(value, pm_ast_new(&parser, node, parse_lex_data.encoding, source));
rb_ary_push(value, parse_lex_data.tokens);
result = parse_result_create(rb_cPrismParseLexResult, &parser, value, parse_lex_data.encoding, source);
} else {
value = parse_lex_data.tokens;
result = parse_result_create(rb_cPrismLexResult, &parser, parse_lex_data.tokens, parse_lex_data.encoding, source);
}
VALUE result = parse_result_create(rb_cPrismParseLexResult, &parser, value, parse_lex_data.encoding, source);
pm_node_destroy(&parser, node);
pm_parser_free(&parser);
@ -653,10 +654,10 @@ parse_lex_input(pm_string_t *input, const pm_options_t *options, bool return_nod
/**
* call-seq:
* Prism::lex(source, **options) -> ParseLexResult
* Prism::lex(source, **options) -> LexResult
*
* Return a ParseLexResult instance that contains an array of Token instances corresponding to the given string. For
* supported options, see Prism::parse.
* Return a LexResult instance that contains an array of Token instances
* corresponding to the given string. For supported options, see Prism::parse.
*/
static VALUE
lex(int argc, VALUE *argv, VALUE self) {
@ -673,10 +674,10 @@ lex(int argc, VALUE *argv, VALUE self) {
/**
* call-seq:
* Prism::lex_file(filepath, **options) -> ParseLexResult
* Prism::lex_file(filepath, **options) -> LexResult
*
* Return a ParseLexResult instance that contains an array of Token instances corresponding to the given file. For
* supported options, see Prism::parse.
* Return a LexResult instance that contains an array of Token instances
* corresponding to the given file. For supported options, see Prism::parse.
*/
static VALUE
lex_file(int argc, VALUE *argv, VALUE self) {
@ -1131,6 +1132,7 @@ Init_prism(void) {
rb_cPrismParseWarning = rb_define_class_under(rb_cPrism, "ParseWarning", rb_cObject);
rb_cPrismResult = rb_define_class_under(rb_cPrism, "Result", rb_cObject);
rb_cPrismParseResult = rb_define_class_under(rb_cPrism, "ParseResult", rb_cPrismResult);
rb_cPrismLexResult = rb_define_class_under(rb_cPrism, "LexResult", rb_cPrismResult);
rb_cPrismParseLexResult = rb_define_class_under(rb_cPrism, "ParseLexResult", rb_cPrismResult);
// Intern all of the IDs eagerly that we support so that we don't have to do

View File

@ -0,0 +1,23 @@
# frozen_string_literal: true
require_relative "../test_helper"
module Prism
class LexTest < TestCase
def test_lex_result
result = Prism.lex("")
assert_kind_of LexResult, result
result = Prism.lex_file(__FILE__)
assert_kind_of LexResult, result
end
def test_parse_lex_result
result = Prism.parse_lex("")
assert_kind_of ParseLexResult, result
result = Prism.parse_lex_file(__FILE__)
assert_kind_of ParseLexResult, result
end
end
end

View File

@ -4,6 +4,14 @@ require_relative "../test_helper"
module Prism
class ParseTest < TestCase
def test_parse_result
result = Prism.parse("")
assert_kind_of ParseResult, result
result = Prism.parse_file(__FILE__)
assert_kind_of ParseResult, result
end
def test_parse_empty_string
result = Prism.parse("")
assert_equal [], result.value.statements.body