diff options
author | Schneems <[email protected]> | 2023-12-01 12:14:06 -0600 |
---|---|---|
committer | git <[email protected]> | 2023-12-05 17:51:27 +0000 |
commit | cce29750d797a85ac89540b9ad47816131652a2f () | |
tree | 6c48e5ba770fda4018f9e54e9ca2e5d6772bf8a2 /lib/syntax_suggest/api.rb | |
parent | 9b76c7fc89460ed8e9be40e4037c1d68395c0f6d (diff) |
[ruby/syntax_suggest] Initial support for the prism parser
Prism will be the parser in Ruby 3.3. We need to support 3.0+ so we will have to "dual boot" both parsers. Todo: - LexAll to support Prism lex output - Add tests that exercise both Ripper and prism codepaths on CI - Handle https://.com/ruby/prism/issues/1972 in `ripper_errors.rb` - Update docs to not mention Ripper explicitly - Consider different/cleaner APIs for separating out Ripper and Prism https://.com/ruby/syntax_suggest/commit/a7d6991cc4
-rw-r--r-- | lib/syntax_suggest/api.rb | 46 |
1 files changed, 40 insertions, 6 deletions
@@ -5,7 +5,22 @@ require_relative "version" require "tmpdir" require "stringio" require "pathname" -require "ripper" require "timeout" module SyntaxSuggest @@ -16,6 +31,14 @@ module SyntaxSuggest class Error < StandardError; end TIMEOUT_DEFAULT = ENV.fetch("SYNTAX_SUGGEST_TIMEOUT", 1).to_i # SyntaxSuggest.handle_error [Public] # # Takes a `SyntaxError` exception, uses the @@ -129,11 +152,20 @@ module SyntaxSuggest # SyntaxSuggest.invalid? [Private] # # Opposite of `SyntaxSuggest.valid?` - def self.invalid?(source) - source = source.join if source.is_a?(Array) - source = source.to_s - Ripper.new(source).tap(&:parse).error? end # SyntaxSuggest.valid? [Private] @@ -191,7 +223,9 @@ require_relative "lex_all" require_relative "code_line" require_relative "code_block" require_relative "block_expand" -require_relative "ripper_errors" require_relative "priority_queue" require_relative "unvisited_lines" require_relative "around_block_scan" |