diff options
-rw-r--r-- | lib/syntax_suggest/api.rb | 46 | ||||
-rw-r--r-- | lib/syntax_suggest/explain_syntax.rb | 12 | ||||
-rw-r--r-- | lib/syntax_suggest/lex_all.rb | 24 | ||||
-rw-r--r-- | spec/syntax_suggest/unit/explain_syntax_spec.rb | 8 |
4 files changed, 76 insertions, 14 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" @@ -3,6 +3,16 @@ require_relative "left_right_lex_count" module SyntaxSuggest # Explains syntax errors based on their source # # example: @@ -94,7 +104,7 @@ module SyntaxSuggest # on the original ripper error messages def errors if missing.empty? - return RipperErrors.new(@code_lines.map(&:original).join).call.errors end missing.map { |miss| why(miss) } @@ -11,8 +11,8 @@ module SyntaxSuggest include Enumerable def initialize(source:, source_lines: nil) - @lex = Ripper::Lexer.new(source, "-", 1).parse.sort_by(&:pos) - lineno = @lex.last.pos.first + 1 source_lines ||= source.lines last_lineno = source_lines.length @@ -20,17 +20,31 @@ module SyntaxSuggest lines = source_lines[lineno..] @lex.concat( - Ripper::Lexer.new(lines.join, "-", lineno + 1).parse.sort_by(&:pos) ) - lineno = @lex.last.pos.first + 1 end last_lex = nil @lex.map! { |elem| - last_lex = LexValue.new(elem.pos.first, elem.event, elem.tok, elem.state, last_lex) } end def to_a @lex end @@ -14,7 +14,11 @@ module SyntaxSuggest ).call expect(explain.missing).to eq([]) - expect(explain.errors.join).to include("unterminated string") end it "handles %w[]" do @@ -191,7 +195,7 @@ module SyntaxSuggest ).call expect(explain.missing).to eq([]) - expect(explain.errors).to eq(RipperErrors.new(source).call.errors) end it "handles an unexpected rescue" do |