From cd66b7b4622d0e5e396ef95308d80c7f8f74577e Mon Sep 17 00:00:00 2001 From: Tab Atkins-Bittner Date: Thu, 13 Jan 2022 15:18:25 -0800 Subject: [PATCH] Add 'bikeshed debug --print-metadata', to output all the parsed metadata. Fixes #2214. --- bikeshed/cli.py | 17 +++++++++++++++++ bikeshed/metadata.py | 5 +++++ 2 files changed, 22 insertions(+) diff --git a/bikeshed/cli.py b/bikeshed/cli.py index c351802d06..02b54528bd 100644 --- a/bikeshed/cli.py +++ b/bikeshed/cli.py @@ -300,6 +300,12 @@ def main(): action="store_true", help="Clobbers the readonly data files with the mutable ones.", ) + debugCommands.add_argument( + "--print-metadata", + dest="printMetadata", + action="store_true", + help="Prints all the metadata parsed for the spec as JSON. Top-level keys are presented in increasing order of importance; second-level keys are in order of first appearance in each context.", + ) refParser = subparsers.add_parser("refs", help="Search Bikeshed's ref database.") refParser.add_argument("infile", nargs="?", default=None, help="Path to the source file.") @@ -554,6 +560,17 @@ def handleDebug(options, extras): constants.quiet = 0 update.updateReadonlyDataFiles() warn("Don't forget to bump the version number!") + elif options.printMetadata: + doc = Spec(inputFilename=options.infile) + doc.mdCommandLine = metadata.fromCommandLine(extras) + doc.preprocess() + md = { + "defaults.include": doc.mdDefaults.allData, + "computed-metadata.include": doc.mdOverridingDefaults.allData, + "document": doc.mdDocument.allData, + "command-line": doc.mdCommandLine.allData, + } + print(json.dumps(md, indent=2, default=getjson)) def handleRefs(options, extras): diff --git a/bikeshed/metadata.py b/bikeshed/metadata.py index 1f3c7cc66d..4931d765bb 100644 --- a/bikeshed/metadata.py +++ b/bikeshed/metadata.py @@ -33,6 +33,9 @@ def displayVshortname(self): def __init__(self): self.hasMetadata = False + # All metadata ever passed to .addData() + self.allData = defaultdict(list) + # required metadata self.abstract = [] self.ED = None @@ -139,12 +142,14 @@ def addData(self, key, val, lineNum=None): val = val.strip() if key.startswith("!"): + self.allData[key].append(val) key = key[1:] self.otherMetadata[key].append(val) return if key not in ("ED", "TR", "URL"): key = key.title() + self.allData[key].append(val) if key not in knownKeys: die(f'Unknown metadata key "{key}". Prefix custom keys with "!".', lineNum=lineNum)