Loading lib/jsduck/js/node.rb +4 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,10 @@ module JsDuck call_expression? && child("callee").to_s == "this.fireEvent" end def define_property? call_expression? && child("callee").to_s == "Object.defineProperty" end def string? literal? && @node["value"].is_a?(String) end Loading lib/jsduck/js/property.rb +12 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,12 @@ module JsDuck elsif exp && exp.string? make(exp.to_value) # Object.defineProperty(obj, "prop", {value: x}) elsif exp && exp.define_property? name = exp["arguments"][1].to_value descriptor = exp["arguments"][2] make(name, value_from_descriptor(descriptor)) else nil end Loading @@ -59,6 +65,12 @@ module JsDuck ast.to_value != nil ? ast.to_s : nil end def value_from_descriptor(descriptor) descriptor.each_property do |key, value, prop| return value if key == "value" end end end end end spec/aggregator_property_spec.rb +15 −0 Original line number Diff line number Diff line Loading @@ -155,6 +155,21 @@ describe JsDuck::Aggregator do end end describe "doc-comment before Object.defineProperty" do before do @doc = parse_member(<<-EOS) /** * Some documentation. */ Object.defineProperty(this, 'foo', { value: "asdf", enumerable: true }); EOS end it_should_behave_like "example property" end shared_examples_for "auto type" do it "should imply correct type" do @doc[:type].should == @type Loading Loading
lib/jsduck/js/node.rb +4 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,10 @@ module JsDuck call_expression? && child("callee").to_s == "this.fireEvent" end def define_property? call_expression? && child("callee").to_s == "Object.defineProperty" end def string? literal? && @node["value"].is_a?(String) end Loading
lib/jsduck/js/property.rb +12 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,12 @@ module JsDuck elsif exp && exp.string? make(exp.to_value) # Object.defineProperty(obj, "prop", {value: x}) elsif exp && exp.define_property? name = exp["arguments"][1].to_value descriptor = exp["arguments"][2] make(name, value_from_descriptor(descriptor)) else nil end Loading @@ -59,6 +65,12 @@ module JsDuck ast.to_value != nil ? ast.to_s : nil end def value_from_descriptor(descriptor) descriptor.each_property do |key, value, prop| return value if key == "value" end end end end end
spec/aggregator_property_spec.rb +15 −0 Original line number Diff line number Diff line Loading @@ -155,6 +155,21 @@ describe JsDuck::Aggregator do end end describe "doc-comment before Object.defineProperty" do before do @doc = parse_member(<<-EOS) /** * Some documentation. */ Object.defineProperty(this, 'foo', { value: "asdf", enumerable: true }); EOS end it_should_behave_like "example property" end shared_examples_for "auto type" do it "should imply correct type" do @doc[:type].should == @type Loading