blob: b97c798c59318bd14f5372000377b835840cc890 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
require 'ripper'
module TerminationChecker
def self.terminated?(code)
Ripper.sexp(code) ? true : false
end
end
module AutoIndent
def self.calculate_indent(lines, line_index, byte_pointer, is_newline)
if is_newline
2 * nesting_level(lines[0..line_index - 1])
else
lines = lines.dup
lines[line_index] = lines[line_index]&.byteslice(0, byte_pointer)
prev_level = nesting_level(lines[0..line_index - 1])
level = nesting_level(lines[0..line_index])
2 * level if level < prev_level
end
end
def self.nesting_level(lines)
code = lines.join("\n")
code.scan(/if|def|\(|\[|\{/).size - code.scan(/end|\)|\]|\}/).size
end
end
|