File: InvalidAdditionalTitle.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 (49 lines) | stat: -rw-r--r-- 1,857 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
/*
 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 Foundation
import Markdown

/**
 A document should have a single title, i.e. a single first-level heading.
 */
public struct InvalidAdditionalTitle: Checker {
    public var problems = [Problem]()
    
    /// The first level-one heading we encounter.
    private var documentTitle: Heading? = nil
    
    private var sourceFile: URL?
    
    /// Creates a new checker that detects documents with multiple titles.
    ///
    /// - Parameter sourceFile: The URL to the documentation file that the checker checks.
    public init(sourceFile: URL?) {
        self.sourceFile = sourceFile
    }
    
    public mutating func visitHeading(_ heading: Heading) {
        // Only care about level-one headings.
        guard heading.level == 1 else { return }
        
        if documentTitle == nil {
            // This is the first level-one heading we encounter.
            documentTitle = heading
        } else if documentTitle?.range != heading.range {
            // We've found a level-one heading which isn't the title of the document.
            let explanation = """
                Level-1 headings are reserved for specifying the title of the document.
                """
            
            let diagnostic = Diagnostic(source: sourceFile, severity: .warning, range: heading.range, identifier: "org.swift.docc.InvalidAdditionalTitle", summary: "Invalid use of level-1 heading.", explanation: explanation)
            problems.append(Problem(diagnostic: diagnostic, possibleSolutions: []))
        }
    }
}