Skip to content

Commit 227e570

Browse files
authored
Merge pull request #737 from OpenC3/fix_ruby_lex_indent
Fix Ruby lex indent logic
2 parents ae7bfb1 + ef41caa commit 227e570

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

openc3/lib/openc3/utilities/ruby_lex_utils.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,10 @@ def each_lexed_segment(text)
283283
yield line, !contains_keyword?(line), inside_begin, lex.exp_line_no
284284
line = ''
285285
lex.exp_line_no = lex.line_no
286+
# puts "clear line 1"
286287
lex.line = ''
288+
previous_line_indent = indent
289+
continue_indent = nil
287290
next
288291
end
289292
end
@@ -327,6 +330,7 @@ def each_lexed_segment(text)
327330
end
328331
line = ''
329332
lex.exp_line_no = lex.line_no
333+
# puts "clear line 2"
330334
lex.line = ''
331335
break
332336
end # loop do

openc3/spec/utilities/ruby_lex_utils_spec.rb

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -441,8 +441,36 @@ def instance_method(
441441
[" puts value\n", true, false, 3],
442442
["end\n", false, false, 4],
443443
["array.each {\n puts \"an item\"\n}\n", false, false, 5],
444-
["begin\n puts \"another\"\nrescue Exception => err\n puts err\nend\n", false, false, 8],
445-
["begin; puts \"in begin\"\nrescue; puts \"in rescue\"\nend\n", false, false, 13],
444+
["begin\n", false, true, 8],
445+
[" puts \"another\"\n", true, true, 9],
446+
["rescue Exception => err\n", false, true, 10],
447+
[" puts err\n", true, true, 11],
448+
["end\n", false, false, 12],
449+
["begin; puts \"in begin\"\n", false, true, 13],
450+
["rescue; puts \"in rescue\"\n", false, true, 14],
451+
["end\n", false, false, 15],
452+
)
453+
end
454+
455+
it "handles complex structures between methods" do
456+
text = <<~DOC
457+
def method1
458+
a = "part1" +
459+
"part2"
460+
end
461+
462+
def method2
463+
a = 5
464+
end
465+
DOC
466+
expect { |b| @lex.each_lexed_segment(text, &b) }.to yield_successive_args(
467+
["def method1\n", false, false, 1],
468+
[" a = \"part1\" +\n \"part2\"\n", true, false, 2],
469+
["end\n", false, false, 4],
470+
["\n", true, false, 5],
471+
["def method2\n", false, false, 6],
472+
[" a = 5\n", true, false, 7],
473+
["end\n", false, false, 8],
446474
)
447475
end
448476

0 commit comments

Comments
 (0)