Method: JsDuck::Js::Evaluator#to_value

Defined in:
lib/jsduck/js/evaluator.rb

#to_value(ast) ⇒ Object

Converts AST node into a value.

  • String literals become Ruby strings

  • Number literals become Ruby numbers

  • Regex literals become :regexp symbols

  • Array expressions become Ruby arrays

  • etc

For anything it doesn’t know how to evaluate (like a function expression) it throws exception.



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
51
# File 'lib/jsduck/js/evaluator.rb', line 18

def to_value(ast)
  case ast["type"]
  when "ArrayExpression"
    ast["elements"].map {|e| to_value(e) }
  when "ObjectExpression"
    h = {}
    ast["properties"].each do |p|
      key = key_value(p["key"])
      value = to_value(p["value"])
      h[key] = value
    end
    h
  when "BinaryExpression"
    if ast["operator"] == "+"
      to_value(ast["left"]) + to_value(ast["right"])
    else
      throw "Unable to handle operator: " + ast["operator"]
    end
  when "MemberExpression"
    if base_css_prefix?(ast)
      "x-"
    else
      throw "Unable to handle this MemberExpression"
    end
  when "Literal"
    if ast["raw"] =~ /\A\//
      :regexp
    else
      ast["value"]
    end
  else
    throw "Unknown node type: " + ast["type"]
  end
end