Sha256: 6483bfcefe54dc94824d86e3c561d1bdd0bf90de901ae581667e765fe0bffd89

Contents?: true

Size: 1.69 KB

Versions: 29

Compression:

Stored size: 1.69 KB

Contents

module JsDuck
  module Process

    # Auto-detector return values and @chainable tags.
    #
    # Adds @chainable tag when doc-comment contains @return {OwnerClass}
    # this.  Also the other way around: when @chainable found, adds
    # appropriate @return.
    class ReturnValues
      def initialize(relations)
        @relations = relations
        @cls = nil
      end

      def process_all!
        @relations.each do |cls|
          @cls = cls
          cls.find_members(:tagname => :method, :local => true, :static => false).each do |m|
            process(m)
          end
        end
      end

      private

      def process(m)
        if constructor?(m)
          add_return_new(m)
        elsif chainable?(m)
          add_return_this(m)
        elsif returns_this?(m)
          add_chainable(m)
        end
      end

      def constructor?(m)
        m[:name] == "constructor"
      end

      def chainable?(m)
        m[:chainable]
      end

      def returns_this?(m)
        m[:return] && m[:return][:type] == @cls[:name] && m[:return][:doc] =~ /\Athis\b/
      end

      def add_chainable(m)
        m[:chainable] = true
      end

      def add_return_this(m)
        if m[:return] == nil
          m[:return] = {:type => @cls[:name], :doc => "this"}
        end
      end

      def add_return_new(m)
        if m[:return] == nil || m[:return][:type] == "Object"
          # Create a whole new :return hash.
          # If we were to just change the :type field it would modify
          # the type of all the inherited constructor docs.
          m[:return] = {
            :type => @cls[:name],
            :doc => m[:return] ? m[:return][:doc] : "",
          }
        end
      end
    end

  end
end

Version data entries

29 entries across 29 versions & 3 rubygems

Version Path
solvas-jsduck-6.0.0.30539 lib/jsduck/process/return_values.rb
solvas-jsduck-6.0.0.9571 lib/jsduck/process/return_values.rb
solvas-jsduck-6.0.0.6154 lib/jsduck/process/return_values.rb
solvas-jsduck-6.0.0.4021 lib/jsduck/process/return_values.rb
solvas-jsduck-6.0.0.2554 lib/jsduck/process/return_values.rb
solvas-jsduck-6.0.0.1891 lib/jsduck/process/return_values.rb
solvas-jsduck-6.0.0.beta.1888 lib/jsduck/process/return_values.rb
jsduck-troopjs-0.0.9 lib/jsduck/process/return_values.rb
jsduck-troopjs-0.0.8 lib/jsduck/process/return_values.rb
jsduck-troopjs-0.0.7 lib/jsduck/process/return_values.rb
jsduck-troopjs-0.0.5 lib/jsduck/process/return_values.rb
jsduck-troopjs-0.0.4 lib/jsduck/process/return_values.rb
jsduck-troopjs-0.0.3 lib/jsduck/process/return_values.rb
jsduck-troopjs-0.0.1 lib/jsduck/process/return_values.rb
jsduck-6.0.0beta lib/jsduck/process/return_values.rb
jsduck-5.3.4 lib/jsduck/process/return_values.rb
jsduck-5.3.3 lib/jsduck/process/return_values.rb
jsduck-5.3.2 lib/jsduck/process/return_values.rb
jsduck-5.3.1 lib/jsduck/process/return_values.rb
jsduck-5.3.0 lib/jsduck/process/return_values.rb