Skip to content

Commit 5c4cb62

Browse files
committed
Fix expression_info command failing with new unescaping;
Fix expression_info for ruby 1.8
1 parent b59de9a commit 5c4cb62

File tree

4 files changed

+72
-3
lines changed

4 files changed

+72
-3
lines changed

Diff for: lib/ruby-debug-ide/commands/expression_info.rb

+10-3
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,20 @@ def regexp
99
end
1010

1111
def execute
12-
string_to_parse = unescape_incoming(@match.post_match) + "\n\n\n"
12+
string_to_parse = Command.unescape_incoming(@match.post_match) + "\n\n\n"
1313
total_lines = string_to_parse.count("\n") + 1
1414

1515
lexer = RubyLex.new
1616
io = StringIO.new(string_to_parse)
17+
18+
begin
19+
encoding = string_to_parse.encoding
20+
rescue
21+
encoding = 'None'
22+
end
23+
1724
# for passing to the lexer
18-
io.instance_exec(string_to_parse.encoding) do |string_encoding|
25+
io.instance_exec(encoding) do |string_encoding|
1926
@my_encoding = string_encoding
2027
def self.encoding
2128
@my_encoding
@@ -39,7 +46,7 @@ def self.encoding
3946
end
4047

4148
incomplete = true
42-
if /\A\s*\Z/m =~ last_statement[0]
49+
if /\A\s*\Z/m =~ last_statement
4350
incomplete = false
4451
end
4552

Diff for: test-base/expression_info_test.rb

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#!/usr/bin/env ruby
2+
3+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
4+
5+
require 'test_base'
6+
7+
module ExpressionInfoTest
8+
9+
def test_info_multiline_expression
10+
create_socket ["sleep 0.1"]
11+
run_to_line(1)
12+
send_ruby('expression_info 1+')
13+
expression_info = read_expression_info
14+
assert_equal("true", expression_info.incomplete)
15+
16+
send_ruby('expression_info 1+\\n1')
17+
expression_info = read_expression_info
18+
assert_equal("false", expression_info.incomplete)
19+
20+
send_ruby('expression_info "')
21+
expression_info = read_expression_info
22+
assert_equal("true", expression_info.incomplete)
23+
24+
send_ruby('expression_info "\\\\"')
25+
expression_info = read_expression_info
26+
assert_equal("true", expression_info.incomplete)
27+
28+
send_ruby('expression_info "\\\\\\n"')
29+
expression_info = read_expression_info
30+
assert_equal("false", expression_info.incomplete)
31+
32+
send_ruby('expression_info def my_meth')
33+
expression_info = read_expression_info
34+
assert_equal("true", expression_info.incomplete)
35+
send_cont
36+
end
37+
38+
end
39+

Diff for: test-base/readers.rb

+12
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ module Readers
1919
RubyThread = Struct.new("RubyThread", :id, :status)
2020
Frame = Struct.new("Frame", :no, :file, :line)
2121
Variable = Struct.new("Variable", :name, :kind, :value, :type, :hasChildren, :objectId)
22+
ExpressionInfo = Struct.new("ExpressionInfo", :incomplete, :prompt, :indent)
2223

2324
def read_breakpoint_added
2425
(@breakpoint_added_reader ||= BreakPointAddedReader.new(parser)).read
@@ -88,6 +89,10 @@ def read_processing_exception
8889
(@processing_exception_reader ||= ProcessingExceptionReader.new(parser)).read
8990
end
9091

92+
def read_expression_info
93+
(@expression_info_reader ||= ExpressionInfoReader.new(parser)).read
94+
end
95+
9196
def parser
9297
fail '"parser" method must be defined'
9398
end
@@ -315,4 +320,11 @@ def read
315320
end
316321
end
317322

323+
class ExpressionInfoReader < BaseReader
324+
def read
325+
data = read_element_data("expressionInfo")
326+
ExpressionInfo.new(data['incomplete'], data['prompt'], data['indent'])
327+
end
328+
end
329+
318330
end

Diff for: test/rd_expression_info_test.rb

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/usr/bin/env ruby
2+
3+
require 'rd_test_base'
4+
require 'expression_info_test'
5+
6+
class RDExpressionInfoTest < RDTestBase
7+
8+
include ExpressionInfoTest
9+
10+
end
11+

0 commit comments

Comments
 (0)