##// END OF EJS Templates
py2: remove simple from __future__ statements...
py2: remove simple from __future__ statements These were needed for Python 2 support. Now that our linter no longer mandates these, we can start deleting them. Differential Revision: https://phab.mercurial-scm.org/D12254

File last commit:

r49730:6000f5b2 default
r49730:6000f5b2 default
Show More
docchecker
83 lines | 1.9 KiB | text/plain | TextLexer
Gregory Szorc
global: use python3 in shebangs...
r46434 #!/usr/bin/env python3
timeless
docchecker: introduce a way to check for poor markup...
r27730 #
# docchecker - look for problematic markup
#
# Copyright 2016 timeless <timeless@mozdev.org> and others
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
Pulkit Goyal
py3: make doc/docchecker use absolute_import
r29168
Matt Harbison
py3: byteify docchecker...
r41042 import os
Pulkit Goyal
py3: make doc/docchecker use absolute_import
r29168 import re
timeless
docchecker: introduce a way to check for poor markup...
r27730 import sys
Matt Harbison
py3: byteify docchecker...
r41042 try:
import msvcrt
Gregory Szorc
black: blacken scripts...
r44089
Matt Harbison
py3: byteify docchecker...
r41042 msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
except ImportError:
pass
stdout = getattr(sys.stdout, 'buffer', sys.stdout)
leadingline = re.compile(br'(^\s*)(\S.*)$')
timeless
docchecker: report context line at most once
r28810
checks = [
Gregory Szorc
black: blacken scripts...
r44089 (
br""":hg:`[^`]*'[^`]*`""",
b"""warning: please avoid nesting ' in :hg:`...`""",
),
(br'\w:hg:`', b'warning: please have a space before :hg:'),
(
br"""(?:[^a-z][^'.])hg ([^,;"`]*'(?!hg)){2}""",
b'''warning: please use " instead of ' for hg ... "..."''',
),
timeless
docchecker: report context line at most once
r28810 ]
timeless
docchecker: introduce a way to check for poor markup...
r27730
Gregory Szorc
black: blacken scripts...
r44089
timeless
docchecker: introduce a way to check for poor markup...
r27730 def check(line):
timeless
docchecker: report context line at most once
r28810 messages = []
for match, msg in checks:
if re.search(match, line):
messages.append(msg)
if messages:
Matt Harbison
py3: byteify docchecker...
r41042 stdout.write(b'%s\n' % line)
timeless
docchecker: report context line at most once
r28810 for msg in messages:
Matt Harbison
py3: byteify docchecker...
r41042 stdout.write(b'%s\n' % msg)
timeless
docchecker: introduce a way to check for poor markup...
r27730
Gregory Szorc
black: blacken scripts...
r44089
timeless
docchecker: introduce a way to check for poor markup...
r27730 def work(file):
Matt Harbison
py3: byteify docchecker...
r41042 (llead, lline) = (b'', b'')
timeless
docchecker: introduce a way to check for poor markup...
r27730
FUJIWARA Katsunori
docchecker: use indentation of 4 spaces...
r28049 for line in file:
# this section unwraps lines
match = leadingline.match(line)
if not match:
check(lline)
Matt Harbison
py3: byteify docchecker...
r41042 (llead, lline) = (b'', b'')
FUJIWARA Katsunori
docchecker: use indentation of 4 spaces...
r28049 continue
timeless
docchecker: introduce a way to check for poor markup...
r27730
FUJIWARA Katsunori
docchecker: use indentation of 4 spaces...
r28049 lead, line = match.group(1), match.group(2)
Gregory Szorc
black: blacken scripts...
r44089 if lead == llead:
if lline != b'':
Matt Harbison
py3: byteify docchecker...
r41042 lline += b' ' + line
FUJIWARA Katsunori
docchecker: use indentation of 4 spaces...
r28049 else:
lline = line
else:
check(lline)
(llead, lline) = (lead, line)
check(lline)
timeless
docchecker: introduce a way to check for poor markup...
r27730
Gregory Szorc
black: blacken scripts...
r44089
timeless
docchecker: introduce a way to check for poor markup...
r27730 def main():
FUJIWARA Katsunori
docchecker: use indentation of 4 spaces...
r28049 for f in sys.argv[1:]:
try:
Matt Harbison
py3: byteify docchecker...
r41042 with open(f, 'rb') as file:
FUJIWARA Katsunori
docchecker: use indentation of 4 spaces...
r28049 work(file)
except BaseException as e:
Matt Harbison
py3: byteify docchecker...
r41042 sys.stdout.write(r"failed to process %s: %s\n" % (f, e))
timeless
docchecker: introduce a way to check for poor markup...
r27730
Gregory Szorc
black: blacken scripts...
r44089
timeless
docchecker: introduce a way to check for poor markup...
r27730 main()