module Ripl::MultiLine::RubyParser

# # # This multi-line implementation uses IRB’s RubyLex parser

works on:         1.8
analyze features: [:literal, :string]
                  [:literal, :hash]
                  [:statement]
                  [:forced]
notes:            statement could also be [

Constants

ERROR_MESSAGES
VERSION

Public Instance Methods

multiline?(string) click to toggle source
# File lib/ripl/multi_line/ruby_parser.rb, line 25
def multiline?(string)
  return [:forced] if string =~ /;\s*\Z/ # force multi line with ;
  ::RubyParser.new.parse(string)
  false # string was parsable, no multi-line
rescue ::Racc::ParseError
  [:statement]
rescue SyntaxError => e
  ERROR_MESSAGES.each{ |type, message|
    return type if message === e.message
  }
  false # syntax error not multi-line relevant
end