File: Diagnostics.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 (66 lines) | stat: -rw-r--r-- 2,423 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
struct ParseError: Error, CustomStringConvertible {
    let description: String
}

struct DiagnosticError: Error {
    let diagnostic: Diagnostic
}

public struct Diagnostic {

    public let message: String
    var textRange: TextRange?

    public func location(_ sourceText: String) -> (line: Int, column: Int)? {
        guard let textRange else { return nil }
        let position = textRange.lowerBound
        let linesBeforePos = sourceText[..<position].split(separator: "\n", omittingEmptySubsequences: false)
        let line = linesBeforePos.count
        let column = linesBeforePos.last?.count ?? 0
        return (line, column)
    }
}

extension Diagnostic {
    static func invalidRedeclaration(of identifier: String, textRange: TextRange) -> Diagnostic {
        return Diagnostic(
            message: "Invalid redeclaration of '\(identifier)'",
            textRange: textRange
        )
    }

    static func expectedIdentifier(textRange: TextRange) -> Diagnostic {
        return Diagnostic(message: "Expected identifier", textRange: textRange)
    }

    static func cannotFindType(of identifier: String, textRange: TextRange?) -> Diagnostic {
        return Diagnostic(message: "Cannot find type '\(identifier)' in scope", textRange: textRange)
    }

    static func cannotFindInterface(of identifier: String, textRange: TextRange?) -> Diagnostic {
        return Diagnostic(message: "Cannot find interface '\(identifier)' in scope", textRange: textRange)
    }

    static func expectedResourceType(_ type: WITType, textRange: TextRange?) -> Diagnostic {
        return Diagnostic(message: "Non-resource type \(type)", textRange: textRange)
    }

    static func noSuchPackage(_ packageName: PackageNameSyntax, textRange: TextRange?) -> Diagnostic {
        return Diagnostic(message: "No such package '\(packageName)'", textRange: textRange)
    }

    static func inconsistentPackageName(
        _ packageName: PackageNameSyntax,
        existingName: PackageNameSyntax,
        textRange: TextRange?
    ) -> Diagnostic {
        return Diagnostic(
            message: "package identifier `\(packageName)` does not match previous package name of `\(existingName)`",
            textRange: textRange
        )
    }

    static func noPackageHeader() -> Diagnostic {
        return Diagnostic(message: "no `package` header was found in any WIT file for this package", textRange: nil)
    }
}