summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/syntax_suggest/api.rb46
-rw-r--r--lib/syntax_suggest/explain_syntax.rb12
-rw-r--r--lib/syntax_suggest/lex_all.rb24
-rw-r--r--spec/syntax_suggest/unit/explain_syntax_spec.rb8
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