Skip to content

Commit 26a6974

Browse files
committed
feat: add more type hints
1 parent f0fd85b commit 26a6974

File tree

7 files changed

+34
-30
lines changed

7 files changed

+34
-30
lines changed

docs/api.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Here are the list of API reference; it might be helpful for developers.
88
Basic
99
-----
1010

11-
.. function:: html(text)
11+
.. function:: html(text: str)
1212

1313
:param text: markdown formatted text
1414

src/mistune/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from .plugins import import_plugin
1818

1919

20-
def create_markdown(escape=True, hard_wrap=False, renderer='html', plugins=None):
20+
def create_markdown(escape: bool=True, hard_wrap: bool=False, renderer='html', plugins=None) -> Markdown:
2121
"""Create a Markdown instance based on the given condition.
2222
2323
:param escape: Boolean. If using html renderer, escape html.
@@ -43,7 +43,7 @@ def create_markdown(escape=True, hard_wrap=False, renderer='html', plugins=None)
4343
return Markdown(renderer=renderer, inline=inline, plugins=plugins)
4444

4545

46-
html = create_markdown(
46+
html: Markdown = create_markdown(
4747
escape=False,
4848
plugins=['strikethrough', 'footnotes', 'table', 'speedup']
4949
)
@@ -52,7 +52,7 @@ def create_markdown(escape=True, hard_wrap=False, renderer='html', plugins=None)
5252
__cached_parsers = {}
5353

5454

55-
def markdown(text, escape=True, renderer='html', plugins=None):
55+
def markdown(text, escape=True, renderer='html', plugins=None) -> str:
5656
key = (escape, renderer, plugins)
5757
if key in __cached_parsers:
5858
return __cached_parsers[key](text)

src/mistune/core.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import re
2+
from typing import Dict, Any
23

34
_LINE_END = re.compile(r'\n|$')
45

@@ -23,35 +24,35 @@ def __init__(self, parent=None):
2324
else:
2425
self.env = {'ref_links': {}}
2526

26-
def child_state(self, src):
27+
def child_state(self, src: str):
2728
child = self.__class__(self)
2829
child.process(src)
2930
return child
3031

31-
def process(self, src):
32+
def process(self, src: str):
3233
self.src = src
3334
self.cursor_max = len(src)
3435

3536
def find_line_end(self):
3637
m = _LINE_END.search(self.src, self.cursor)
3738
return m.end()
3839

39-
def get_text(self, end_pos):
40+
def get_text(self, end_pos: int):
4041
return self.src[self.cursor:end_pos]
4142

4243
def last_token(self):
4344
if self.tokens:
4445
return self.tokens[-1]
4546

46-
def prepend_token(self, token):
47+
def prepend_token(self, token: Dict[str, Any]):
4748
"""Insert token before the last token."""
4849
self.tokens.insert(len(self.tokens) - 1, token)
4950

50-
def append_token(self, token):
51+
def append_token(self, token: Dict[str, Any]):
5152
"""Add token to the end of token list."""
5253
self.tokens.append(token)
5354

54-
def add_paragraph(self, text):
55+
def add_paragraph(self, text: str):
5556
last_token = self.last_token()
5657
if last_token and last_token['type'] == 'paragraph':
5758
last_token['text'] += text
@@ -76,7 +77,7 @@ def depth(self):
7677

7778
class InlineState:
7879
"""The state to save inline parser's tokens."""
79-
def __init__(self, env):
80+
def __init__(self, env: Dict[str, Any]):
8081
self.env = env
8182
self.src = ''
8283
self.tokens = []
@@ -85,11 +86,11 @@ def __init__(self, env):
8586
self.in_emphasis = False
8687
self.in_strong = False
8788

88-
def prepend_token(self, token):
89+
def prepend_token(self, token: Dict[str, Any]):
8990
"""Insert token before the last token."""
9091
self.tokens.insert(len(self.tokens) - 1, token)
9192

92-
def append_token(self, token):
93+
def append_token(self, token: Dict[str, Any]):
9394
"""Add token to the end of token list."""
9495
self.tokens.append(token)
9596

@@ -133,7 +134,7 @@ def compile_sc(self, rules=None):
133134
self.__sc[key] = sc
134135
return sc
135136

136-
def register(self, name, pattern, func, before=None):
137+
def register(self, name: str, pattern, func, before=None):
137138
"""Register a new rule to parse the token. This method is usually used to
138139
create a new plugin.
139140
@@ -173,7 +174,7 @@ class BaseRenderer(object):
173174
def __init__(self):
174175
self.__methods = {}
175176

176-
def register(self, name, method):
177+
def register(self, name: str, method):
177178
"""Register a render method for the named token. For example::
178179
179180
def render_wiki(renderer, key, title):

