Commit a71befb3 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Support for @deprecated tag.

Detecting the version and description of @deprecated tag.  Showing
a red warning in deprecated methods.
parent d9986331
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -105,6 +105,8 @@ module JsDuck
          at_author
        elsif look(/@docauthor\b/)
          at_docauthor
        elsif look(/@deprecated\b/)
          at_deprecated
        elsif look(/@var\b/)
          at_var
        elsif look(/@static\b/)
@@ -283,6 +285,17 @@ module JsDuck
      skip_white
    end

    # matches @deprecated <version> some text ... newline
    def at_deprecated
      match(/@deprecated/)
      add_tag(:deprecated)
      skip_horiz_white
      @current_tag[:version] = @input.scan(/[0-9.]+/)
      skip_horiz_white
      @current_tag[:text] = @input.scan(/.*$/)
      skip_white
    end

    # Used to match @private, @ignore, @hide, ...
    def boolean_at_tag(regex, propname)
      match(regex)
+1 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ module JsDuck
      m = m.clone
      @formatter.doc_context = m
      m[:doc] = @formatter.format(m[:doc]) if m[:doc]
      m[:deprecated][:text] = @formatter.format(m[:deprecated][:text]) if m[:deprecated]
      if m[:params] || @formatter.too_long?(m[:doc])
        m[:shortDoc] = @formatter.shorten(m[:doc])
      end
+10 −0
Original line number Diff line number Diff line
@@ -140,6 +140,7 @@ module JsDuck
        :return => detect_return(doc_map),
        :private => !!doc_map[:private],
        :static => !!doc_map[:static],
        :deprecated => detect_deprecated(doc_map),
      }
    end

@@ -152,6 +153,7 @@ module JsDuck
        :doc => detect_doc(docs),
        :params => detect_params(docs, code),
        :private => !!doc_map[:private],
        :deprecated => detect_deprecated(doc_map),
      }
    end

@@ -164,6 +166,7 @@ module JsDuck
        :type => detect_type(:cfg, doc_map, code),
        :doc => detect_doc(docs),
        :private => !!doc_map[:private],
        :deprecated => detect_deprecated(doc_map),
      }
    end

@@ -177,6 +180,7 @@ module JsDuck
        :doc => detect_doc(docs),
        :private => !!doc_map[:private],
        :static => !!doc_map[:static],
        :deprecated => detect_deprecated(doc_map),
      }
    end

@@ -190,6 +194,7 @@ module JsDuck
        :doc => detect_doc(docs),
        :private => !!doc_map[:private],
        :static => !!doc_map[:static],
        :deprecated => detect_deprecated(doc_map),
      }
    end

@@ -203,6 +208,7 @@ module JsDuck
        :params => detect_params(docs, code),
        :private => !!doc_map[:private],
        :static => !!doc_map[:static],
        :deprecated => detect_deprecated(doc_map),
      }
    end

@@ -291,6 +297,10 @@ module JsDuck
      doc_map[:docauthor] ? doc_map[:docauthor].first[:name] : nil
    end

    def detect_deprecated(doc_map)
      doc_map[:deprecated] ? doc_map[:deprecated].first : nil
    end

    def detect_params(docs, code)
      implicit = detect_implicit_params(code)
      explicit = detect_explicit_params(docs)
+52 −0
Original line number Diff line number Diff line
require "jsduck/aggregator"
require "jsduck/source_file"

describe JsDuck::Aggregator do

  def parse(string)
    agr = JsDuck::Aggregator.new
    agr.aggregate(JsDuck::SourceFile.new(string))
    agr.result
  end

  describe "@deprecated" do

    before do
      @items = parse(<<-EOS)
        /**
         * @cfg escapeRe
         * @deprecated 4.0 Use escapeRegex instead.
         */
      EOS
    end

    it "detects deprecation description" do
      @items[0][:deprecated][:text].should == "Use escapeRegex instead."
    end

    it "detects version of deprecation" do
      @items[0][:deprecated][:version].should == "4.0"
    end
  end

  describe "@deprecated without version number" do

    before do
      @items = parse(<<-EOS)
        /**
         * @cfg escapeRe
         * @deprecated Use escapeRegex instead.
         */
      EOS
    end

    it "doesn't detect version number" do
      @items[0][:deprecated][:version].should == nil
    end

    it "still detects description" do
      @items[0][:deprecated][:text].should == "Use escapeRegex instead."
    end
  end

end
+18 −6
Original line number Diff line number Diff line
@@ -208,19 +208,23 @@ Ext.define('Docs.view.cls.Overview', {
    },

    renderSignature: function(member) {
        var signature;
        if (member.tagname === "cfg" || member.tagname === "property") {
            return "<span> : " + member.type + "</span>";
            signature = "<span> : " + member.type + "</span>";
        }
        else {
            var ps = Ext.Array.map(member.params, this.renderShortParam, this).join(", ");
            var signature = '( <span class="pre">' + ps + "</span> )";
            signature = '( <span class="pre">' + ps + "</span> )";
            if (member.tagname === "method") {
                return signature + " : " + member["return"].type;
                signature += " : " + member["return"].type;
            }
            else {
                return signature;
        }

        if (member.deprecated) {
            signature += "<strong class='deprecated-signature'>deprecated</strong>";
        }

        return signature;
    },

    renderShortParam: function(param) {
@@ -231,6 +235,14 @@ Ext.define('Docs.view.cls.Overview', {
    renderLongDoc: function(member) {
        var doc = member.doc;

        if (member.deprecated) {
            var v = member.deprecated.version ? "since " + member.deprecated.version : "";
            doc += '<div class="deprecated">';
            doc += Ext.String.format('<p>This {0} has been <strong>deprecated</strong> {1}</p>', member.tagname, v);
            doc += member.deprecated.text;
            doc += '</div>';
        }

        if (member.params && member.params.length > 0) {
            doc += '<h3 class="pa">Parameters</h3>';
            var ps = Ext.Array.map(member.params, this.renderLongParam, this).join("");
Loading