https://github.com/quicwg/base-drafts
Raw File
Tip revision: 8256ce998788a38e86468f30b104982791431b4e authored by Lucas Pardue on 06 April 2023, 17:39:37 UTC
Remove duplication in CONTRIBUTING (#4999)
Tip revision: 8256ce9
.lint.py
#!/usr/bin/env python3

import sys
import argparse
import re

parser = argparse.ArgumentParser(description="Lint markdown drafts.")
parser.add_argument("files", metavar="file", nargs="+", help="Files to lint")
parser.add_argument("-l", dest="maxLineLength", default=80)
parser.add_argument("-f", dest="maxFigureLineLength", default=66)

args = parser.parse_args()

foundError = False

for inputfile in args.files:
    insideFigure = False
    beforeAbstract = True

    with open(inputfile, mode="rt", newline=None, encoding="utf-8") as draft:
        linenumber = 0
        lines = draft.readlines()

        abstract = re.compile("^--- abstract")
        table = re.compile("^\s*(?:\||{:)")
        figure = re.compile("^[~`]{3,}")

        for line in lines:
            line = line.rstrip("\r\n")
            linenumber += 1

            def err(msg):
                global foundError
                foundError = True
                sys.stderr.write("{0}:{1}: {2}\n".format(inputfile, linenumber, msg))
                sys.stderr.write("{0}\n".format(line))

            if line.find("\t") >= 0:
                err("Line contains HTAB")

            # Skip everything before abstract
            if beforeAbstract:
                matchObj = abstract.match(line)
                if matchObj:
                    beforeAbstract = False
                continue

            # Skip tables
            matchObj = table.match(line)
            if matchObj:
                continue

            # Toggle figure state
            matchObj = figure.match(line)
            if matchObj:
                insideFigure = not insideFigure
                continue

            # Check length
            length = len(line)
            limit = (
                int(args.maxFigureLineLength)
                if insideFigure
                else int(args.maxLineLength)
            )
            if length > limit:
                err("Line is {0} characters; limit is {1}".format(length, limit))

sys.exit(1 if foundError else 0)
back to top