Loading lib/jsduck/class.rb +14 −11 Original line number Diff line number Diff line Loading @@ -114,22 +114,25 @@ module JsDuck all_members end # Looks up member type by member name # Returns member by name. # # Returns type of nil if member not found def member_type(name) # Optionally one can also specify type name to differenciate # between different types of members. def get_member(name, type_name=nil) # build hash of all members unless @type_map @type_map = {} @doc[:members].each_key do |type| @type_map.merge!(members_hash(type)) unless @members_map @members_map = {} [:members, :statics].each do |group| @doc[group].each_key do |type| members_hash(type).each_pair do |key, member| @members_map["#{type}-#{key}"] = member @members_map[key] = member end end @doc[:statics].each_key do |type| @type_map.merge!(members_hash(type, :statics)) end end @type_map[name] && @type_map[name][:tagname] @members_map[type_name ? "#{type_name}-#{name}" : name] end # A way to access full class name with similar syntax to Loading lib/jsduck/doc_formatter.rb +10 −8 Original line number Diff line number Diff line Loading @@ -91,11 +91,13 @@ module JsDuck input.sub(@link_re) do target = $1 text = $2 if target =~ /^(.*)#(.*)$/ if target =~ /^(.*)#(?:(.*)-)?(.*)$/ cls = $1.empty? ? @class_context : $1 member = $2 type = $2 ? $2.intern : nil member = $3 else cls = target type = false member = false end Loading @@ -113,11 +115,11 @@ module JsDuck if !@relations[cls] Logger.instance.warn("#{file} line #{line} #{input} links to non-existing class.") text elsif member && !get_member_type(cls, member) elsif member && !get_member(cls, member, type) Logger.instance.warn("#{file} line #{line} #{input} links to non-existing member.") text else link(cls, member, text) link(cls, member, text, type) end end end Loading Loading @@ -158,11 +160,11 @@ module JsDuck end # applies the link template def link(cls, member, anchor_text) def link(cls, member, anchor_text, type=nil) # 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) member = member && (get_member(cls, member, type)[:tagname].to_s + "-" + member) @link_tpl.gsub(/(%[\w#-])/) do case $1 Loading @@ -182,8 +184,8 @@ module JsDuck end end def get_member_type(cls, member) @relations[cls] && @relations[cls].member_type(member) def get_member(cls, member, type) @relations[cls] && @relations[cls].get_member(member, type) end # Formats doc-comment for placement into HTML. Loading spec/doc_formatter_spec.rb +24 −0 Original line number Diff line number Diff line Loading @@ -188,6 +188,30 @@ describe JsDuck::DocFormatter do '<img src="some/file.jpg" alt="a MyClass image"/>' end end describe "with type information" do before do @formatter.relations = JsDuck::Relations.new([ JsDuck::Class.new({ :name => 'Foo', :members => { :method => [{:name => "select", :tagname => :method}], :event => [{:name => "select", :tagname => :event}], } }) ]) end it "replaces {@link Foo#method-select} with link to method" do @formatter.replace("Look at {@link Foo#method-select}").should == 'Look at <a href="Foo#method-select">Foo.select</a>' end it "replaces {@link Foo#event-select} with link to event" do @formatter.replace("Look at {@link Foo#event-select}").should == 'Look at <a href="Foo#event-select">Foo.select</a>' end end end describe "#format" do Loading Loading
lib/jsduck/class.rb +14 −11 Original line number Diff line number Diff line Loading @@ -114,22 +114,25 @@ module JsDuck all_members end # Looks up member type by member name # Returns member by name. # # Returns type of nil if member not found def member_type(name) # Optionally one can also specify type name to differenciate # between different types of members. def get_member(name, type_name=nil) # build hash of all members unless @type_map @type_map = {} @doc[:members].each_key do |type| @type_map.merge!(members_hash(type)) unless @members_map @members_map = {} [:members, :statics].each do |group| @doc[group].each_key do |type| members_hash(type).each_pair do |key, member| @members_map["#{type}-#{key}"] = member @members_map[key] = member end end @doc[:statics].each_key do |type| @type_map.merge!(members_hash(type, :statics)) end end @type_map[name] && @type_map[name][:tagname] @members_map[type_name ? "#{type_name}-#{name}" : name] end # A way to access full class name with similar syntax to Loading
lib/jsduck/doc_formatter.rb +10 −8 Original line number Diff line number Diff line Loading @@ -91,11 +91,13 @@ module JsDuck input.sub(@link_re) do target = $1 text = $2 if target =~ /^(.*)#(.*)$/ if target =~ /^(.*)#(?:(.*)-)?(.*)$/ cls = $1.empty? ? @class_context : $1 member = $2 type = $2 ? $2.intern : nil member = $3 else cls = target type = false member = false end Loading @@ -113,11 +115,11 @@ module JsDuck if !@relations[cls] Logger.instance.warn("#{file} line #{line} #{input} links to non-existing class.") text elsif member && !get_member_type(cls, member) elsif member && !get_member(cls, member, type) Logger.instance.warn("#{file} line #{line} #{input} links to non-existing member.") text else link(cls, member, text) link(cls, member, text, type) end end end Loading Loading @@ -158,11 +160,11 @@ module JsDuck end # applies the link template def link(cls, member, anchor_text) def link(cls, member, anchor_text, type=nil) # 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) member = member && (get_member(cls, member, type)[:tagname].to_s + "-" + member) @link_tpl.gsub(/(%[\w#-])/) do case $1 Loading @@ -182,8 +184,8 @@ module JsDuck end end def get_member_type(cls, member) @relations[cls] && @relations[cls].member_type(member) def get_member(cls, member, type) @relations[cls] && @relations[cls].get_member(member, type) end # Formats doc-comment for placement into HTML. Loading
spec/doc_formatter_spec.rb +24 −0 Original line number Diff line number Diff line Loading @@ -188,6 +188,30 @@ describe JsDuck::DocFormatter do '<img src="some/file.jpg" alt="a MyClass image"/>' end end describe "with type information" do before do @formatter.relations = JsDuck::Relations.new([ JsDuck::Class.new({ :name => 'Foo', :members => { :method => [{:name => "select", :tagname => :method}], :event => [{:name => "select", :tagname => :event}], } }) ]) end it "replaces {@link Foo#method-select} with link to method" do @formatter.replace("Look at {@link Foo#method-select}").should == 'Look at <a href="Foo#method-select">Foo.select</a>' end it "replaces {@link Foo#event-select} with link to event" do @formatter.replace("Look at {@link Foo#event-select}").should == 'Look at <a href="Foo#event-select">Foo.select</a>' end end end describe "#format" do Loading