From 168bb524107f53ece2ba798aa14169f2e2a26d00 Mon Sep 17 00:00:00 2001 From: Andrea Righi Date: Fri, 16 Feb 2024 11:54:34 +0100 Subject: [PATCH] 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 --- kconfig/annotations.py | 12 +++++++----- kconfig/run.py | 7 ++++++- 2 files changed, 13 insertions(+), 6 deletions(-) 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: -- 2.31.1