From: Andrea Righi Date: Fri, 16 Feb 2024 10:54:34 +0000 (+0100) Subject: annotations: do not try to auto-detect JSON format X-Git-Url: https://jxself.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Fmain;p=annotations.git annotations: do not try to auto-detect JSON format The script tries to automatically detect the format of the annotations file (legacy or pure JSON). However, if the legacy file contains a syntax error, the script will try to parse the file as JSON (incorrectly) triggering another obscure error, complaining that the JSON format is invalid. This hides the capability to detect syntax errors properly in the annotations file. To prevent this, introduce a new option --json. In this way the caller has complete control to decide which format needs to be used to parse the annotations file. Signed-off-by: Andrea Righi --- diff --git a/kconfig/annotations.py b/kconfig/annotations.py index 69cf501..b7812fa 100644 --- a/kconfig/annotations.py +++ b/kconfig/annotations.py @@ -65,6 +65,10 @@ class Annotation(Config): Parse body of annotations file """ + def __init__(self, fname, do_include=True, do_json=False): + self.do_json = do_json + super().__init__(fname, do_include=True) + def _parse_body(self, data: str, parent=True): for line in data.splitlines(): # Replace tabs with spaces, squeeze multiple into singles and @@ -229,12 +233,10 @@ class Annotation(Config): self._json_parse(data, is_included=True) def _parse(self, data: str): - # Try to parse the legacy format first, otherwise use the new JSON - # format. - try: - self._legacy_parse(data) - except SyntaxError: + if self.do_json: self._json_parse(data, is_included=False) + else: + self._legacy_parse(data) def _remove_entry(self, config: str): if self.config[config]: diff --git a/kconfig/run.py b/kconfig/run.py index e857d56..e9a51da 100644 --- a/kconfig/run.py +++ b/kconfig/run.py @@ -90,6 +90,11 @@ def make_parser(): action="store_true", help="Do not process included annotations (stop at the main file)", ) + parser.add_argument( + "--json", + action="store_true", + help="Try to parse annotations file in pure JSON format", + ) ga = parser.add_argument_group(title="Action").add_mutually_exclusive_group( required=False @@ -178,7 +183,7 @@ def print_result(config, data): def do_query(args): if args.arch is None and args.flavour is not None: arg_fail(_ARGPARSER, "error: --flavour requires --arch") - a = Annotation(args.file, do_include=(not args.no_include)) + a = Annotation(args.file, do_include=(not args.no_include), do_json=args.json) res = a.search_config(config=args.config, arch=args.arch, flavour=args.flavour) # If no arguments are specified dump the whole annotations structure if args.config is None and args.arch is None and args.flavour is None: