53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
# ===-------------------- check.py - Documentation Checker ----------------===//
|
|
#
|
|
# Copyright 2019-2020 The IBM Research Authors.
|
|
#
|
|
# =============================================================================
|
|
#
|
|
# ===----------------------------------------------------------------------===//
|
|
|
|
import argparse
|
|
import os, sys
|
|
|
|
from itertools import chain
|
|
from pathlib import Path
|
|
|
|
from utils import setup_logger, DocCheckerCtx
|
|
|
|
logger = setup_logger("doc-check")
|
|
|
|
# Make common utilities visible by adding them to system paths.
|
|
doc_check_base_dir = os.path.dirname(os.path.realpath(__file__))
|
|
sys.path.append(doc_check_base_dir)
|
|
|
|
from doc_parser import try_parse_and_handle_directive
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument(
|
|
"root_dir",
|
|
help="directory in which to look for documentation to operate on")
|
|
|
|
parser.add_argument('--exclude_dirs', nargs='+',
|
|
help='a set of directories to exclude, with path specified relative to root_dir', default=[])
|
|
|
|
|
|
def main(root_dir, exclude_dirs):
|
|
for i, exclude_dir in enumerate(exclude_dirs):
|
|
exclude_dirs[i] = os.path.join(root_dir, exclude_dir)
|
|
|
|
ctx = DocCheckerCtx(root_dir)
|
|
for doc_file in chain(Path(root_dir).rglob('*.md'), Path(root_dir).rglob('*.dc')):
|
|
# Skip, if doc file is in directories to be excluded.
|
|
if any([str(doc_file).startswith(exclude_dir) for exclude_dir in exclude_dirs]):
|
|
continue
|
|
|
|
logger.info("Checking {}...".format(doc_file))
|
|
with ctx.open_doc(doc_file) as markdown_file:
|
|
while not markdown_file.eof():
|
|
try_parse_and_handle_directive(ctx)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
args = parser.parse_args()
|
|
main(**vars(args))
|