Sha256: 2a48b53204506aed289418d68e6a24e7ec7fc2ec5399ce4096573b50db01a5d5

Contents?: true

Size: 1.82 KB

Versions: 4

Compression:

Stored size: 1.82 KB

Contents

class Code
  class Parser
    class Function < Parslet::Parser
      rule(:call) { ::Code::Parser::Call.new }
      rule(:code_present) { ::Code::Parser::Code.new.present }
      rule(:code) { ::Code::Parser::Code.new }
      rule(:name) { ::Code::Parser::Name.new }

      rule(:opening_parenthesis) { str("(") }
      rule(:closing_parenthesis) { str(")") }
      rule(:equal) { str("=") }
      rule(:right_caret) { str(">") }
      rule(:opening_curly_bracket) { str("{") }
      rule(:closing_curly_bracket) { str("}") }
      rule(:comma) { str(",") }
      rule(:colon) { str(":") }
      rule(:asterisk) { str("*") }
      rule(:ampersand) { str("&") }

      rule(:space) { str(" ") }
      rule(:newline) { str("\n") }
      rule(:whitespace) { (space | newline).repeat(1) }
      rule(:whitespace?) { whitespace.maybe }

      rule(:keyword_argument) do
        name >> whitespace? >> colon >> code_present.as(:default).maybe
      end

      rule(:regular_argument) do
        ampersand.as(:block).maybe >>
          (asterisk >> asterisk).as(:keyword_splat).maybe >>
          asterisk.as(:splat).maybe >> name >>
          (whitespace? >> equal >> whitespace? >> code_present.as(:default)).maybe
      end

      rule(:argument) do
        keyword_argument.as(:keyword) | regular_argument.as(:regular)
      end

      rule(:arguments) do
        argument.repeat(1, 1) >>
          (whitespace? >> comma >> whitespace? >> argument).repeat
      end

      rule(:function) do
        (
          opening_parenthesis >> whitespace? >>
            arguments.as(:arguments).maybe >> whitespace? >>
            closing_parenthesis >> whitespace? >> equal >> right_caret >>
            whitespace? >> opening_curly_bracket >> code.as(:body) >>
            closing_curly_bracket
        ).as(:function) | call
      end

      root(:function)
    end
  end
end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
template-ruby-0.3.1 lib/code/parser/function.rb
code-ruby-0.3.1 lib/code/parser/function.rb
template-ruby-0.3.0 lib/code/parser/function.rb
code-ruby-0.3.0 lib/code/parser/function.rb