summaryrefslogtreecommitdiff
path: root/test/reline/yamatanooroti/termination_checker.rb
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