mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Fix mypy violations
This commit is contained in:
@@ -423,7 +423,7 @@ class StandaloneHTMLBuilder(Builder):
|
||||
if filename and '://' not in filename:
|
||||
filename = posixpath.join('_static', filename)
|
||||
|
||||
self.script_files.append(JavaScript(filename, **kwargs)) # type: ignore
|
||||
self.script_files.append(JavaScript(filename, **kwargs))
|
||||
|
||||
@property
|
||||
def default_translator_class(self):
|
||||
|
||||
@@ -213,7 +213,7 @@ class QtHelpBuilder(StandaloneHTMLBuilder):
|
||||
|
||||
def keyword_item(self, name, ref):
|
||||
# type: (unicode, Any) -> unicode
|
||||
matchobj = _idpattern.match(name) # type: ignore
|
||||
matchobj = _idpattern.match(name)
|
||||
if matchobj:
|
||||
groupdict = matchobj.groupdict()
|
||||
shortname = groupdict['title']
|
||||
|
||||
@@ -507,7 +507,7 @@ def valid_dir(d):
|
||||
if not path.isdir(dir):
|
||||
return False
|
||||
|
||||
if set(['Makefile', 'make.bat']) & set(os.listdir(dir)): # type: ignore
|
||||
if set(['Makefile', 'make.bat']) & set(os.listdir(dir)):
|
||||
return False
|
||||
|
||||
if d['sep']:
|
||||
@@ -523,7 +523,7 @@ def valid_dir(d):
|
||||
d['dot'] + 'templates',
|
||||
d['master'] + d['suffix'],
|
||||
]
|
||||
if set(reserved_names) & set(os.listdir(dir)): # type: ignore
|
||||
if set(reserved_names) & set(os.listdir(dir)):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
@@ -432,7 +432,7 @@ def correct_copyright_year(app, config):
|
||||
for k in ('copyright', 'epub_copyright'):
|
||||
if k in config:
|
||||
replace = r'\g<1>%s' % format_date('%Y')
|
||||
config[k] = copyright_year_re.sub(replace, config[k]) # type: ignore
|
||||
config[k] = copyright_year_re.sub(replace, config[k])
|
||||
|
||||
|
||||
def check_confval_types(app, config):
|
||||
|
||||
@@ -83,7 +83,7 @@ class CObject(ObjectDescription):
|
||||
def _parse_type(self, node, ctype):
|
||||
# type: (nodes.Node, unicode) -> None
|
||||
# add cross-ref nodes for all words
|
||||
for part in [_f for _f in wsplit_re.split(ctype) if _f]: # type: ignore
|
||||
for part in [_f for _f in wsplit_re.split(ctype) if _f]:
|
||||
tnode = nodes.Text(part, part)
|
||||
if part[0] in string.ascii_letters + '_' and \
|
||||
part not in self.stopwords:
|
||||
@@ -98,10 +98,10 @@ class CObject(ObjectDescription):
|
||||
def _parse_arglist(self, arglist):
|
||||
# type: (unicode) -> Iterator[unicode]
|
||||
while True:
|
||||
m = c_funcptr_arg_sig_re.match(arglist) # type: ignore
|
||||
m = c_funcptr_arg_sig_re.match(arglist)
|
||||
if m:
|
||||
yield m.group()
|
||||
arglist = c_funcptr_arg_sig_re.sub('', arglist) # type: ignore
|
||||
arglist = c_funcptr_arg_sig_re.sub('', arglist)
|
||||
if ',' in arglist:
|
||||
_, arglist = arglist.split(',', 1)
|
||||
else:
|
||||
@@ -118,9 +118,9 @@ class CObject(ObjectDescription):
|
||||
# type: (unicode, addnodes.desc_signature) -> unicode
|
||||
"""Transform a C signature into RST nodes."""
|
||||
# first try the function pointer signature regex, it's more specific
|
||||
m = c_funcptr_sig_re.match(sig) # type: ignore
|
||||
m = c_funcptr_sig_re.match(sig)
|
||||
if m is None:
|
||||
m = c_sig_re.match(sig) # type: ignore
|
||||
m = c_sig_re.match(sig)
|
||||
if m is None:
|
||||
raise ValueError('no match')
|
||||
rettype, name, arglist, const = m.groups()
|
||||
@@ -162,7 +162,7 @@ class CObject(ObjectDescription):
|
||||
arg = arg.strip()
|
||||
param = addnodes.desc_parameter('', '', noemph=True)
|
||||
try:
|
||||
m = c_funcptr_arg_sig_re.match(arg) # type: ignore
|
||||
m = c_funcptr_arg_sig_re.match(arg)
|
||||
if m:
|
||||
self._parse_type(param, m.group(1) + '(')
|
||||
param += nodes.emphasis(m.group(2), m.group(2))
|
||||
|
||||
@@ -158,7 +158,7 @@ class PyXrefMixin(object):
|
||||
if split_contnode:
|
||||
contnode = nodes.Text(sub_target)
|
||||
|
||||
if delims_re.match(sub_target): # type: ignore
|
||||
if delims_re.match(sub_target):
|
||||
results.append(contnode or innernode(sub_target, sub_target))
|
||||
else:
|
||||
results.append(self.make_xref(rolename, domain, sub_target,
|
||||
@@ -253,7 +253,7 @@ class PyObject(ObjectDescription):
|
||||
* it is stripped from the displayed name if present
|
||||
* it is added to the full name (return value) if not present
|
||||
"""
|
||||
m = py_sig_re.match(sig) # type: ignore
|
||||
m = py_sig_re.match(sig)
|
||||
if m is None:
|
||||
raise ValueError
|
||||
name_prefix, name, arglist, retann = m.groups()
|
||||
|
||||
@@ -79,7 +79,7 @@ def parse_directive(d):
|
||||
if not dir.startswith('.'):
|
||||
# Assume it is a directive without syntax
|
||||
return (dir, '')
|
||||
m = dir_sig_re.match(dir) # type: ignore
|
||||
m = dir_sig_re.match(dir)
|
||||
if not m:
|
||||
return (dir, '')
|
||||
parsed_dir, parsed_args = m.groups()
|
||||
|
||||
@@ -156,10 +156,10 @@ class Cmdoption(ObjectDescription):
|
||||
# type: (unicode, addnodes.desc_signature) -> unicode
|
||||
"""Transform an option description into RST nodes."""
|
||||
count = 0
|
||||
firstname = ''
|
||||
firstname = '' # type: unicode
|
||||
for potential_option in sig.split(', '):
|
||||
potential_option = potential_option.strip()
|
||||
m = option_desc_re.match(potential_option) # type: ignore
|
||||
m = option_desc_re.match(potential_option)
|
||||
if not m:
|
||||
logger.warning(__('Malformed option description %r, should '
|
||||
'look like "opt", "-opt args", "--opt args", '
|
||||
@@ -388,7 +388,7 @@ def token_xrefs(text):
|
||||
# type: (unicode) -> List[nodes.Node]
|
||||
retnodes = []
|
||||
pos = 0
|
||||
for m in token_re.finditer(text): # type: ignore
|
||||
for m in token_re.finditer(text):
|
||||
if m.start() > pos:
|
||||
txt = text[pos:m.start()]
|
||||
retnodes.append(nodes.Text(txt, txt))
|
||||
|
||||
@@ -354,7 +354,7 @@ class Documenter(object):
|
||||
# an autogenerated one
|
||||
try:
|
||||
explicit_modname, path, base, args, retann = \
|
||||
py_ext_sig_re.match(self.name).groups() # type: ignore
|
||||
py_ext_sig_re.match(self.name).groups()
|
||||
except AttributeError:
|
||||
logger.warning(__('invalid signature for auto%s (%r)') % (self.objtype, self.name))
|
||||
return False
|
||||
@@ -367,7 +367,7 @@ class Documenter(object):
|
||||
modname = None
|
||||
parents = []
|
||||
|
||||
self.modname, self.objpath = self.resolve_name(modname, parents, path, base)
|
||||
self.modname, self.objpath = self.resolve_name(modname, parents, path, base) # type: ignore # NOQA
|
||||
|
||||
if not self.modname:
|
||||
return False
|
||||
@@ -981,7 +981,7 @@ class DocstringSignatureMixin(object):
|
||||
if not doclines:
|
||||
continue
|
||||
# match first line of docstring against signature RE
|
||||
match = py_ext_sig_re.match(doclines[0]) # type: ignore
|
||||
match = py_ext_sig_re.match(doclines[0])
|
||||
if not match:
|
||||
continue
|
||||
exmod, path, base, args, retann = match.groups()
|
||||
@@ -998,7 +998,7 @@ class DocstringSignatureMixin(object):
|
||||
result = args, retann
|
||||
# don't look any further
|
||||
break
|
||||
return result
|
||||
return result # type: ignore
|
||||
|
||||
def get_doc(self, encoding=None, ignore=1):
|
||||
# type: (unicode, int) -> List[List[unicode]]
|
||||
|
||||
@@ -435,7 +435,7 @@ def mangle_signature(sig, max_chars=30):
|
||||
|
||||
opt_re = re.compile(r"^(.*, |)([a-zA-Z0-9_*]+)=")
|
||||
while s:
|
||||
m = opt_re.search(s) # type: ignore
|
||||
m = opt_re.search(s)
|
||||
if not m:
|
||||
# The rest are arguments
|
||||
args = s.split(', ')
|
||||
@@ -493,7 +493,7 @@ def extract_summary(doc, document):
|
||||
summary = doc[0].strip()
|
||||
else:
|
||||
# Try to find the "first sentence", which may span multiple lines
|
||||
sentences = periods_re.split(" ".join(doc)) # type: ignore
|
||||
sentences = periods_re.split(" ".join(doc))
|
||||
if len(sentences) == 1:
|
||||
summary = sentences[0].strip()
|
||||
else:
|
||||
|
||||
@@ -303,11 +303,11 @@ def find_autosummary_in_lines(lines, module=None, filename=None):
|
||||
template = None
|
||||
current_module = module
|
||||
in_autosummary = False
|
||||
base_indent = ""
|
||||
base_indent = "" # type: unicode
|
||||
|
||||
for line in lines:
|
||||
if in_autosummary:
|
||||
m = toctree_arg_re.match(line) # type: ignore
|
||||
m = toctree_arg_re.match(line)
|
||||
if m:
|
||||
toctree = m.group(1)
|
||||
if filename:
|
||||
@@ -315,7 +315,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None):
|
||||
toctree)
|
||||
continue
|
||||
|
||||
m = template_arg_re.match(line) # type: ignore
|
||||
m = template_arg_re.match(line)
|
||||
if m:
|
||||
template = m.group(1).strip()
|
||||
continue
|
||||
@@ -323,7 +323,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None):
|
||||
if line.strip().startswith(':'):
|
||||
continue # skip options
|
||||
|
||||
m = autosummary_item_re.match(line) # type: ignore
|
||||
m = autosummary_item_re.match(line)
|
||||
if m:
|
||||
name = m.group(1).strip()
|
||||
if name.startswith('~'):
|
||||
@@ -339,7 +339,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None):
|
||||
|
||||
in_autosummary = False
|
||||
|
||||
m = autosummary_re.match(line) # type: ignore
|
||||
m = autosummary_re.match(line)
|
||||
if m:
|
||||
in_autosummary = True
|
||||
base_indent = m.group(1)
|
||||
@@ -347,7 +347,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None):
|
||||
template = None
|
||||
continue
|
||||
|
||||
m = automodule_re.search(line) # type: ignore
|
||||
m = automodule_re.search(line)
|
||||
if m:
|
||||
current_module = m.group(1).strip()
|
||||
# recurse into the automodule docstring
|
||||
@@ -355,7 +355,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None):
|
||||
current_module, filename=filename))
|
||||
continue
|
||||
|
||||
m = module_re.match(line) # type: ignore
|
||||
m = module_re.match(line)
|
||||
if m:
|
||||
current_module = m.group(2)
|
||||
continue
|
||||
|
||||
@@ -102,7 +102,7 @@ class CoverageBuilder(Builder):
|
||||
# Fetch all the info from the header files
|
||||
c_objects = self.env.domaindata['c']['objects']
|
||||
for filename in self.c_sourcefiles:
|
||||
undoc = set()
|
||||
undoc = set() # type: Set[Tuple[unicode, unicode]]
|
||||
with open(filename, 'r') as f:
|
||||
for line in f:
|
||||
for key, regex in self.c_regexes:
|
||||
|
||||
@@ -60,7 +60,7 @@ class ClickableMapDefinition(object):
|
||||
|
||||
def parse(self, dot=None):
|
||||
# type: (unicode) -> None
|
||||
matched = self.maptag_re.match(self.content[0]) # type: ignore
|
||||
matched = self.maptag_re.match(self.content[0])
|
||||
if not matched:
|
||||
raise GraphvizError('Invalid clickable map file found: %s' % self.filename)
|
||||
|
||||
@@ -73,7 +73,7 @@ class ClickableMapDefinition(object):
|
||||
self.content[0] = self.content[0].replace('%3', self.id)
|
||||
|
||||
for line in self.content:
|
||||
if self.href_re.search(line): # type: ignore
|
||||
if self.href_re.search(line):
|
||||
self.clickable.append(line)
|
||||
|
||||
def generate_clickable_map(self):
|
||||
|
||||
@@ -190,7 +190,7 @@ def convert_dvi_to_png(dvipath, builder):
|
||||
depth = None
|
||||
if builder.config.imgmath_use_preview:
|
||||
for line in stdout.splitlines():
|
||||
matched = depth_re.match(line) # type: ignore
|
||||
matched = depth_re.match(line)
|
||||
if matched:
|
||||
depth = int(matched.group(1))
|
||||
write_png_depth(filename, depth)
|
||||
|
||||
@@ -77,7 +77,7 @@ def try_import(objname):
|
||||
__import__(objname)
|
||||
return sys.modules.get(objname) # type: ignore
|
||||
except (ImportError, ValueError): # ValueError,py27 -> ImportError,py3
|
||||
matched = module_sig_re.match(objname) # type: ignore
|
||||
matched = module_sig_re.match(objname)
|
||||
|
||||
if not matched:
|
||||
return None
|
||||
@@ -88,7 +88,7 @@ def try_import(objname):
|
||||
return None
|
||||
try:
|
||||
__import__(modname)
|
||||
return getattr(sys.modules.get(modname), attrname, None)
|
||||
return getattr(sys.modules.get(modname), attrname, None) # type: ignore
|
||||
except (ImportError, ValueError): # ValueError,py27 -> ImportError,py3
|
||||
return None
|
||||
|
||||
|
||||
@@ -236,7 +236,7 @@ class GoogleDocstring(UnicodeMixin):
|
||||
_name, _type, _desc = before, '', after # type: unicode, unicode, unicode
|
||||
|
||||
if parse_type:
|
||||
match = _google_typed_arg_regex.match(before) # type: ignore
|
||||
match = _google_typed_arg_regex.match(before)
|
||||
if match:
|
||||
_name = match.group(1)
|
||||
_type = match.group(2)
|
||||
@@ -496,9 +496,9 @@ class GoogleDocstring(UnicodeMixin):
|
||||
# type: (List[unicode]) -> bool
|
||||
if not lines:
|
||||
return False
|
||||
if _bullet_list_regex.match(lines[0]): # type: ignore
|
||||
if _bullet_list_regex.match(lines[0]):
|
||||
return True
|
||||
if _enumerated_list_regex.match(lines[0]): # type: ignore
|
||||
if _enumerated_list_regex.match(lines[0]):
|
||||
return True
|
||||
if len(lines) < 2 or lines[0].endswith('::'):
|
||||
return False
|
||||
@@ -572,7 +572,7 @@ class GoogleDocstring(UnicodeMixin):
|
||||
section = self._consume_section_header()
|
||||
self._is_in_section = True
|
||||
self._section_indent = self._get_current_indent()
|
||||
if _directive_regex.match(section): # type: ignore
|
||||
if _directive_regex.match(section):
|
||||
lines = [section] + self._consume_to_next_section()
|
||||
else:
|
||||
lines = self._sections[section.lower()](section)
|
||||
@@ -784,9 +784,9 @@ class GoogleDocstring(UnicodeMixin):
|
||||
# type: (unicode) -> Tuple[unicode, unicode, unicode]
|
||||
before_colon = []
|
||||
after_colon = []
|
||||
colon = ''
|
||||
colon = '' # type: unicode
|
||||
found_colon = False
|
||||
for i, source in enumerate(_xref_regex.split(line)): # type: ignore
|
||||
for i, source in enumerate(_xref_regex.split(line)):
|
||||
if found_colon:
|
||||
after_colon.append(source)
|
||||
else:
|
||||
@@ -968,7 +968,7 @@ class NumpyDocstring(GoogleDocstring):
|
||||
section, underline = self._line_iter.peek(2)
|
||||
section = section.lower()
|
||||
if section in self._sections and isinstance(underline, string_types):
|
||||
return bool(_numpy_section_regex.match(underline)) # type: ignore
|
||||
return bool(_numpy_section_regex.match(underline))
|
||||
elif self._directive_sections:
|
||||
if _directive_regex.match(section):
|
||||
for directive_section in self._directive_sections:
|
||||
@@ -1005,7 +1005,7 @@ class NumpyDocstring(GoogleDocstring):
|
||||
def parse_item_name(text):
|
||||
# type: (unicode) -> Tuple[unicode, unicode]
|
||||
"""Match ':role:`name`' or 'name'"""
|
||||
m = self._name_rgx.match(text) # type: ignore
|
||||
m = self._name_rgx.match(text)
|
||||
if m:
|
||||
g = m.groups()
|
||||
if g[1] is None:
|
||||
@@ -1029,7 +1029,7 @@ class NumpyDocstring(GoogleDocstring):
|
||||
if not line.strip():
|
||||
continue
|
||||
|
||||
m = self._name_rgx.match(line) # type: ignore
|
||||
m = self._name_rgx.match(line)
|
||||
if m and line[m.end():].strip().startswith(':'):
|
||||
push_item(current_func, rest)
|
||||
current_func, line = line[:m.end()], line[m.end():]
|
||||
|
||||
@@ -149,8 +149,8 @@ class PygmentsBridge(object):
|
||||
|
||||
# trim doctest options if wanted
|
||||
if isinstance(lexer, PythonConsoleLexer) and self.trim_doctest_flags:
|
||||
source = doctest.blankline_re.sub('', source) # type: ignore
|
||||
source = doctest.doctestopt_re.sub('', source) # type: ignore
|
||||
source = doctest.blankline_re.sub('', source)
|
||||
source = doctest.doctestopt_re.sub('', source)
|
||||
|
||||
# highlight via Pygments
|
||||
formatter = self.get_formatter(**kwargs)
|
||||
|
||||
@@ -45,7 +45,7 @@ class _TranslationProxy(UserString, object):
|
||||
if not args:
|
||||
# not called with "function" and "arguments", but a plain string
|
||||
return text_type(func)
|
||||
return object.__new__(cls) # type: ignore
|
||||
return object.__new__(cls)
|
||||
|
||||
def __getnewargs__(self):
|
||||
# type: () -> Tuple
|
||||
|
||||
@@ -32,8 +32,8 @@ class ModuleAnalyzer(object):
|
||||
def for_string(cls, string, modname, srcname='<string>'):
|
||||
# type: (unicode, unicode, unicode) -> ModuleAnalyzer
|
||||
if isinstance(string, bytes):
|
||||
return cls(BytesIO(string), modname, srcname) # type: ignore
|
||||
return cls(StringIO(string), modname, srcname, decoded=True) # type: ignore
|
||||
return cls(BytesIO(string), modname, srcname)
|
||||
return cls(StringIO(string), modname, srcname, decoded=True)
|
||||
|
||||
@classmethod
|
||||
def for_file(cls, filename, modname):
|
||||
@@ -42,7 +42,7 @@ class ModuleAnalyzer(object):
|
||||
return cls.cache['file', filename]
|
||||
try:
|
||||
with open(filename, 'rb') as f:
|
||||
obj = cls(f, modname, filename) # type: ignore
|
||||
obj = cls(f, modname, filename)
|
||||
cls.cache['file', filename] = obj
|
||||
except Exception as err:
|
||||
if '.egg/' in filename:
|
||||
|
||||
@@ -261,7 +261,7 @@ def menusel_role(typ, rawtext, text, lineno, inliner, options={}, content=[]):
|
||||
text = utils.unescape(text)
|
||||
if typ == 'menuselection':
|
||||
text = text.replace('-->', u'\N{TRIANGULAR BULLET}')
|
||||
spans = _amp_re.split(text) # type: ignore
|
||||
spans = _amp_re.split(text)
|
||||
|
||||
node = nodes.inline(rawtext=rawtext)
|
||||
for i, span in enumerate(spans):
|
||||
@@ -343,7 +343,7 @@ _abbr_re = re.compile(r'\((.*)\)$', re.S)
|
||||
def abbr_role(typ, rawtext, text, lineno, inliner, options={}, content=[]):
|
||||
# type: (unicode, unicode, unicode, int, Inliner, Dict, List[unicode]) -> Tuple[List[nodes.Node], List[nodes.Node]] # NOQA
|
||||
text = utils.unescape(text)
|
||||
m = _abbr_re.search(text) # type: ignore
|
||||
m = _abbr_re.search(text)
|
||||
if m is None:
|
||||
return [addnodes.abbreviation(text, text, **options)], []
|
||||
abbr = text[:m.start()].strip()
|
||||
|
||||
@@ -85,7 +85,7 @@ var Stemmer = function() {
|
||||
at white spaces, which should be enough for most languages except CJK
|
||||
languages.
|
||||
"""
|
||||
return self._word_re.findall(input) # type: ignore
|
||||
return self._word_re.findall(input)
|
||||
|
||||
def stem(self, word):
|
||||
# type: (unicode) -> unicode
|
||||
|
||||
@@ -193,7 +193,7 @@ _unicode_literals_re = re.compile(r'u(".*?")|u(\'.*?\')')
|
||||
|
||||
def remove_unicode_literals(s):
|
||||
# type: (unicode) -> unicode
|
||||
return _unicode_literals_re.sub(lambda x: x.group(1) or x.group(2), s) # type: ignore
|
||||
return _unicode_literals_re.sub(lambda x: x.group(1) or x.group(2), s)
|
||||
|
||||
|
||||
def find_files(root, suffix=None):
|
||||
|
||||
@@ -378,7 +378,7 @@ def detect_encoding(readline):
|
||||
except UnicodeDecodeError:
|
||||
return None
|
||||
|
||||
matches = _coding_re.findall(line_string) # type: ignore
|
||||
matches = _coding_re.findall(line_string)
|
||||
if not matches:
|
||||
return None
|
||||
return get_normal_name(matches[0])
|
||||
|
||||
@@ -226,13 +226,13 @@ class sphinx_domains(object):
|
||||
class WarningStream(object):
|
||||
def write(self, text):
|
||||
# type: (unicode) -> None
|
||||
matched = report_re.search(text) # type: ignore
|
||||
matched = report_re.search(text)
|
||||
if not matched:
|
||||
logger.warning(text.rstrip("\r\n"))
|
||||
else:
|
||||
location, type, level = matched.groups()
|
||||
message = report_re.sub('', text).rstrip() # type: ignore
|
||||
logger.log(type, message, location=location)
|
||||
message = report_re.sub('', text).rstrip()
|
||||
logger.log(type, message, location=location) # type: ignore
|
||||
|
||||
|
||||
class LoggingReporter(Reporter):
|
||||
|
||||
@@ -154,7 +154,7 @@ class SphinxLoggerAdapter(logging.LoggerAdapter):
|
||||
|
||||
def handle(self, record):
|
||||
# type: (logging.LogRecord) -> None
|
||||
self.logger.handle(record) # type: ignore
|
||||
self.logger.handle(record)
|
||||
|
||||
|
||||
class WarningStreamHandler(logging.StreamHandler):
|
||||
@@ -439,7 +439,8 @@ class SphinxLogRecordTranslator(logging.Filter):
|
||||
def filter(self, record): # type: ignore
|
||||
# type: (SphinxWarningLogRecord) -> bool
|
||||
if isinstance(record, logging.LogRecord):
|
||||
record.__class__ = self.LogRecordClass # force subclassing to handle location
|
||||
# force subclassing to handle location
|
||||
record.__class__ = self.LogRecordClass # type: ignore
|
||||
|
||||
location = getattr(record, 'location', None)
|
||||
if isinstance(location, tuple):
|
||||
|
||||
@@ -287,7 +287,7 @@ def clean_astext(node):
|
||||
def split_explicit_title(text):
|
||||
# type: (unicode) -> Tuple[bool, unicode, unicode]
|
||||
"""Split role content into title and target, if given."""
|
||||
match = explicit_title_re.match(text) # type: ignore
|
||||
match = explicit_title_re.match(text)
|
||||
if match:
|
||||
return True, match.group(1), match.group(2)
|
||||
return False, text, text
|
||||
|
||||
@@ -30,7 +30,7 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
def escape(text):
|
||||
# type: (unicode) -> unicode
|
||||
text = symbols_re.sub(r'\\\1', text) # type: ignore
|
||||
text = symbols_re.sub(r'\\\1', text)
|
||||
text = re.sub(r'^\.', r'\.', text) # escape a dot at top
|
||||
return text
|
||||
|
||||
|
||||
Reference in New Issue
Block a user