Class: JsDuck::Js::Evaluator
- Inherits:
-
Object
- Object
- JsDuck::Js::Evaluator
- Defined in:
- lib/jsduck/js/evaluator.rb
Overview
Evaluates Esprima AST node into Ruby object
Instance Method Summary collapse
-
#base_css_prefix?(ast) ⇒ Boolean
True when MemberExpression == Ext.baseCSSPrefix.
-
#key_value(key) ⇒ Object
Turns object property key into string value.
-
#to_value(ast) ⇒ Object
Converts AST node into a value.
Instance Method Details
#base_css_prefix?(ast) ⇒ Boolean
True when MemberExpression == Ext.baseCSSPrefix
59 60 61 62 63 64 65 |
# File 'lib/jsduck/js/evaluator.rb', line 59 def base_css_prefix?(ast) ast["computed"] == false && ast["object"]["type"] == "Identifier" && ast["object"]["name"] == "Ext" && ast["property"]["type"] == "Identifier" && ast["property"]["name"] == "baseCSSPrefix" end |
#key_value(key) ⇒ Object
Turns object property key into string value
54 55 56 |
# File 'lib/jsduck/js/evaluator.rb', line 54 def key_value(key) key["type"] == "Identifier" ? key["name"] : key["value"] end |
#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 |