From e26e01aae500d4d848bcd7ab2e5f02349587536a Mon Sep 17 00:00:00 2001 From: Rene Saarsoo Date: Mon, 5 Dec 2011 18:10:48 +0200 Subject: [PATCH] Initial version of :link_auto warnings. --- lib/jsduck/doc_formatter.rb | 36 +++++++++++++++++++++++++++--------- lib/jsduck/logger.rb | 1 + 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/lib/jsduck/doc_formatter.rb b/lib/jsduck/doc_formatter.rb index 3e5bcb50..df9399b1 100644 --- a/lib/jsduck/doc_formatter.rb +++ b/lib/jsduck/doc_formatter.rb @@ -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 diff --git a/lib/jsduck/logger.rb b/lib/jsduck/logger.rb index cbd76293..6833e3c4 100644 --- a/lib/jsduck/logger.rb +++ b/lib/jsduck/logger.rb @@ -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"], -- GitLab