xref: /linux/tools/net/sunrpc/xdrgen/subcmds/lint.py (revision 1fd1dc41724319406b0aff221a352a400b0ddfc5)
1#!/usr/bin/env python3
2# ex: set filetype=python:
3
4"""Translate an XDR specification into executable code that
5can be compiled for the Linux kernel."""
6
7import logging
8
9from argparse import Namespace
10from lark import logger
11from lark.exceptions import VisitError
12
13from xdr_parse import xdr_parser, make_error_handler, XdrParseError
14from xdr_parse import handle_transform_error
15from xdr_ast import transform_parse_tree
16
17logger.setLevel(logging.DEBUG)
18
19
20def subcmd(args: Namespace) -> int:
21    """Lexical and syntax check of an XDR specification"""
22
23    parser = xdr_parser()
24    with open(args.filename, encoding="utf-8") as f:
25        source = f.read()
26        try:
27            parse_tree = parser.parse(
28                source, on_error=make_error_handler(source, args.filename)
29            )
30        except XdrParseError:
31            return 1
32        try:
33            transform_parse_tree(parse_tree)
34        except VisitError as e:
35            handle_transform_error(e, source, args.filename)
36            return 1
37
38    return 0
39