mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
30 lines
651 B
Ruby
30 lines
651 B
Ruby
require 'ripper'
|
|
require 'irb/ruby-lex'
|
|
|
|
class TerminationChecker < RubyLex
|
|
def terminated?(code)
|
|
code.gsub!(/\n*$/, '').concat("\n")
|
|
@tokens = Ripper.lex(code)
|
|
continue = process_continue
|
|
code_block_open = check_code_block(code)
|
|
indent = process_nesting_level
|
|
ltype = process_literal_type
|
|
if code_block_open or ltype or continue or indent > 0
|
|
false
|
|
else
|
|
true
|
|
end
|
|
end
|
|
end
|
|
|
|
class AutoIndent < RubyLex
|
|
def initialize
|
|
set_input(self)
|
|
context = Struct.new(:auto_indent_mode).new(true)
|
|
set_auto_indent(context)
|
|
end
|
|
|
|
def auto_indent(&block)
|
|
Reline.auto_indent_proc = block
|
|
end
|
|
end
|