Commit 88142cd0 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Make auto-detected constructors public by default.

Also added a method Class.constructor? to check if a member is
a constructor function.
parent c8df9ab5
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
require 'jsduck/logger'
require 'pp'
require 'jsduck/class'

module JsDuck

@@ -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
+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
@@ -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.
@@ -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.
         */
@@ -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.
         */
@@ -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
@@ -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