diff options
author | schneems <[email protected]> | 2022-07-26 15:21:09 -0500 |
---|---|---|
committer | Hiroshi SHIBATA <[email protected]> | 2022-08-19 10:02:24 +0900 |
commit | 490af8dbdb66263f29d0b4e43752fbb298b94862 (patch) | |
tree | 5f161e99d27a1417f446e8b1516263fd76d6f0bc /lib/syntax_suggest/ripper_errors.rb | |
parent | a50df1ab0eb312e5cdcf010d2c1b362ec41f3c59 (diff) |
Sync SyntaxSuggest
```
$ tool/sync_default_gems.rb syntax_suggest
```
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/5859
Diffstat (limited to 'lib/syntax_suggest/ripper_errors.rb')
-rw-r--r-- | lib/syntax_suggest/ripper_errors.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/syntax_suggest/ripper_errors.rb b/lib/syntax_suggest/ripper_errors.rb new file mode 100644 index 0000000000..48eb206e48 --- /dev/null +++ b/lib/syntax_suggest/ripper_errors.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +module SyntaxSuggest + # Capture parse errors from ripper + # + # Example: + # + # puts RipperErrors.new(" def foo").call.errors + # # => ["syntax error, unexpected end-of-input, expecting ';' or '\\n'"] + class RipperErrors < Ripper + attr_reader :errors + + # Comes from ripper, called + # on every parse error, msg + # is a string + def on_parse_error(msg) + @errors ||= [] + @errors << msg + end + + alias_method :on_alias_error, :on_parse_error + alias_method :on_assign_error, :on_parse_error + alias_method :on_class_name_error, :on_parse_error + alias_method :on_param_error, :on_parse_error + alias_method :compile_error, :on_parse_error + + def call + @run_once ||= begin + @errors = [] + parse + true + end + self + end + end +end |