Loading lib/jsduck/aggregator.rb +0 −18 Original line number Diff line number Diff line Loading @@ -9,7 +9,6 @@ module JsDuck @documentation = [] @classes = {} @orphans = [] @aliases = [] @current_class = nil end Loading Loading @@ -83,7 +82,6 @@ module JsDuck else add_orphan(node) end @aliases << node if node[:alias] end def add_to_class(cls, member) Loading Loading @@ -118,22 +116,6 @@ module JsDuck end end # Copy over doc/params/return from original methods to aliases. # Aliases are currently only supported for methods. def populate_aliases @aliases.each do |al| orig = get_member(al[:alias][:cls], al[:alias][:owner]) al[:doc] = al[:doc] + "\n\n" + orig[:doc] al[:params] = orig[:params] al[:return] = orig[:return] end end def get_member(cls_name, member_name) cls = @classes[cls_name] return cls[:members][:method].find {|m| m[:name] == member_name } end # Creates class with name "global" and inserts all the remaining # orphans into it (but only if there are any orphans). def create_global_class Loading lib/jsduck/aliases.rb 0 → 100644 +39 −0 Original line number Diff line number Diff line module JsDuck class Aliases def initialize(relations) @relations = relations end def resolve_all @relations.each do |cls| cls.each_member do |member| if member[:alias] resolve(member) end end end end # Copy over doc/params/return from original member to alias. def resolve(al) orig = find_original(al) al[:doc] = al[:doc] + "\n\n" + orig[:doc] al[:params] = orig[:params] if orig[:params] al[:return] = orig[:return] if orig[:return] end # Given aliased member, finds the original member. # If the original also happens to be an alias, continue recursively. def find_original(al) al_def = al[:alias] orig = @relations[al_def[:cls]].get_member(al_def[:member], al_def[:type] || al[:tagname]) if orig[:alias] find_original(orig) else orig end end end end lib/jsduck/app.rb +2 −1 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ require 'jsduck/tree' require 'jsduck/tree_icons' require 'jsduck/members' require 'jsduck/relations' require 'jsduck/aliases' require 'jsduck/page' require 'jsduck/exporter' require 'jsduck/timer' Loading Loading @@ -79,6 +80,7 @@ module JsDuck parsed_files = @timer.time(:parsing) { parallel_parse(@input_files) } result = @timer.time(:aggregating) { aggregate(parsed_files) } relations = @timer.time(:aggregating) { filter_classes(result) } Aliases.new(relations).resolve_all warn_globals(relations) warn_unnamed(relations) Loading Loading @@ -124,7 +126,6 @@ module JsDuck agr.aggregate(file) end agr.classify_orphans agr.populate_aliases agr.create_global_class unless @ignore_global agr.append_ext4_event_options agr.result Loading lib/jsduck/class.rb +25 −11 Original line number Diff line number Diff line Loading @@ -10,6 +10,8 @@ module JsDuck def initialize(doc) @doc = doc @doc[:members] = Class.default_members_hash if !@doc[:members] @doc[:statics] = Class.default_members_hash if !@doc[:statics] @relations = nil end Loading Loading @@ -112,22 +114,34 @@ 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, group).each_pair do |key, member| @members_map["#{type}-#{key}"] = member @members_map[key] = member end @doc[:statics].each_key do |type| @type_map.merge!(members_hash(type, :statics)) end end end @members_map[type_name ? "#{type_name}-#{name}" : name] end @type_map[name] && @type_map[name][:tagname] # Loops through each member of the class, invoking block with each of them def each_member(&block) [:members, :statics].each do |group| @doc[group].each_value do |members| members.each(&block) end end 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 Loading
lib/jsduck/aggregator.rb +0 −18 Original line number Diff line number Diff line Loading @@ -9,7 +9,6 @@ module JsDuck @documentation = [] @classes = {} @orphans = [] @aliases = [] @current_class = nil end Loading Loading @@ -83,7 +82,6 @@ module JsDuck else add_orphan(node) end @aliases << node if node[:alias] end def add_to_class(cls, member) Loading Loading @@ -118,22 +116,6 @@ module JsDuck end end # Copy over doc/params/return from original methods to aliases. # Aliases are currently only supported for methods. def populate_aliases @aliases.each do |al| orig = get_member(al[:alias][:cls], al[:alias][:owner]) al[:doc] = al[:doc] + "\n\n" + orig[:doc] al[:params] = orig[:params] al[:return] = orig[:return] end end def get_member(cls_name, member_name) cls = @classes[cls_name] return cls[:members][:method].find {|m| m[:name] == member_name } end # Creates class with name "global" and inserts all the remaining # orphans into it (but only if there are any orphans). def create_global_class Loading
lib/jsduck/aliases.rb 0 → 100644 +39 −0 Original line number Diff line number Diff line module JsDuck class Aliases def initialize(relations) @relations = relations end def resolve_all @relations.each do |cls| cls.each_member do |member| if member[:alias] resolve(member) end end end end # Copy over doc/params/return from original member to alias. def resolve(al) orig = find_original(al) al[:doc] = al[:doc] + "\n\n" + orig[:doc] al[:params] = orig[:params] if orig[:params] al[:return] = orig[:return] if orig[:return] end # Given aliased member, finds the original member. # If the original also happens to be an alias, continue recursively. def find_original(al) al_def = al[:alias] orig = @relations[al_def[:cls]].get_member(al_def[:member], al_def[:type] || al[:tagname]) if orig[:alias] find_original(orig) else orig end end end end
lib/jsduck/app.rb +2 −1 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ require 'jsduck/tree' require 'jsduck/tree_icons' require 'jsduck/members' require 'jsduck/relations' require 'jsduck/aliases' require 'jsduck/page' require 'jsduck/exporter' require 'jsduck/timer' Loading Loading @@ -79,6 +80,7 @@ module JsDuck parsed_files = @timer.time(:parsing) { parallel_parse(@input_files) } result = @timer.time(:aggregating) { aggregate(parsed_files) } relations = @timer.time(:aggregating) { filter_classes(result) } Aliases.new(relations).resolve_all warn_globals(relations) warn_unnamed(relations) Loading Loading @@ -124,7 +126,6 @@ module JsDuck agr.aggregate(file) end agr.classify_orphans agr.populate_aliases agr.create_global_class unless @ignore_global agr.append_ext4_event_options agr.result Loading
lib/jsduck/class.rb +25 −11 Original line number Diff line number Diff line Loading @@ -10,6 +10,8 @@ module JsDuck def initialize(doc) @doc = doc @doc[:members] = Class.default_members_hash if !@doc[:members] @doc[:statics] = Class.default_members_hash if !@doc[:statics] @relations = nil end Loading Loading @@ -112,22 +114,34 @@ 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, group).each_pair do |key, member| @members_map["#{type}-#{key}"] = member @members_map[key] = member end @doc[:statics].each_key do |type| @type_map.merge!(members_hash(type, :statics)) end end end @members_map[type_name ? "#{type_name}-#{name}" : name] end @type_map[name] && @type_map[name][:tagname] # Loops through each member of the class, invoking block with each of them def each_member(&block) [:members, :statics].each do |group| @doc[group].each_value do |members| members.each(&block) end end 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