src/mistune/inline_parser.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class InlineParser(Parser):
9393
'linebreak',
9494
)
9595

96-
def __init__(self, hard_wrap=False):
96+
def __init__(self, hard_wrap: bool=False):
9797
super(InlineParser, self).__init__()
9898

9999
self.hard_wrap = hard_wrap
@@ -283,7 +283,7 @@ def parse_codespan(self, m: re.Match, state: InlineState) -> int:
283283
marker = m.group(0)
284284
# require same marker with same length at end
285285

286-
pattern = re.compile(r'(.*?(?:[^`]))' + marker + r'(?!`)', re.S)
286+
pattern = re.compile(r'(.*?[^`])' + marker + r'(?!`)', re.S)
287287

288288
pos = m.end()
289289
m = pattern.match(state.src, pos)

src/mistune/markdown.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,19 @@ class Markdown:
1818
:param inline: inline level syntax parser
1919
:param plugins: mistune plugins to use
2020
"""
21-
def __init__(self, renderer=None, block=None, inline=None, plugins=None):
21+
def __init__(self, renderer=None,
22+
block: Optional[BlockParser]=None,
23+
inline: Optional[InlineParser]=None,
24+
plugins=None):
2225
if block is None:
2326
block = BlockParser()
2427

2528
if inline is None:
2629
inline = InlineParser()
2730

2831
self.renderer = renderer
29-
self.block = block
30-
self.inline = inline
32+
self.block: BlockParser = block
33+
self.inline: InlineParser = inline
3134
self.before_parse_hooks = []
3235
self.before_render_hooks = []
3336
self.after_render_hooks = []

src/mistune/renderers/markdown.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from ..core import BaseRenderer, BlockState
66
from ..util import strip_end
77

8-
fenced_re = re.compile(r'^(?:`|~)+', re.M)
8+
fenced_re = re.compile(r'^[`~]+', re.M)
99

1010

1111
class MarkdownRenderer(BaseRenderer):

src/mistune/util.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@
66
_expand_tab_re = re.compile(r'^( {0,3})\t', flags=re.M)
77

88

9-
def expand_leading_tab(text, width=4):
9+
def expand_leading_tab(text: str, width=4):
1010
def repl(m):
1111
s = m.group(1)
1212
return s + ' ' * (width - len(s))
1313
return _expand_tab_re.sub(repl, text)
1414

1515

16-
def expand_tab(text, space=' '):
16+
def expand_tab(text: str, space: str=' '):
1717
repl = r'\1' + space
1818
return _expand_tab_re.sub(repl, text)
1919

2020

21-
def escape(s, quote=True):
21+
def escape(s: str, quote: bool=True):
2222
"""Escape characters of ``&<>``. If quote=True, ``"`` will be
2323
converted to ``&quote;``."""
2424
s = s.replace("&", "&amp;")
@@ -29,7 +29,7 @@ def escape(s, quote=True):
2929
return s
3030

3131

32-
def escape_url(link):
32+
def escape_url(link: str):
3333
"""Escape URL for safety."""
3434
safe = (
3535
':/?#@' # gen-delims - '[]' (rfc3986)
@@ -39,12 +39,12 @@ def escape_url(link):
3939
return escape(quote(unescape(link), safe=safe))
4040

4141

42-
def safe_entity(s):
42+
def safe_entity(s: str):
4343
"""Escape characters for safety."""
4444
return escape(unescape(s))
4545

4646

47-
def unikey(s):
47+
def unikey(s: str):
4848
"""Generate a unique key for links and footnotes."""
4949
key = ' '.join(s.split()).strip()
5050
return key.lower().upper()
@@ -57,7 +57,7 @@ def unikey(s):
5757
)
5858

5959

60-
def unescape(s):
60+
def unescape(s: str):
6161
"""
6262
Copy from `html.unescape`, but `_charref` is different. CommonMark
6363
does not accept entity references without a trailing semicolon
@@ -70,12 +70,12 @@ def unescape(s):
7070
_striptags_re = re.compile(r'(<!--.*?-->|<[^>]*>)')
7171

7272

73-
def striptags(s):
73+
def striptags(s: str):
7474
return _striptags_re.sub('', s)
7575

7676

7777
_strip_end_re = re.compile(r'\n\s+$')
7878

7979

80-
def strip_end(src):
80+
def strip_end(src: str):
8181
return _strip_end_re.sub('\n', src)

0 commit comments

Comments
 (0)