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

Show warning for alternate class name collision.

parent 9fa3267b
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
require 'jsduck/class'
require 'jsduck/accessors'
require 'jsduck/logger'

module JsDuck

@@ -38,7 +39,12 @@ module JsDuck
    # When class exists, merge it with class node.
    # Otherwise add as new class.
    def add_class(cls)
      old_cls = @classes[cls[:name]] || @alt_names[cls[:name]]
      old_cls = @classes[cls[:name]]
      if !old_cls && @alt_names[cls[:name]]
        old_cls = @alt_names[cls[:name]]
        warn_alt_name(cls[:name])
      end

      if old_cls
        merge_classes(old_cls, cls)
        @current_class = old_cls
@@ -50,7 +56,8 @@ module JsDuck
        # Register all alternate names of class for lookup too
        cls[:alternateClassNames].each do |altname|
          if cls[:name] == altname
            # A buggy documentation, ignore.
            # A buggy documentation, warn.
            warn_alt_name(altname)
          else
            @alt_names[altname] = cls
            # When an alternate name has been used as a class name before,
@@ -60,6 +67,7 @@ module JsDuck
              merge_classes(cls, @classes[altname])
              @documentation.delete(@classes[altname])
              @classes.delete(altname)
              warn_alt_name(altname)
            end
          end
        end
@@ -68,6 +76,10 @@ module JsDuck
      end
    end

    def warn_alt_name(name)
      Logger.instance.warn(:alt_name, "Name #{name} used as both classname and alternate classname")
    end

    # Merges new class-doc into old one.
    def merge_classes(old, new)
      # Merge booleans
+1 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ module JsDuck
        [:extend, "@extend or @mixin referring to unknown class"],
        [:link, "{@link} to unknown class or member"],

        [:alt_name, "Name used as both classname and alternate classname"],
        [:name_missing, "Member or parameter has no name"],
        [:dup_param, "Method has two parameters with same name"],
        [:req_after_opt, "Required parameter comes after optional"],
+4 −0
Original line number Diff line number Diff line
@@ -3,6 +3,10 @@ require "jsduck/source_file"

describe JsDuck::Aggregator do

  before do
    JsDuck::Logger.instance.set_warning(:alt_name, false)
  end

  def parse(string)
    agr = JsDuck::Aggregator.new
    agr.aggregate(JsDuck::SourceFile.new(string))