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 |