@@ -148,17 +148,21 @@ def _node_error(document, node, msg):
148148 err .add_backref (pbid )
149149 node .replace_self (pb )
150150
151+ def _format_errors (src , * errs ):
152+ msg = "\n " .join (map (str , errs ))
153+ msg = "\n " + core .indent (msg , " " ) if len (errs ) > 1 else " " + msg
154+ if isinstance (src , nodes .Node ):
155+ src = getattr (src , "text" , src .rawsource )
156+ return "In {}:{}" .format (src , msg )
157+
151158def _try (document , fn , node , * args , ** kwargs ):
152159 try :
153160 return fn (node , * args , ** kwargs )
154161 except transforms .CollectedErrors as e :
155162 errs = e .args
156163 except ValueError as e :
157164 errs = [e ]
158- msg = "\n " .join (map (str , errs ))
159- msg = "\n " + core .indent (msg , " " ) if len (errs ) > 1 else " " + msg
160- msg = "In {}:{}" .format (getattr (node , "text" , node .rawsource ), msg )
161- _node_error (document , node , msg )
165+ _node_error (document , node , _format_errors (node , * errs ))
162166 return None
163167
164168# LATER: dataclass
@@ -203,18 +207,20 @@ class Config:
203207 def __init__ (self , document ):
204208 self .tokens = {}
205209 self .sertop_args = []
206- self .read_docinfo (document )
210+ self .document = document
211+ self .read_docinfo ()
207212
208- def read_docinfo (self , document ):
213+ def read_docinfo (self ):
209214 # Sphinx doesn't translate ``field_list`` to ``docinfo``
210215 selector = lambda n : isinstance (n , (nodes .field_list , nodes .docinfo ))
211- for di in document .traverse (selector ):
216+ for di in self . document .traverse (selector ):
212217 for field in di .traverse (nodes .field ):
213218 name , body = field .children
214219 field .text = "`:{}:`" .format (name .rawsource )
215220 field .rawsource = ":{}: {}" .format (name .rawsource , body .rawsource )
216- _try (document , self .parse_docinfo_field , field , name .rawsource , body .rawsource )
217- for di in document .traverse (selector ):
221+ _try (self .document , self .parse_docinfo_field ,
222+ field , name .rawsource , body .rawsource )
223+ for di in self .document .traverse (selector ):
218224 errors = []
219225 for field in di .traverse (nodes .problematic ):
220226 errors .append (field )
@@ -226,7 +232,13 @@ def read_docinfo(self, document):
226232
227233 def parse_docinfo_field (self , node , name , body ):
228234 if name .startswith ("alectryon/pygments/" ):
229- token = name [len ("alectryon/pygments/" ):]
235+ name = name [len ("alectryon/pygments/" ):]
236+ if "/" not in name :
237+ name = "coq/" + name # legacy syntax doesn't have coq/
238+ MSG = "Missing language name (did you mean `:alectryon/pygments/{}:`?)."
239+ msg = _format_errors (node , MSG .format (name ))
240+ self .document .reporter .warning (msg , base_node = node , line = node .line )
241+ lang , token = name .split ("/" , maxsplit = 1 )
230242 resolve_token (token ) # Check that this is a valid token
231243 # LATER: It would be nice to support multi-words tokens. Using
232244 # ``shlex.split(body)`` instead of ``body.split()`` would work find
@@ -834,7 +846,7 @@ def coq_code_role(role, rawtext, text, lineno, inliner,
834846]
835847
836848def _role_error (inliner , rawtext , msg , lineno ):
837- msg = "In {}: {}" . format (rawtext , msg )
849+ msg = _format_errors (rawtext , msg )
838850 err = inliner .reporter .error (msg , line = lineno )
839851 return [inliner .problematic (rawtext , rawtext , err )], [err ]
840852
0 commit comments