Loading lib/jsduck/class.rb +2 −1 Original line number Diff line number Diff line Loading @@ -159,7 +159,7 @@ module JsDuck # # Optionally one can also specify type name to differenciate # between different types of members. def get_members(name, type_name=nil) def get_members(name, type_name=nil, static=false) # build hash of all members unless @members_map @members_map = {} Loading @@ -174,6 +174,7 @@ module JsDuck ms = @members_map[name] || [] ms = ms.find_all {|m| m[:tagname] == type_name } if type_name ms = ms.find_all {|m| m[:attributes][:static] } if static return ms end Loading lib/jsduck/doc_formatter.rb +14 −12 Original line number Diff line number Diff line Loading @@ -108,12 +108,14 @@ module JsDuck input.sub(@link_re) do target = $1 text = $2 if target =~ /^(.*)#(?:(cfg|property|method|event|css_var|css_mixin)-)?(.*)$/ if target =~ /^(.*)#(static-)?(?:(cfg|property|method|event|css_var|css_mixin)-)?(.*)$/ cls = $1.empty? ? @class_context : $1 type = $2 ? $2.intern : nil member = $3 static = !!$2 type = $3 ? $3.intern : nil member = $4 else cls = target static = false type = false member = false end Loading @@ -133,7 +135,7 @@ module JsDuck Logger.instance.warn(:link, "#{input} links to non-existing class", file, line) return text elsif member ms = get_members(cls, member, type) ms = get_members(cls, member, type, static) if ms.length == 0 Logger.instance.warn(:link, "#{input} links to non-existing member", file, line) return text Loading Loading @@ -161,9 +163,9 @@ module JsDuck end end return link(cls, member, text, type) return link(cls, member, text, type, static) else return link(cls, false, text, false) return link(cls, false, text) end end end Loading Loading @@ -205,11 +207,11 @@ module JsDuck end # applies the link template def link(cls, member, anchor_text, type=nil) def link(cls, member, anchor_text, type=nil, static=false) # Use the canonical class name for link (not some alternateClassName) cls = @relations[cls].full_name # prepend type name to member name member = member && get_matching_member(cls, member, type) member = member && get_matching_member(cls, member, type, static) @link_tpl.gsub(/(%[\w#-])/) do case $1 Loading @@ -229,8 +231,8 @@ module JsDuck end end def get_matching_member(cls, member, type=nil) ms = get_members(cls, member, type).find_all {|m| !m[:private] } def get_matching_member(cls, member, type=nil, static=false) ms = get_members(cls, member, type, static).find_all {|m| !m[:private] } if ms.length > 1 instance_ms = ms.find_all {|m| !m[:attributes][:static] } instance_ms.length > 0 ? instance_ms[0] : ms.find_all {|m| m[:attributes][:static] }[0] Loading @@ -239,8 +241,8 @@ module JsDuck end end def get_members(cls, member, type=nil) @relations[cls] ? @relations[cls].get_members(member, type) : [] def get_members(cls, member, type=nil, static=false) @relations[cls] ? @relations[cls].get_members(member, type, static) : [] end # Formats doc-comment for placement into HTML. Loading spec/doc_formatter_spec.rb +31 −0 Original line number Diff line number Diff line Loading @@ -232,6 +232,37 @@ describe JsDuck::DocFormatter do 'Look at <a href="Foo#event-select">Foo.select</a>' end end describe "with staticality information" do before do @formatter.relations = JsDuck::Relations.new([ JsDuck::Class.new({ :name => 'Foo', :members => { :method => [{:tagname => :method, :name => "select", :id => "method-select", :attributes => {}}], }, :statics => { :method => [{:tagname => :method, :name => "select", :id => "static-method-select", :attributes => {:static => true}}], } }) ]) end it "replaces {@link Foo#select} with link to instance method" do @formatter.replace("Look at {@link Foo#select}").should == 'Look at <a href="Foo#method-select">Foo.select</a>' end it "replaces {@link Foo#static-select} with link to static method" do @formatter.replace("Look at {@link Foo#static-select}").should == 'Look at <a href="Foo#static-method-select">Foo.select</a>' end it "replaces {@link Foo#static-method-select} with link to static method" do @formatter.replace("Look at {@link Foo#static-method-select}").should == 'Look at <a href="Foo#static-method-select">Foo.select</a>' end end end describe "#format" do Loading Loading
lib/jsduck/class.rb +2 −1 Original line number Diff line number Diff line Loading @@ -159,7 +159,7 @@ module JsDuck # # Optionally one can also specify type name to differenciate # between different types of members. def get_members(name, type_name=nil) def get_members(name, type_name=nil, static=false) # build hash of all members unless @members_map @members_map = {} Loading @@ -174,6 +174,7 @@ module JsDuck ms = @members_map[name] || [] ms = ms.find_all {|m| m[:tagname] == type_name } if type_name ms = ms.find_all {|m| m[:attributes][:static] } if static return ms end Loading
lib/jsduck/doc_formatter.rb +14 −12 Original line number Diff line number Diff line Loading @@ -108,12 +108,14 @@ module JsDuck input.sub(@link_re) do target = $1 text = $2 if target =~ /^(.*)#(?:(cfg|property|method|event|css_var|css_mixin)-)?(.*)$/ if target =~ /^(.*)#(static-)?(?:(cfg|property|method|event|css_var|css_mixin)-)?(.*)$/ cls = $1.empty? ? @class_context : $1 type = $2 ? $2.intern : nil member = $3 static = !!$2 type = $3 ? $3.intern : nil member = $4 else cls = target static = false type = false member = false end Loading @@ -133,7 +135,7 @@ module JsDuck Logger.instance.warn(:link, "#{input} links to non-existing class", file, line) return text elsif member ms = get_members(cls, member, type) ms = get_members(cls, member, type, static) if ms.length == 0 Logger.instance.warn(:link, "#{input} links to non-existing member", file, line) return text Loading Loading @@ -161,9 +163,9 @@ module JsDuck end end return link(cls, member, text, type) return link(cls, member, text, type, static) else return link(cls, false, text, false) return link(cls, false, text) end end end Loading Loading @@ -205,11 +207,11 @@ module JsDuck end # applies the link template def link(cls, member, anchor_text, type=nil) def link(cls, member, anchor_text, type=nil, static=false) # Use the canonical class name for link (not some alternateClassName) cls = @relations[cls].full_name # prepend type name to member name member = member && get_matching_member(cls, member, type) member = member && get_matching_member(cls, member, type, static) @link_tpl.gsub(/(%[\w#-])/) do case $1 Loading @@ -229,8 +231,8 @@ module JsDuck end end def get_matching_member(cls, member, type=nil) ms = get_members(cls, member, type).find_all {|m| !m[:private] } def get_matching_member(cls, member, type=nil, static=false) ms = get_members(cls, member, type, static).find_all {|m| !m[:private] } if ms.length > 1 instance_ms = ms.find_all {|m| !m[:attributes][:static] } instance_ms.length > 0 ? instance_ms[0] : ms.find_all {|m| m[:attributes][:static] }[0] Loading @@ -239,8 +241,8 @@ module JsDuck end end def get_members(cls, member, type=nil) @relations[cls] ? @relations[cls].get_members(member, type) : [] def get_members(cls, member, type=nil, static=false) @relations[cls] ? @relations[cls].get_members(member, type, static) : [] end # Formats doc-comment for placement into HTML. Loading
spec/doc_formatter_spec.rb +31 −0 Original line number Diff line number Diff line Loading @@ -232,6 +232,37 @@ describe JsDuck::DocFormatter do 'Look at <a href="Foo#event-select">Foo.select</a>' end end describe "with staticality information" do before do @formatter.relations = JsDuck::Relations.new([ JsDuck::Class.new({ :name => 'Foo', :members => { :method => [{:tagname => :method, :name => "select", :id => "method-select", :attributes => {}}], }, :statics => { :method => [{:tagname => :method, :name => "select", :id => "static-method-select", :attributes => {:static => true}}], } }) ]) end it "replaces {@link Foo#select} with link to instance method" do @formatter.replace("Look at {@link Foo#select}").should == 'Look at <a href="Foo#method-select">Foo.select</a>' end it "replaces {@link Foo#static-select} with link to static method" do @formatter.replace("Look at {@link Foo#static-select}").should == 'Look at <a href="Foo#static-method-select">Foo.select</a>' end it "replaces {@link Foo#static-method-select} with link to static method" do @formatter.replace("Look at {@link Foo#static-method-select}").should == 'Look at <a href="Foo#static-method-select">Foo.select</a>' end end end describe "#format" do Loading