Commit ae1690b3 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Merge branch 'ext4-theme' into alt-tabs

parents 64ab3783 9698facd
Loading
Loading
Loading
Loading
+0 −18
Original line number Diff line number Diff line
@@ -9,7 +9,6 @@ module JsDuck
      @documentation = []
      @classes = {}
      @orphans = []
      @aliases = []
      @current_class = nil
    end

@@ -83,7 +82,6 @@ module JsDuck
      else
        add_orphan(node)
      end
      @aliases << node if node[:alias]
    end

    def add_to_class(cls, member)
@@ -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

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
+2 −1
Original line number Diff line number Diff line
@@ -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'
@@ -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)

@@ -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
+25 −11
Original line number Diff line number Diff line
@@ -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

@@ -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
+10 −8
Original line number Diff line number Diff line
@@ -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

@@ -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
@@ -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
@@ -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