44
55from docutils import nodes
66
7+ from sphinx_codeautolink .warn import logger , warn_type
8+
79from .directive import DeferredExamples
810
911
@@ -56,10 +58,15 @@ class CodeRefsVisitor(nodes.SparseNodeVisitor):
5658 """Replace :class:`DeferredCodeReferences` with table of concrete references."""
5759
5860 def __init__ (
59- self , * args , code_refs : dict [str , list [CodeExample ]], ** kwargs
61+ self ,
62+ * args ,
63+ code_refs : dict [str , list [CodeExample ]],
64+ warn_no_backreference : bool = False ,
65+ ** kwargs ,
6066 ) -> None :
6167 super ().__init__ (* args , ** kwargs )
6268 self .code_refs = code_refs
69+ self .warn_no_backreference = warn_no_backreference
6370
6471 def unknown_departure (self , node ) -> None :
6572 """Ignore unknown nodes."""
@@ -79,6 +86,11 @@ def unknown_visit(self, node) -> None:
7986 items = sorted (set (items ))
8087
8188 if not items :
89+ if self .warn_no_backreference :
90+ msg = f"No backreference for: '{ node .ref } '"
91+ logger .warning (
92+ msg , type = warn_type , subtype = "no_backref" , location = node
93+ )
8294 # Remove surrounding paragraph too
8395 node .parent .parent .remove (node .parent )
8496 return
0 commit comments