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

Initial version of :link_auto warnings.

parent 7cacce44
Loading
Loading
Loading
Loading
+27 −9
Original line number Diff line number Diff line
@@ -217,18 +217,36 @@ module JsDuck
      member_re = "(?:#([A-Za-z0-9]+))"

      input.gsub(/\b#{cls_re}#{member_re}?\b|#{member_re}\b/m) do
        cls = $1
        member = $2 || $3

        if cls && @relations[cls] && (member ? get_matching_member(cls, member) : cls =~ /\./)
          label = member ? cls+"."+member : cls
          link(cls, member, label)
        elsif !cls && member && get_matching_member(@class_context, member)
          link(@class_context, member, member)
        replace_magic_link($1, $2 || $3)
      end
    end

    def replace_magic_link(cls, member)
      if cls && member
        if @relations[cls] && get_matching_member(cls, member)
          return link(cls, member, cls+"."+member)
        else
          warn_magic_link("#{cls}##{member} links to non-existing " + (@relations[cls] ? "member" : "class"))
        end
      elsif cls && cls =~ /\./
        if @relations[cls]
          return link(cls, nil, cls)
        else
          "#{cls}#{member ? '#' : ''}#{member}"
          warn_magic_link("#{cls} links to non-existing class")
        end
      elsif !cls && member
        if get_matching_member(@class_context, member)
          return link(@class_context, member, member)
        else
          warn_magic_link("##{member} links to non-existing member")
        end
      end

      return "#{cls}#{member ? '#' : ''}#{member}"
    end

    def warn_magic_link(msg)
      Logger.instance.warn(:link_auto, msg, @doc_context[:filename], @doc_context[:linenr])
    end

    # applies the image template
+1 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ module JsDuck
        [:link, "{@link} to unknown class or member"],
        [:link_private, "{@link} to private member"],
        [:link_ambiguous, "{@link} is ambiguous"],
        [:link_auto, "Auto-detected link to unknown class or member"],

        [:alt_name, "Name used as both classname and alternate classname"],
        [:name_missing, "Member or parameter has no name"],