Loading lib/jsduck/ast.rb +21 −0 Original line number Diff line number Diff line Loading @@ -237,6 +237,8 @@ module JsDuck else if value["type"] == "FunctionExpression" cls[:members] += make_auto_method(key, value, pair) else cls[:members] += make_auto_property(key, value, pair) end end end Loading Loading @@ -355,6 +357,25 @@ module JsDuck end end def make_auto_property(name, ast, pair) m = make_property(name, ast) docset = find_docset(pair) if !docset || docset[:type] != :doc_comment m[:inheritdoc] = {} m[:autodetected] = true end if docset docset[:code] = m return [] else m[:linenr] = pair["range"][2] return [m] end end # Looks up docset associated with given AST node. # A dead-stupid and -slow implementation, but works. def find_docset(ast) Loading spec/aggregator_property_spec.rb +53 −0 Original line number Diff line number Diff line Loading @@ -208,4 +208,57 @@ describe JsDuck::Aggregator do it_should_behave_like "auto type" end shared_examples_for "auto detected property" do it "detects a property" do property[:tagname].should == :property end it "detects property name" do property[:name].should == 'foo' end it "flags property with :inheritdoc" do property[:inheritdoc].should == {} end it "flags property as :autodetected" do property[:autodetected].should == true end end describe "property without comment inside Ext.define" do let(:property) do parse(<<-EOS)[0][:members][:property][0] /** * Some documentation. */ Ext.define("MyClass", { foo: 15 }); EOS end it_should_behave_like "auto detected property" end describe "property with line comment inside Ext.define" do let(:property) do parse(<<-EOS)[0][:members][:property][0] /** * Some documentation. */ Ext.define("MyClass", { // My docs foo: "bar" }); EOS end it_should_behave_like "auto detected property" it "detects property documentation" do property[:doc].should == 'My docs' end end end Loading
lib/jsduck/ast.rb +21 −0 Original line number Diff line number Diff line Loading @@ -237,6 +237,8 @@ module JsDuck else if value["type"] == "FunctionExpression" cls[:members] += make_auto_method(key, value, pair) else cls[:members] += make_auto_property(key, value, pair) end end end Loading Loading @@ -355,6 +357,25 @@ module JsDuck end end def make_auto_property(name, ast, pair) m = make_property(name, ast) docset = find_docset(pair) if !docset || docset[:type] != :doc_comment m[:inheritdoc] = {} m[:autodetected] = true end if docset docset[:code] = m return [] else m[:linenr] = pair["range"][2] return [m] end end # Looks up docset associated with given AST node. # A dead-stupid and -slow implementation, but works. def find_docset(ast) Loading
spec/aggregator_property_spec.rb +53 −0 Original line number Diff line number Diff line Loading @@ -208,4 +208,57 @@ describe JsDuck::Aggregator do it_should_behave_like "auto type" end shared_examples_for "auto detected property" do it "detects a property" do property[:tagname].should == :property end it "detects property name" do property[:name].should == 'foo' end it "flags property with :inheritdoc" do property[:inheritdoc].should == {} end it "flags property as :autodetected" do property[:autodetected].should == true end end describe "property without comment inside Ext.define" do let(:property) do parse(<<-EOS)[0][:members][:property][0] /** * Some documentation. */ Ext.define("MyClass", { foo: 15 }); EOS end it_should_behave_like "auto detected property" end describe "property with line comment inside Ext.define" do let(:property) do parse(<<-EOS)[0][:members][:property][0] /** * Some documentation. */ Ext.define("MyClass", { // My docs foo: "bar" }); EOS end it_should_behave_like "auto detected property" it "detects property documentation" do property[:doc].should == 'My docs' end end end