PureYAML/Sources/Model/SourcePosition.swift
Mihaela Mihaljevic 3f3ce310b1 feat(parsing): opt-in located parse with source spans on every node
Add parseLocated / parseStreamLocated, returning a Model.LocatedValue
tree parallel in shape to Value, where every node carries its source
span (1-based line/column) and located children. Collections span from
their opening to closing event; scalars carry a start-anchored span;
aliases and merge-inherited pairs honestly point at their reference site.

The plain Value, its equality, and the conformance oracle are untouched:
locations are built only when the streaming composer is asked for them
(tracksLocations), behind new entry points, so the default value path is
byte-identical. A whole-suite test proves the located projection equals
a plain parse for every passing case (402/402), including through merge
keys and aliases, and the canonical-event and gap gates stay green.
2026-06-26 00:57:55 +02:00

20 lines
782 B
Swift

public extension PureYAML.Model {
/// A 1-based line/column position in the source text. Carried by ``LocatedValue`` so a
/// consumer (an editor, a linter, a CI report) can point at exactly where a value-tree
/// node was written. Positions live on the parallel located tree, never on ``Value``,
/// so the plain value tree and its equality stay free of source coordinates.
struct SourcePosition: Equatable, Hashable, Sendable, Comparable {
public var line: Int
public var column: Int
public init(line: Int, column: Int) {
self.line = line
self.column = column
}
public static func < (lhs: Self, rhs: Self) -> Bool {
(lhs.line, lhs.column) < (rhs.line, rhs.column)
}
}
}