Class: JsDuck::Evaluator
- Inherits:
-
Object
- Object
- JsDuck::Evaluator
- Defined in:
- lib/jsduck/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
58 59 60 61 62 63 64 |
# File 'lib/jsduck/evaluator.rb', line 58 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
53 54 55 |
# File 'lib/jsduck/evaluator.rb', line 53 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.
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/jsduck/evaluator.rb', line 17 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 |