File: InitOptions.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 (69 lines) | stat: -rw-r--r-- 2,455 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
60
61
62
63
64
65
66
67
68
69
/*
 This source file is part of the Swift.org open source project

 Copyright (c) 2024 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 Foundation

/// Resolves and validates the arguments needed to run the init catalog actions.
///
/// These options are used by the ``Docc/Init`` subcommand.

public struct InitOptions: ParsableArguments {
    
    public init() { }
    
    /// The catalog directory name.
    @Option(
        name: .long,
        help: ArgumentHelp(
            "Name to use as the catalog directory name",
            valueName: "name"
        )
    )
    public var name: String
    
    /// A user-provided location where the init action writes the generated catalog documentation.
    @Option(
        name: [.customLong("output-dir"), .customShort("o")],
        help: ArgumentHelp(
            "The location where the documention catalog will be written",
            valueName: "output-dir"
        ),
        transform: URL.init(fileURLWithPath:)
    )
    public var providedCatalogOutputDirURL: URL
    
    public func validate() throws {
        // Verify that the directory exist for the output location.
        var isDirectory: ObjCBool = false
        guard FileManager.default.fileExists(atPath: providedCatalogOutputDirURL.path, isDirectory: &isDirectory), isDirectory.boolValue else {
            throw ValidationError("No directory exists at '\(providedCatalogOutputDirURL.path)'.")
        }
    }
    
    /// The catalog template to initialize.
    @Option(
        name: .customLong("template"),
        help: ArgumentHelp(
            "The catalog template to initialize.",
            discussion: """
            The provided templates are:
            
            - articleOnly: This template contains the minimal needed for creating article-only reference documentation not tied to symbols. It includes a catalog with just one markdown file and a references folder.
            
            - tutorial: This template contains the necessary structure and directives to get started on authoring tutorials.
            """,
            valueName: "template-name"
        )
    )
    public var catalogTemplate: CatalogTemplateKind
}

extension CatalogTemplateKind: ExpressibleByArgument {}