Loading lib/jsduck/doc_formatter.rb +9 −5 Original line number Diff line number Diff line Loading @@ -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 Loading spec/doc_formatter_spec.rb +19 −0 Original line number Diff line number Diff line Loading @@ -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'}), Loading @@ -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 Loading Loading @@ -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>' Loading @@ -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 Loading Loading
lib/jsduck/doc_formatter.rb +9 −5 Original line number Diff line number Diff line Loading @@ -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 Loading
spec/doc_formatter_spec.rb +19 −0 Original line number Diff line number Diff line Loading @@ -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'}), Loading @@ -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 Loading Loading @@ -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>' Loading @@ -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 Loading