From e29d9e9fbaa435bf6d650299f8c0729042733b46 Mon Sep 17 00:00:00 2001 From: yui-knk Date: Fri, 25 Nov 2022 11:34:03 +0900 Subject: Add examples to error_tolerant option in NEWS [ci skip] --- NEWS.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'NEWS.md') diff --git a/NEWS.md b/NEWS.md index 947b0aed64..bdd3b6df83 100644 --- a/NEWS.md +++ b/NEWS.md @@ -192,6 +192,47 @@ Note: We're only listing outstanding class updates. * RubyVM::AbstractSyntaxTree * Add `error_tolerant` option for `parse`, `parse_file` and `of`. [[Feature #19013]] + With this option + + 1. SyntaxError is suppressed + 2. AST is returned for invalid input + 3. `end` is complemented when a parser reachs to the end of input but `end` is insufficient + 4. `end` is treated as keyword based on indent + + ```ruby + # Without error_tolerant option + root = RubyVM::AbstractSyntaxTree.parse(<<~RUBY) + def m + a = 10 + if + end + RUBY + # => :33:in `parse': syntax error, unexpected `end' (SyntaxError) + + # With error_tolerant option + root = RubyVM::AbstractSyntaxTree.parse(<<~RUBY, error_tolerant: true) + def m + a = 10 + if + end + RUBY + p root # => # + + # `end` is treated as keyword based on indent + root = RubyVM::AbstractSyntaxTree.parse(<<~RUBY, error_tolerant: true) + module Z + class Foo + foo. + end + + def bar + end + end + RUBY + p root.children[-1].children[-1].children[-1].children[-2..-1] + # => [#, #] + ``` + * Add `keep_tokens` option for `parse`, `parse_file` and `of`. Add `#tokens` and `#all_tokens` for `RubyVM::AbstractSyntaxTree::Node` [[Feature #19070]] -- cgit v1.2.3