Loading lib/jsduck/class.rb +5 −0 Original line number Diff line number Diff line Loading @@ -198,6 +198,11 @@ module JsDuck def self.each_member_type(&block) [:cfg, :property, :method, :event, :css_var, :css_mixin].each(&block) end # True if the given member is a constructor method def self.constructor?(member) member[:tagname] == :method && member[:name] == "constructor" end end # String class for classnames that has extra method #exists? which Loading lib/jsduck/inherit_doc.rb +2 −2 Original line number Diff line number Diff line require 'jsduck/logger' require 'pp' require 'jsduck/class' module JsDuck Loading Loading @@ -61,7 +61,7 @@ module JsDuck # For auto-detected members/classes (which have @private == :inherit) # Use the visibility from parent class (defaulting to private when no parent). def resolve_visibility(m, parent) if m[:autodetected] if m[:autodetected] && !JsDuck::Class.constructor?(m) if !parent || parent[:private] m[:meta][:private] = m[:private] = true end Loading spec/aggregator_constructor_spec.rb +34 −5 Original line number Diff line number Diff line require "jsduck/aggregator" require "jsduck/source/file" require "jsduck/relations" require "jsduck/class" require "jsduck/inherit_doc" describe JsDuck::Aggregator do def parse(string) agr = JsDuck::Aggregator.new agr.aggregate(JsDuck::Source::File.new(string)) agr.result relations = JsDuck::Relations.new(agr.result.map {|cls| JsDuck::Class.new(cls) }) JsDuck::InheritDoc.new(relations).resolve_all relations end shared_examples_for "constructor" do Loading @@ -24,7 +29,7 @@ describe JsDuck::Aggregator do describe "class with @constructor" do let(:methods) do parse(<<-EOS)[0][:members] parse(<<-EOS)["MyClass"][:members] /** * @class MyClass * Comment here. Loading @@ -40,7 +45,7 @@ describe JsDuck::Aggregator do describe "class with method named constructor" do let(:methods) do parse(<<-EOS)[0][:members] parse(<<-EOS)["MyClass"][:members] /** * Comment here. */ Loading @@ -59,7 +64,7 @@ describe JsDuck::Aggregator do describe "class with member containing @constructor" do let(:methods) do parse(<<-EOS)[0][:members] parse(<<-EOS)["MyClass"][:members] /** * Comment here. */ Loading @@ -78,7 +83,7 @@ describe JsDuck::Aggregator do describe "class with both @constructor tag and constructor property inside Ext.define()" do let(:methods) do parse(<<-EOS)[0][:members] parse(<<-EOS)["MyClass"][:members] /** * Comment here. * @constructor Loading @@ -97,4 +102,28 @@ describe JsDuck::Aggregator do end end describe "class with constructor property inside Ext.define()" do let(:methods) do parse(<<-EOS)["MyClass"][:members] /** * Comment here. * @private */ Ext.define("MyClass", { constructor: function() { }, foo: [] }); EOS end it "detects the constructor method" do methods[0][:name].should == "constructor" end it "doesn't detect the constructor as private" do methods[0][:private].should_not == true end end end Loading
lib/jsduck/class.rb +5 −0 Original line number Diff line number Diff line Loading @@ -198,6 +198,11 @@ module JsDuck def self.each_member_type(&block) [:cfg, :property, :method, :event, :css_var, :css_mixin].each(&block) end # True if the given member is a constructor method def self.constructor?(member) member[:tagname] == :method && member[:name] == "constructor" end end # String class for classnames that has extra method #exists? which Loading
lib/jsduck/inherit_doc.rb +2 −2 Original line number Diff line number Diff line require 'jsduck/logger' require 'pp' require 'jsduck/class' module JsDuck Loading Loading @@ -61,7 +61,7 @@ module JsDuck # For auto-detected members/classes (which have @private == :inherit) # Use the visibility from parent class (defaulting to private when no parent). def resolve_visibility(m, parent) if m[:autodetected] if m[:autodetected] && !JsDuck::Class.constructor?(m) if !parent || parent[:private] m[:meta][:private] = m[:private] = true end Loading
spec/aggregator_constructor_spec.rb +34 −5 Original line number Diff line number Diff line require "jsduck/aggregator" require "jsduck/source/file" require "jsduck/relations" require "jsduck/class" require "jsduck/inherit_doc" describe JsDuck::Aggregator do def parse(string) agr = JsDuck::Aggregator.new agr.aggregate(JsDuck::Source::File.new(string)) agr.result relations = JsDuck::Relations.new(agr.result.map {|cls| JsDuck::Class.new(cls) }) JsDuck::InheritDoc.new(relations).resolve_all relations end shared_examples_for "constructor" do Loading @@ -24,7 +29,7 @@ describe JsDuck::Aggregator do describe "class with @constructor" do let(:methods) do parse(<<-EOS)[0][:members] parse(<<-EOS)["MyClass"][:members] /** * @class MyClass * Comment here. Loading @@ -40,7 +45,7 @@ describe JsDuck::Aggregator do describe "class with method named constructor" do let(:methods) do parse(<<-EOS)[0][:members] parse(<<-EOS)["MyClass"][:members] /** * Comment here. */ Loading @@ -59,7 +64,7 @@ describe JsDuck::Aggregator do describe "class with member containing @constructor" do let(:methods) do parse(<<-EOS)[0][:members] parse(<<-EOS)["MyClass"][:members] /** * Comment here. */ Loading @@ -78,7 +83,7 @@ describe JsDuck::Aggregator do describe "class with both @constructor tag and constructor property inside Ext.define()" do let(:methods) do parse(<<-EOS)[0][:members] parse(<<-EOS)["MyClass"][:members] /** * Comment here. * @constructor Loading @@ -97,4 +102,28 @@ describe JsDuck::Aggregator do end end describe "class with constructor property inside Ext.define()" do let(:methods) do parse(<<-EOS)["MyClass"][:members] /** * Comment here. * @private */ Ext.define("MyClass", { constructor: function() { }, foo: [] }); EOS end it "detects the constructor method" do methods[0][:name].should == "constructor" end it "doesn't detect the constructor as private" do methods[0][:private].should_not == true end end end