Split the six files that declared multiple sibling types under one namespace extension so each file declares exactly one top-level type: the Tagged node component types (Node, NodeKind, Scalar, Sequence, Mapping, Pair), the validation report types (Report, Source, SourceReport, BatchReport), DiagnosticKind, TokenKind, ScannerFlowContext kind, and the event-stream composer helpers. Public type names are unchanged; the shared report-rendering helpers move from file-private to internal so the split report types still reach them. Make check-namespacing.sh namespace-aware: the previous column-anchored scan was blind to types declared inside indented extension blocks, so it passed while the rule was violated. It now counts direct members of a PureYAML namespace extension and ignores nested types and private helpers.
97 lines
2.7 KiB
Swift
97 lines
2.7 KiB
Swift
extension PureYAML.Parsing {
|
|
enum TokenKind: Equatable {
|
|
case streamStart
|
|
case streamEnd
|
|
case documentStart
|
|
case documentEnd
|
|
case indent(width: Int)
|
|
case dedent(width: Int)
|
|
case blockEntry
|
|
case mappingKey
|
|
case mappingValue
|
|
case flowSequenceStart
|
|
case flowSequenceEnd
|
|
case flowMappingStart
|
|
case flowMappingEnd
|
|
case flowEntry
|
|
case scalar(value: String, style: ScalarStyle)
|
|
case blockScalarHeader(style: BlockScalarStyle, chomping: BlockScalarChomping)
|
|
case anchor(String)
|
|
case alias(String)
|
|
case tag(String)
|
|
case comment(String)
|
|
}
|
|
}
|
|
|
|
extension PureYAML.Parsing.TokenKind: CustomStringConvertible {
|
|
var description: String {
|
|
switch self {
|
|
case .streamStart:
|
|
"streamStart"
|
|
case .streamEnd:
|
|
"streamEnd"
|
|
case .documentStart:
|
|
"documentStart"
|
|
case .documentEnd:
|
|
"documentEnd"
|
|
case let .indent(width):
|
|
"indent width=\(width)"
|
|
case let .dedent(width):
|
|
"dedent width=\(width)"
|
|
case .blockEntry:
|
|
"blockEntry"
|
|
case .mappingKey:
|
|
"mappingKey"
|
|
case .mappingValue:
|
|
"mappingValue"
|
|
case .flowSequenceStart:
|
|
"flowSequenceStart"
|
|
case .flowSequenceEnd:
|
|
"flowSequenceEnd"
|
|
case .flowMappingStart:
|
|
"flowMappingStart"
|
|
case .flowMappingEnd:
|
|
"flowMappingEnd"
|
|
case .flowEntry:
|
|
"flowEntry"
|
|
case let .scalar(value, style):
|
|
"scalar value=\"\(escape(value))\" style=\(style)"
|
|
case let .blockScalarHeader(style, chomping):
|
|
if chomping == .clip {
|
|
"blockScalarHeader style=\(style)"
|
|
} else {
|
|
"blockScalarHeader style=\(style) chomping=\(chomping)"
|
|
}
|
|
case let .anchor(value):
|
|
"anchor name=\(value)"
|
|
case let .alias(value):
|
|
"alias name=\(value)"
|
|
case let .tag(value):
|
|
"tag value=\(value)"
|
|
case let .comment(value):
|
|
"comment value=\"\(escape(value))\""
|
|
}
|
|
}
|
|
|
|
private func escape(_ value: String) -> String {
|
|
var output = ""
|
|
for character in value {
|
|
switch character {
|
|
case "\\":
|
|
output += "\\\\"
|
|
case "\"":
|
|
output += "\\\""
|
|
case "\n":
|
|
output += "\\n"
|
|
case "\r":
|
|
output += "\\r"
|
|
case "\t":
|
|
output += "\\t"
|
|
default:
|
|
output.append(character)
|
|
}
|
|
}
|
|
return output
|
|
}
|
|
}
|