Commit 478b7db3 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Render @fires events list as links.

Log warning when unknown event name is used.
parent 37c4f438
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ module JsDuck
        [:type_syntax, "Syntax error in {type definition}"],
        [:type_name, "Unknown type referenced in {type definition}"],
        [:enum, "Enum with invalid values or no values at all"],
        [:fires, "@fires references unknown event"],

        [:image, "{@img} referring to missing file"],
        [:image_unused, "An image exists in --images dir that's not used"],
+16 −2
Original line number Diff line number Diff line
require "jsduck/tag/tag"
require "jsduck/logger"

module JsDuck::Tag
  class Fires < Tag
@@ -24,14 +25,27 @@ module JsDuck::Tag
    end

    def process_doc(h, tags, pos)
      h[:fires] = tags.map {|t| t[:events] }.flatten
      h[:fires] = tags.map {|t| t[:events] }.flatten.map {|name| {:name => name} }
    end

    def format(m, formatter)
      cls = formatter.relations[m[:owner]]

      m[:fires].each do |e|
        if cls.find_members({:tagname => :event, :name => e[:name]}).length > 0
          e[:link] = formatter.link(m[:owner], e[:name], e[:name], :event)
        else
          JsDuck::Logger.warn(:fires, "@fires references unknown event: #{e[:name]}", m[:files][0])
          e[:link] = e[:name]
        end
      end
    end

    def to_html(m)
      return [
        "<h3 class='pa'>Fires</h3>",
        "<ul>",
          m[:fires].map {|f| "<li>#{f}</li>" },
          m[:fires].map {|e| "<li>#{e[:link]}</li>" },
        "</ul>",
      ]
    end
+13 −13
Original line number Diff line number Diff line
@@ -5,13 +5,13 @@ describe JsDuck::Aggregator do
    Helper::MiniParser.parse(string)
  end

  def parse_member(string)
    parse(string)["global"][:members][0]
  def parse_fires(string)
    parse(string)["global"][:members][0][:fires].map {|e| e[:name] }
  end

  describe "@fires with single event" do
    before do
      @doc = parse_member(<<-EOS)
      @fires = parse_fires(<<-EOS)
        /**
         * Some function
         * @fires click
@@ -21,17 +21,17 @@ describe JsDuck::Aggregator do
    end

    it "detects one fired event" do
      @doc[:fires].length.should == 1
      @fires.length.should == 1
    end

    it "detects event name that's fired" do
      @doc[:fires][0].should == "click"
      @fires[0].should == "click"
    end
  end

  describe "@fires with multiple events" do
    before do
      @doc = parse_member(<<-EOS)
      @fires = parse_fires(<<-EOS)
        /**
         * @fires click dblclick
         */
@@ -40,18 +40,18 @@ describe JsDuck::Aggregator do
    end

    it "detects two events" do
      @doc[:fires].length.should == 2
      @fires.length.should == 2
    end

    it "detects event names" do
      @doc[:fires][0].should == "click"
      @doc[:fires][1].should == "dblclick"
      @fires[0].should == "click"
      @fires[1].should == "dblclick"
    end
  end

  describe "multiple @fires tags" do
    before do
      @doc = parse_member(<<-EOS)
      @fires = parse_fires(<<-EOS)
        /**
         * @fires click
         * @fires dblclick
@@ -61,12 +61,12 @@ describe JsDuck::Aggregator do
    end

    it "detects two events" do
      @doc[:fires].length.should == 2
      @fires.length.should == 2
    end

    it "detects event names" do
      @doc[:fires][0].should == "click"
      @doc[:fires][1].should == "dblclick"
      @fires[0].should == "click"
      @fires[1].should == "dblclick"
    end
  end