rust-clippy/util/export.py

71 lines
1.8 KiB
Python
Executable File

#!/usr/bin/env python
# Build the gh-pages
import re
import sys
import json
from lintlib import parse_all, log
lint_subheadline = re.compile(r'''^\*\*([\w\s]+?)[:?.!]?\*\*(.*)''')
CONF_TEMPLATE = """\
This lint has the following configuration variables:
* `%s: %s`: %s (defaults to `%s`)."""
def parse_lint_def(lint):
lint_dict = {}
lint_dict['id'] = lint.name
lint_dict['group'] = lint.group
lint_dict['level'] = lint.level
lint_dict['docs'] = {}
last_section = None
for line in lint.doc:
if len(line.strip()) == 0 and not last_section.startswith("Example"):
continue
match = re.match(lint_subheadline, line)
if match:
last_section = match.groups()[0]
if match:
text = match.groups()[1]
else:
text = line
if not last_section:
log.warn("Skipping comment line as it was not preceded by a heading")
log.debug("in lint `%s`, line `%s`", lint.name, line)
fragment = lint_dict['docs'].get(last_section, "")
if text == "\n":
line = fragment + text
else:
line = (fragment + "\n" + text).strip()
lint_dict['docs'][last_section] = line
return lint_dict
def main():
lintlist, configs = parse_all()
lints = {}
for lint in lintlist:
lints[lint.name] = parse_lint_def(lint)
if lint.name in configs:
lints[lint.name]['docs']['Configuration'] = \
CONF_TEMPLATE % configs[lint.name]
outfile = sys.argv[1] if len(sys.argv) > 1 else "util/gh-pages/lints.json"
with open(outfile, "w") as fp:
json.dump(list(lints.values()), fp, indent=2)
log.info("wrote JSON for great justice")
if __name__ == "__main__":
main()