Sha256: 4d7a7d6020b01af2caa131447620a8b24920f9247f75b0d52a4338d6bc8a2e3b

Contents?: true

Size: 960 Bytes

Versions: 2

Compression:

Stored size: 960 Bytes

Contents

class Code
  class Parser
    class Identifier < ::Code::Parser
      def initialize(input, simple: false, **kargs)
        super(input, **kargs)
        @simple = simple
      end

      def parse
        return if end_of_input?

        if !simple? && match(AMPERSAND)
          { block: parse_subclass(::Code::Parser::Statement) }
        elsif !simple && match(ASTERISK + ASTERISK)
          { keyword_splat: parse_subclass(::Code::Parser::Statement) }
        elsif !simple? && match(ASTERISK)
          { regular_splat: parse_subclass(::Code::Parser::Statement) }
        elsif !next?(SPECIAL) && !next?(KEYWORDS)
          consume while !next?(SPECIAL) && !end_of_input?

          match(QUESTION_MARK) || match(EXCLAMATION_POINT) if !simple?

          name = buffer!

          { name: name }
        else
          return
        end
      end

      private

      attr_reader :simple

      def simple?
        !!simple
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
template-ruby-parser-0.1.2 lib/code/parser/identifier.rb
code-ruby-parser-0.1.2 lib/code/parser/identifier.rb