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

Auto-linking of current class #members.

When #foo is found inside text, it is automatically interpreted
as {@link #foo} when the current class happens to have a member
called #foo.
parent f9439647
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -196,16 +196,20 @@ module JsDuck
    end

    def replace_class_names(input)
      input.gsub(/\b([A-Z][A-Za-z0-9.]*[A-Za-z0-9])(?:(#)([A-Za-z0-9]+))?\b/m) do
      cls_re = "([A-Z][A-Za-z0-9.]*[A-Za-z0-9])"
      member_re = "(?:#([A-Za-z0-9]+))"

      input.gsub(/\b#{cls_re}#{member_re}?\b|#{member_re}\b/m) do
        cls = $1
        hash = $2
        member = $3
        member = $2 || $3

        if @relations[cls] && (member ? get_matching_member(cls, member) : cls =~ /\./)
        if cls && @relations[cls] && (member ? get_matching_member(cls, member) : cls =~ /\./)
          label = member ? cls+"."+member : cls
          link(cls, member, label)
        elsif !cls && member && get_matching_member(@class_context, member)
          link(@class_context, member, member)
        else
          cls + (hash || "") + (member || "")
          "#{cls}#{member ? '#' : ''}#{member}"
        end
      end
    end
+19 −0
Original line number Diff line number Diff line
@@ -116,6 +116,7 @@ describe JsDuck::DocFormatter do
    # auto-conversion of identifiable ClassNames to links
    describe "auto-detect" do
      before do
        @formatter.class_context = "Context"
        @formatter.relations = JsDuck::Relations.new([
          JsDuck::Class.new({:name => 'Foo.Bar'}),
          JsDuck::Class.new({:name => 'Foo.Bar.Blah'}),
@@ -135,6 +136,12 @@ describe JsDuck::DocFormatter do
              :method => [{:tagname => :method, :name => "encode", :id => "method-encode"}]
            }
          }),
          JsDuck::Class.new({
            :name => "Context",
            :members => {
              :method => [{:tagname => :method, :name => "bar", :id => "method-bar"}]
            },
          }),
        ])
      end

@@ -193,6 +200,8 @@ describe JsDuck::DocFormatter do
          'See: <a href="Foo.Bar">Foo.Bar</a>, <a href="Ext.XTemplate">Ext.XTemplate</a>'
      end

      # Links to #members

      it "converts Ext#encode to method link" do
        @formatter.replace("Look at Ext#encode").should ==
          'Look at <a href="Ext#method-encode">Ext.encode</a>'
@@ -203,6 +212,16 @@ describe JsDuck::DocFormatter do
          'Look at <a href="Ext.form.Field#method-getValues">Ext.form.Field.getValues</a>'
      end

      it "converts #bar to link to current class method" do
        @formatter.replace("Look at #bar method").should ==
          'Look at <a href="Context#method-bar">bar</a> method'
      end

      it "Doesn't convert #unknown to link" do
        @formatter.replace("Ahh, an #unknown method").should ==
          'Ahh, an #unknown method'
      end

      # Ensure links aren't created inside <a>...</a> or {@link} and {@img} tags.

      it "doesn't create links inside {@link} tag" do