Commit 4f746411 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Move :default merging into @default Tag class.

Introduce new Tag class just of this merging.
parent 9d09428e
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -56,8 +56,6 @@ module JsDuck
        tag.merge(h, docs, code)
      end

      h[:default] = merge_if_code_matches(:default, docs, code)

      do_merge(h, docs, code)
    end

+39 −0
Original line number Diff line number Diff line
require "jsduck/tag/tag"

module JsDuck::Tag
  # There is no @default tag.
  #
  # Default values are detected from syntax like this:
  #
  #     @cfg [blah=somedefault]
  #
  # This tag class exists to take care of the merging of :default
  # fields.
  class Default < Tag
    def initialize
      @merge_context = :property_like
    end

    def merge(h, docs, code)
      h[:default] = merge_if_code_matches(:default, docs, code)
    end

    private

    def merge_if_code_matches(key, docs, code, default=nil)
      if docs[key]
        docs[key]
      elsif code[key] && code_matches_doc?(docs, code)
        code[key]
      else
        default
      end
    end

    # True if the name detected from code matches with explicitly documented name.
    # Also true when no explicit name documented.
    def code_matches_doc?(docs, code)
      return docs[:name] == nil || docs[:name] == code[:name]
    end
  end
end