@@ -6,7 +6,7 @@ class Renderer
66rules if you create plugin and adds new token types.
77"""
88import inspect
9- from typing import Sequence
9+ from typing import Optional , Sequence
1010
1111from .common .utils import unescapeAll , escapeHtml
1212from .token import Token
@@ -151,7 +151,7 @@ def renderToken(
151151 return result
152152
153153 @staticmethod
154- def renderAttrs (token ) :
154+ def renderAttrs (token : Token ) -> str :
155155 """Render token attributes to string."""
156156 if not token .attrs :
157157 return ""
@@ -169,7 +169,9 @@ def renderAttrs(token):
169169
170170 return result
171171
172- def renderInlineAsText (self , tokens : Sequence [Token ], options , env ) -> str :
172+ def renderInlineAsText (
173+ self , tokens : Optional [Sequence [Token ]], options , env
174+ ) -> str :
173175 """Special kludge for image `alt` attributes to conform CommonMark spec.
174176
175177 Don't try to use it! Spec requires to show `alt` content with stripped markup,
@@ -192,7 +194,7 @@ def renderInlineAsText(self, tokens: Sequence[Token], options, env) -> str:
192194
193195 ###################################################
194196
195- def code_inline (self , tokens : Sequence [Token ], idx , options , env ):
197+ def code_inline (self , tokens : Sequence [Token ], idx : int , options , env ) -> str :
196198 token = tokens [idx ]
197199 return (
198200 "<code"
@@ -202,7 +204,7 @@ def code_inline(self, tokens: Sequence[Token], idx, options, env):
202204 + "</code>"
203205 )
204206
205- def code_block (self , tokens : Sequence [Token ], idx , options , env ):
207+ def code_block (self , tokens : Sequence [Token ], idx : int , options , env ) -> str :
206208 token = tokens [idx ]
207209
208210 return (
@@ -213,7 +215,7 @@ def code_block(self, tokens: Sequence[Token], idx, options, env):
213215 + "</code></pre>\n "
214216 )
215217
216- def fence (self , tokens : Sequence [Token ], idx , options , env ):
218+ def fence (self , tokens : Sequence [Token ], idx : int , options , env ) -> str :
217219 token = tokens [idx ]
218220 info = unescapeAll (token .info ).strip () if token .info else ""
219221 langName = ""
@@ -262,8 +264,9 @@ def fence(self, tokens: Sequence[Token], idx, options, env):
262264 + "</code></pre>\n "
263265 )
264266
265- def image (self , tokens : Sequence [Token ], idx , options , env ):
267+ def image (self , tokens : Sequence [Token ], idx : int , options , env ) -> str :
266268 token = tokens [idx ]
269+ assert token .attrs is not None , '"image" token\' s attrs must not be `None`'
267270
268271 # "alt" attr MUST be set, even if empty. Because it's mandatory and
269272 # should be placed on proper position for tests.
@@ -276,19 +279,19 @@ def image(self, tokens: Sequence[Token], idx, options, env):
276279
277280 return self .renderToken (tokens , idx , options , env )
278281
279- def hardbreak (self , tokens : Sequence [Token ], idx , options , * args ):
282+ def hardbreak (self , tokens : Sequence [Token ], idx : int , options , * args ) -> str :
280283 return "<br />\n " if options .xhtmlOut else "<br>\n "
281284
282- def softbreak (self , tokens : Sequence [Token ], idx , options , * args ):
285+ def softbreak (self , tokens : Sequence [Token ], idx : int , options , * args ) -> str :
283286 return (
284287 ("<br />\n " if options .xhtmlOut else "<br>\n " ) if options .breaks else "\n "
285288 )
286289
287- def text (self , tokens : Sequence [Token ], idx , * args ):
290+ def text (self , tokens : Sequence [Token ], idx : int , * args ) -> str :
288291 return escapeHtml (tokens [idx ].content )
289292
290- def html_block (self , tokens : Sequence [Token ], idx , * args ):
293+ def html_block (self , tokens : Sequence [Token ], idx : int , * args ) -> str :
291294 return tokens [idx ].content
292295
293- def html_inline (self , tokens : Sequence [Token ], idx , * args ):
296+ def html_inline (self , tokens : Sequence [Token ], idx : int , * args ) -> str :
294297 return tokens [idx ].content
0 commit comments