File: DumpTreeCommand.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (59 lines) | stat: -rw-r--r-- 2,500 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*
 This source file is part of the Swift.org open source project

 Copyright (c) 2021 Apple Inc. and the Swift project authors
 Licensed under Apache License v2.0 with Runtime Library Exception

 See https://swift.org/LICENSE.txt for license information
 See https://swift.org/CONTRIBUTORS.txt for Swift project authors
*/

import ArgumentParser
import Markdown

extension MarkdownCommand {
    /// A command to dump the parsed input's debug tree representation.
    struct DumpTree: ParsableCommand {
        static let configuration = CommandConfiguration(commandName: "dump-tree", abstract: "Dump the parsed standard input as a tree representation for debugging")

        @Argument(help: "Optional input file path of a Markdown file to format; default: standard input")
        var inputFilePath: String?

        @Flag(inversion: .prefixedNo, exclusivity: .chooseLast, help: "Print source locations for each element where applicable")
        var sourceLocations: Bool = false

        @Flag<Bool>(inversion: .prefixedNo, exclusivity: .chooseLast, help: "Print internal unique identifiers for each element")
        var uniqueIdentifiers: Bool = false

        @Flag<Bool>(inversion: .prefixedNo, exclusivity: .chooseLast, help: "Parse block directives")
        var parseBlockDirectives: Bool = false

        @Flag<Bool>(inversion: .prefixedNo, exclusivity: .chooseLast, help: "Parse a minimal set of Doxygen commands (requires --parse-block-directives)")
        var experimentalParseDoxygenCommands: Bool = false

        func run() throws {
            var parseOptions = ParseOptions()
            if parseBlockDirectives {
                parseOptions.insert(.parseBlockDirectives)
            }
            if experimentalParseDoxygenCommands {
                parseOptions.insert(.parseMinimalDoxygen)
            }

            let document: Document
            if let inputFilePath = inputFilePath {
                (_, document) = try MarkdownCommand.parseFile(at: inputFilePath, options: parseOptions)
            } else {
                (_, document) = try MarkdownCommand.parseStandardInput(options: parseOptions)
            }
            var dumpOptions = MarkupDumpOptions()
            if sourceLocations {
                dumpOptions.insert(.printSourceLocations)
            }
            if uniqueIdentifiers {
                dumpOptions.insert(.printUniqueIdentifiers)
            }
            print(document.debugDescription(options: dumpOptions))
        }
    }
}