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

Add Tag#repeatable to multiple times occuring tags.

Most tags don't make sense to be used multiple times - like all
boolean tags.  So I introduce a #repeatable field which must
be set to true for all tags that can be used several times
within one doc-comment.

When tag not marked as #repeatable, generate a warning
of type :tag_repeated.
parent 75ba9ce4
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ module JsDuck
      def parse(input, filename="", linenr = 0)
        @position = {:filename => filename, :linenr => linenr}
        @tags = []
        @non_repeatable_tags = {}
        @input = StringScanner.new(Doc::Comment.purify(input))

        parse_loop
@@ -92,6 +93,13 @@ module JsDuck
            tags.each {|t| add_tag(t) }
          end

          if !tag.repeatable
            if @non_repeatable_tags[name]
              Logger.warn(:tag_repeated, "@#{name} tag can occur only once per doc-comment", @position)
            end
            @non_repeatable_tags[name] = true
          end

          skip_white
        else
          Logger.warn(:tag, "Unsupported tag: @#{name}", @position)
+1 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ module JsDuck
        [:inheritdoc, "@inheritdoc referring to unknown class or member"],
        [:extend, "@extend/mixin/requires/uses referring to unknown class"],
        [:tag, "Use of unsupported @tag"],
        [:tag_repeated, "An @tag used multiple times, but only once allowed"],
        [:link, "{@link} to unknown class or member"],
        [:link_ambiguous, "{@link} is ambiguous"],
        [:link_auto, "Auto-detected link to unknown class or member"],
+1 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ module JsDuck::Tag
    def initialize
      @pattern = "alias"
      @tagname = :aliases
      @repeatable = true
      @ext_define_pattern = "alias"
      @ext_define_default = {:aliases => []}
      @merge_context = :class
+1 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ module JsDuck::Tag
    def initialize
      @pattern = ["alternateClassName", "alternateClassNames"]
      @tagname = :alternateClassNames
      @repeatable = true
      @ext_define_pattern = "alternateClassName"
      @ext_define_default = {:alternateClassNames => []}
      @merge_context = :class
+1 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ module JsDuck::Tag
    def initialize
      @pattern = "aside"
      @tagname = :aside
      @repeatable = true
      @html_position = POS_ASIDE
    end

Loading