##// END OF EJS Templates
rebase: avoid converting from nodes to revnums twice...
rebase: avoid converting from nodes to revnums twice In the case where the node has successors, but none of them is an ancestor of the destination, we would iterate over the successor nodes twice, check if they're in the repo and convert them to revnums. I doubt it's a measureable cost, but it gets simpler this way too. Differential Revision: https://phab.mercurial-scm.org/D3941

File last commit:

r29169:c9ab5a0b default
r38694:0f8599af default
Show More
docchecker
66 lines | 1.6 KiB | text/plain | TextLexer
timeless
docchecker: introduce a way to check for poor markup...
r27730 #!/usr/bin/env python
#
# 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
Pulkit Goyal
py3: make doc/docchecker use print_function
r29169 from __future__ import absolute_import, print_function
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
leadingline = re.compile(r'(^\s*)(\S.*)$')
timeless
docchecker: report context line at most once
r28810
checks = [
(r""":hg:`[^`]*'[^`]*`""",
"""warning: please avoid nesting ' in :hg:`...`"""),
(r'\w:hg:`',
'warning: please have a space before :hg:'),
timeless
docchecker: try to reject single quotes
r28811 (r"""(?:[^a-z][^'.])hg ([^,;"`]*'(?!hg)){2}""",
'''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
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:
FUJIWARA Katsunori
docchecker: use indentation of 4 spaces...
r28049 print(line)
timeless
docchecker: report context line at most once
r28810 for msg in messages:
print(msg)
timeless
docchecker: introduce a way to check for poor markup...
r27730
def work(file):
FUJIWARA Katsunori
docchecker: use indentation of 4 spaces...
r28049 (llead, lline) = ('', '')
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)
(llead, lline) = ('', '')
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)
if (lead == llead):
if (lline != ''):
lline += ' ' + line
else:
lline = line
else:
check(lline)
(llead, lline) = (lead, line)
check(lline)
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:
with open(f) as file:
work(file)
except BaseException as e:
print("failed to process %s: %s" % (f, e))
timeless
docchecker: introduce a way to check for poor markup...
r27730
main()