Commit 671ac612 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Support member type info in @alias tag.

Separated aliases resolving to a separate class.  More convenient
to do it after all classes have been converted into Class instances.
parent b41cc947
Loading
Loading
Loading
Loading
+0 −23
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,27 +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] if orig[:params]
        al[:return] = orig[:return] if orig[:return]
      end
    end

    def get_member(cls_name, member_name)
      cls = @classes[cls_name]
      [:members, :statics].each do |group|
        cls[group].each_value do |members|
          match = members.find {|m| m[:name] == member_name }
          return match if match
        end
      end
    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
+28 −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 methods to aliases.
    def resolve(al)
      al_def = al[:alias]
      orig = @relations[al_def[:cls]].get_member(al_def[:member], al_def[:type])
      al[:doc] = al[:doc] + "\n\n" + orig[:doc]
      al[:params] = orig[:params] if orig[:params]
      al[:return] = orig[:return] if orig[:return]
    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
+10 −1
Original line number Diff line number Diff line
@@ -124,7 +124,7 @@ module JsDuck
        @members_map = {}
        [:members, :statics].each do |group|
          @doc[group].each_key do |type|
            members_hash(type).each_pair do |key, member|
            members_hash(type, group).each_pair do |key, member|
              @members_map["#{type}-#{key}"] = member
              @members_map[key] = member
            end
@@ -135,6 +135,15 @@ module JsDuck
      @members_map[type_name ? "#{type_name}-#{name}" : name]
    end

    # 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
    # package_name and short_name
    def full_name
+6 −2
Original line number Diff line number Diff line
@@ -273,7 +273,7 @@ module JsDuck
      skip_white
    end

    # matches @alias class.name#member
    # matches @alias class.name#type-member
    def at_alias
      match(/@alias/)
      add_tag(:alias)
@@ -282,7 +282,11 @@ module JsDuck
        @current_tag[:cls] = ident_chain
        if look(/#\w/)
          @input.scan(/#/)
          @current_tag[:owner] = ident
          if look(/\w+-\w+/)
            @current_tag[:type] = ident
            @input.scan(/-/)
          end
          @current_tag[:member] = ident
        end
      end
      skip_white
Loading