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 70 71 72 73 74 75 76 77 78 79 80
|
/*
This source file is part of the Swift.org open source project
Copyright (c) 2021-2023 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 SymbolKit
/**
A problem with a document along with possible solutions to the problem.
*/
public struct Problem {
/// A diagnostic describing the problem.
public var diagnostic: Diagnostic
/// The possible solutions to the problem if there are any.
public var possibleSolutions: [Solution]
public init(diagnostic: Diagnostic, possibleSolutions: some Sequence<Solution>) {
self.diagnostic = diagnostic
self.possibleSolutions = Array(possibleSolutions)
}
public init(diagnostic: Diagnostic) {
self.init(diagnostic: diagnostic, possibleSolutions: [])
}
}
extension Problem {
/// Offsets the problem using a certain SymbolKit `SourceRange`.
///
/// Useful when validating a doc comment that needs to be projected in its containing file "space".
mutating func offsetWithRange(_ docRange: SymbolGraph.LineList.SourceRange) {
diagnostic.offsetWithRange(docRange)
for i in possibleSolutions.indices {
for j in possibleSolutions[i].replacements.indices {
possibleSolutions[i].replacements[j].offsetWithRange(docRange)
}
}
}
}
extension Sequence<Problem> {
/// Returns `true` if there are problems with diagnostics with `error` severity.
public var containsErrors: Bool {
return self.contains {
$0.diagnostic.severity == .error
}
}
}
// MARK: Deprecated
extension Problem {
@available(*, deprecated, message: "Use 'DiagnosticConsoleWriter.formattedDescription(for:options:)' instead. This deprecated API will be removed after 5.10 is released")
var localizedDescription: String {
return DiagnosticConsoleWriter.formattedDescription(for: self)
}
@available(*, deprecated, message: "Use 'DiagnosticConsoleWriter.formattedDescription(for:options:)' instead. This deprecated API will be removed after 5.10 is released")
func formattedLocalizedDescription(withOptions options: DiagnosticFormattingOptions = []) -> String {
return DiagnosticConsoleWriter.formattedDescription(for: self, options: options)
}
}
extension Sequence where Element == Problem {
@available(*, deprecated, message: "Use 'DiagnosticConsoleWriter.formattedDescription(for:options:)' instead. This deprecated API will be removed after 5.10 is released")
public var localizedDescription: String {
return map { $0.localizedDescription }.joined(separator: "\n")
}
@available(*, deprecated, message: "Use 'DiagnosticConsoleWriter.formattedDescription(for:options:)' instead. This deprecated API will be removed after 5.10 is released")
public func formattedLocalizedDescription(withOptions options: DiagnosticFormattingOptions) -> String {
return map { $0.formattedLocalizedDescription(withOptions: options) }.joined(separator: "\n")
}
}
|