Noir::KotlinSourceMask
Character-preserving masks over Kotlin source text.
Both masks replace every masked-out character with a single space and
keep every newline, so the result lines up with the original by
character: masked[i] describes source[i], masked.lines[n] is
exactly as long as source.lines[n], and a Regex::MatchData#end
taken on the masked copy can be used to slice the raw text. Callers
depend on that to gate a line scan on the masked copy while reading
the real value out of the raw source.
One space per character, not per byte: Crystal's String#[] and
MatchData#begin/#end are char-indexed while the scanner walks bytes,
so emitting one space per byte made every offset after a non-ASCII
comment (a CJK line above a route, an accented author name) drift by
the number of continuation bytes and over-trimmed the raw line.
Constants
Instance methods
Comments blanked, string literals kept verbatim. Use this to run a
line regex that has to read a literal value — const val PATH = "/mcp" — without also harvesting a commented-out declaration.