Loading lib/jsduck/doc_formatter.rb +2 −0 Original line number Diff line number Diff line Loading @@ -159,6 +159,8 @@ module JsDuck # applies the link template def link(cls, member, anchor_text) # Use the canonical class name for link (not some alternateClassName) cls = @relations[cls].full_name # prepend type name to member name member = member && (get_member_type(cls, member).to_s + "-" + member) Loading lib/jsduck/relations.rb +3 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,9 @@ module JsDuck @lookup = {} @classes.each do |cls| @lookup[cls.full_name] = cls (cls[:alternateClassNames] || []).each do |alt_name| @lookup[alt_name] = cls end cls.relations = self end Loading spec/doc_formatter_spec.rb +34 −14 Original line number Diff line number Diff line require "jsduck/doc_formatter" require "jsduck/relations" describe JsDuck::DocFormatter do before do @formatter = JsDuck::DocFormatter.new @formatter.class_context = "Context" @formatter.relations = { 'Context' => JsDuck::Class.new({ @formatter.relations = JsDuck::Relations.new([ JsDuck::Class.new({ :name => "Context", :method => [{:name => "bar", :tagname => :method}] }), 'Ext.Msg' => JsDuck::Class.new({ JsDuck::Class.new({ :name => 'Ext.Msg' }), 'Foo' => JsDuck::Class.new({ :cfg => [{:name => "bar", :tagname => :cfg}] JsDuck::Class.new({ :name => "Foo", :cfg => [{:name => "bar", :tagname => :cfg}], :alternateClassNames => ["FooBar"] }), } ]) end describe "#replace" do Loading @@ -41,6 +46,11 @@ describe JsDuck::DocFormatter do 'Look at <a href="Foo">link text</a>' end it "Links alternate classname to real classname" do @formatter.replace("Look at {@link FooBar}").should == 'Look at <a href="Foo">FooBar</a>' end it "leaves text without {@link...} untouched" do @formatter.replace("Look at {@me here} too").should == 'Look at {@me here} too' Loading Loading @@ -86,18 +96,23 @@ describe JsDuck::DocFormatter do # auto-conversion of identifiable ClassNames to links describe "auto-detect" do before do @formatter.relations = { 'FooBar' => JsDuck::Class.new({}), 'FooBar.Blah' => JsDuck::Class.new({}), 'Ext.form.Field' => JsDuck::Class.new({ @formatter.relations = JsDuck::Relations.new([ JsDuck::Class.new({:name => 'FooBar'}), JsDuck::Class.new({:name => 'FooBar.Blah'}), JsDuck::Class.new({ :name => 'Ext.form.Field', :method => [{:name => "getValues", :tagname => :method}] }), 'Ext.XTemplate' => JsDuck::Class.new({}), 'MyClass' => JsDuck::Class.new({}), 'Ext' => JsDuck::Class.new({ JsDuck::Class.new({ :name => 'Ext.XTemplate', :alternateClassNames => ['Ext.AltXTemplate'] }), JsDuck::Class.new({:name => 'MyClass'}), JsDuck::Class.new({ :name => 'Ext', :method => [{:name => "encode", :tagname => :method}] }), } ]) end it "doesn't recognize John as class name" do Loading Loading @@ -130,6 +145,11 @@ describe JsDuck::DocFormatter do 'Look at <a href="Ext.XTemplate">Ext.XTemplate</a>' end it "links alternate classname to canonical classname" do @formatter.replace("Look at Ext.AltXTemplate").should == 'Look at <a href="Ext.XTemplate">Ext.AltXTemplate</a>' end it "converts ClassName ending with dot to class link" do @formatter.replace("Look at MyClass.").should == 'Look at <a href="MyClass">MyClass</a>.' Loading Loading
lib/jsduck/doc_formatter.rb +2 −0 Original line number Diff line number Diff line Loading @@ -159,6 +159,8 @@ module JsDuck # applies the link template def link(cls, member, anchor_text) # Use the canonical class name for link (not some alternateClassName) cls = @relations[cls].full_name # prepend type name to member name member = member && (get_member_type(cls, member).to_s + "-" + member) Loading
lib/jsduck/relations.rb +3 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,9 @@ module JsDuck @lookup = {} @classes.each do |cls| @lookup[cls.full_name] = cls (cls[:alternateClassNames] || []).each do |alt_name| @lookup[alt_name] = cls end cls.relations = self end Loading
spec/doc_formatter_spec.rb +34 −14 Original line number Diff line number Diff line require "jsduck/doc_formatter" require "jsduck/relations" describe JsDuck::DocFormatter do before do @formatter = JsDuck::DocFormatter.new @formatter.class_context = "Context" @formatter.relations = { 'Context' => JsDuck::Class.new({ @formatter.relations = JsDuck::Relations.new([ JsDuck::Class.new({ :name => "Context", :method => [{:name => "bar", :tagname => :method}] }), 'Ext.Msg' => JsDuck::Class.new({ JsDuck::Class.new({ :name => 'Ext.Msg' }), 'Foo' => JsDuck::Class.new({ :cfg => [{:name => "bar", :tagname => :cfg}] JsDuck::Class.new({ :name => "Foo", :cfg => [{:name => "bar", :tagname => :cfg}], :alternateClassNames => ["FooBar"] }), } ]) end describe "#replace" do Loading @@ -41,6 +46,11 @@ describe JsDuck::DocFormatter do 'Look at <a href="Foo">link text</a>' end it "Links alternate classname to real classname" do @formatter.replace("Look at {@link FooBar}").should == 'Look at <a href="Foo">FooBar</a>' end it "leaves text without {@link...} untouched" do @formatter.replace("Look at {@me here} too").should == 'Look at {@me here} too' Loading Loading @@ -86,18 +96,23 @@ describe JsDuck::DocFormatter do # auto-conversion of identifiable ClassNames to links describe "auto-detect" do before do @formatter.relations = { 'FooBar' => JsDuck::Class.new({}), 'FooBar.Blah' => JsDuck::Class.new({}), 'Ext.form.Field' => JsDuck::Class.new({ @formatter.relations = JsDuck::Relations.new([ JsDuck::Class.new({:name => 'FooBar'}), JsDuck::Class.new({:name => 'FooBar.Blah'}), JsDuck::Class.new({ :name => 'Ext.form.Field', :method => [{:name => "getValues", :tagname => :method}] }), 'Ext.XTemplate' => JsDuck::Class.new({}), 'MyClass' => JsDuck::Class.new({}), 'Ext' => JsDuck::Class.new({ JsDuck::Class.new({ :name => 'Ext.XTemplate', :alternateClassNames => ['Ext.AltXTemplate'] }), JsDuck::Class.new({:name => 'MyClass'}), JsDuck::Class.new({ :name => 'Ext', :method => [{:name => "encode", :tagname => :method}] }), } ]) end it "doesn't recognize John as class name" do Loading Loading @@ -130,6 +145,11 @@ describe JsDuck::DocFormatter do 'Look at <a href="Ext.XTemplate">Ext.XTemplate</a>' end it "links alternate classname to canonical classname" do @formatter.replace("Look at Ext.AltXTemplate").should == 'Look at <a href="Ext.XTemplate">Ext.AltXTemplate</a>' end it "converts ClassName ending with dot to class link" do @formatter.replace("Look at MyClass.").should == 'Look at <a href="MyClass">MyClass</a>.' Loading