Esempio n. 1
0
def main():
    parser = argparse.ArgumentParser(prog='hawkmoth',
                                     description="""
    Hawkmoth parser debug tool. Print the documentation comments extracted
    from FILE, along with the generated C Domain directives, to standard
    output. Include metadata with verbose output.""")
    parser.add_argument('file',
                        metavar='FILE',
                        type=str,
                        action='store',
                        help='The C source or header file to parse.')
    parser.add_argument(
        '--compat',
        choices=['none', 'javadoc-basic', 'javadoc-liberal', 'kernel-doc'],
        help='Compatibility options. See cautodoc_compat.')
    parser.add_argument('--clang',
                        metavar='PARAM[,PARAM,...]',
                        help='Arguments to pass to clang. See cautodoc_clang.')
    parser.add_argument('--verbose',
                        dest='verbose',
                        action='store_true',
                        help='Verbose output.')
    args = parser.parse_args()

    docs, errors = parse(args.file, compat=args.compat, clang=args.clang)

    for (doc, meta) in docs:
        if args.verbose:
            print('# {}'.format(meta))
        print(doc)

    for (severity, filename, lineno, msg) in errors:
        print('{}: {}:{}: {}'.format(severity.name, filename, lineno, msg),
              file=sys.stderr)
Esempio n. 2
0
def _get_output(testcase, **options):
    docs_str = ''
    errors_str = ''

    directive = options.get('directive')
    if directive:
        pytest.skip(f'{directive} directive test')

    input_filename = testenv.get_input_filename(options, path=testenv.testdir)

    options = options.get('directive-options', {})

    clang_args = options.get('clang')
    comments, errors = parse(input_filename, clang_args=clang_args)

    tropt = options.pop('compat', None)
    if tropt is not None:
        transform = lambda comment: doccompat.convert(comment, transform=tropt)
    else:
        tropt = options.pop('transform', None)
        if tropt is not None:
            transform = conf.cautodoc_transformations[tropt]
        else:
            transform = None

    for comment in comments.walk():
        docs_str += comment.get_docstring(transform=transform) + '\n'

    for (severity, filename, lineno, msg) in errors:
        errors_str += f'{severity.name}: {os.path.basename(filename)}:{lineno}: {msg}\n'

    return docs_str, errors_str
Esempio n. 3
0
def _get_output(input_filename, **options):
    docs_str = ''
    errors_str = ''

    docs, errors = parse(input_filename, **options)

    for (doc, meta) in docs:
        docs_str += doc + '\n'

    for (severity, filename, lineno, msg) in errors:
        errors_str += '{}: {}: {}\n'.format(severity.name, lineno, msg)

    return docs_str, errors_str
Esempio n. 4
0
    def __parse(self, viewlist, filename):
        env = self.state.document.settings.env

        compat = self.options.get('compat', env.config.cautodoc_compat)
        clang = self.options.get('clang', env.config.cautodoc_clang)

        comments = parse(filename, compat=compat, clang=clang)

        for (comment, meta) in comments:
            lineoffset = meta['line'] - 1
            lines = statemachine.string2lines(comment,
                                              8,
                                              convert_whitespace=True)
            for line in lines:
                viewlist.append(line, filename, lineoffset)
                lineoffset += 1
Esempio n. 5
0
def main():
    parser = argparse.ArgumentParser(prog='hawkmoth',
                                     description="""
    Hawkmoth parser debug tool. Print the documentation comments extracted
    from FILE, along with the generated C Domain directives, to standard
    output. Include metadata with verbose output.""")
    parser.add_argument('file',
                        metavar='FILE',
                        type=str,
                        action='store',
                        help='The C source or header file to parse.')
    parser.add_argument(
        '--compat',
        choices=['none', 'javadoc-basic', 'javadoc-liberal', 'kernel-doc'],
        help='Compatibility options. See cautodoc_compat.')
    parser.add_argument(
        '--clang',
        metavar='PARAM',
        action='append',
        help=
        'Argument to pass to Clang. May be specified multiple times. See cautodoc_clang.'
    )  # noqa: E501
    parser.add_argument('--verbose',
                        dest='verbose',
                        action='store_true',
                        help='Verbose output.')
    args = parser.parse_args()

    transform = lambda comment: doccompat.convert(comment,
                                                  transform=args.compat)

    comments, errors = parse(args.file, clang_args=args.clang)

    for comment in comments.walk():
        if args.verbose:
            print(f'# {comment.get_meta()}')
        print(comment.get_docstring(transform=transform))

    for (severity, filename, lineno, msg) in errors:
        if filename:
            print(f'{severity.name}: {filename}:{lineno}: {msg}',
                  file=sys.stderr)
        else:
            print(f'{severity.name}: {msg}', file=sys.stderr)
Esempio n. 6
0
    def __parse(self, filename):
        clang_args = self.__get_clang_args()

        # Cached parse results per rst document
        parsed_files = self.env.temp_data.setdefault('cautodoc_parsed_files',
                                                     {})

        # The output depends on clang args
        key = (filename, tuple(clang_args))

        if key in parsed_files:
            return parsed_files[key]

        # Tell Sphinx about the dependency
        self.env.note_dependency(filename)

        docstrings, errors = parse(filename, clang_args=clang_args)

        self.__display_parser_diagnostics(errors)

        parsed_files[key] = docstrings

        return docstrings