Class: Twig::TokenParser::From

Inherits:
Base
  • Object
show all
Defined in:
lib/twig/token_parser/from.rb

Overview

Imports macros.

from ‘forms.html.twig’ import forms %

Instance Attribute Summary

Attributes inherited from Base

#parser

Instance Method Summary collapse

Instance Method Details

#parse(token) ⇒ Object

Parameters:



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/twig/token_parser/from.rb', line 11

def parse(token)
  macro = parser.parse_expression
  stream = parser.stream
  stream.expect(Token::NAME_TYPE, 'import')

  targets = {}
  loop do
    name = stream.expect(Token::NAME_TYPE).value

    aliased = if stream.next_if('as')
                Node::Expression::Variable::AssignContext.new(
                  stream.expect(Token::NAME_TYPE).value,
                  token.lineno
                )
              else
                Node::Expression::Variable::AssignContext.new(name, token.lineno)
              end

    targets[name] = aliased

    unless stream.next_if(Token::PUNCTUATION_TYPE, ',')
      break
    end
  end

  stream.expect(Token::BLOCK_END_TYPE)

  internal_ref = Node::Expression::Variable::AssignTemplate.new(
    Node::Expression::Variable::Template.new(nil, token.lineno),
    global: parser.main_scope?
  )

  node = Node::Import.new(macro, internal_ref, token.lineno)

  targets.each do |name, aliased|
    parser.add_imported_symbol(:function, aliased.attributes[:name], "macro_#{name}", internal_ref)
  end

  node
end

#tagObject



52
53
54
# File 'lib/twig/token_parser/from.rb', line 52

def tag
  'from'
end