class
Noir::ScalaLexer
- Noir::ScalaLexer
- Reference
- Object
Overview
ScalaLexer is a hand-rolled structural lexer for Scala source, modelled on
Noir::PhpLexer / Noir::CSharpLexer. The Scala analyzers used to strip
each line in isolation (strip_non_code_with_state(line, 0, false)),
resetting the block-comment depth and multiline-string flag on every line,
so route-shaped DSL inside a """…""" triple-quoted string or a multi-line
/* … */ comment leaked as phantom endpoints. This lexer threads that state
across the whole file once.
Two masked views are produced, both the same length as the source with newlines preserved:
masked(structural): strings, comments, triple-quotes and char literals are all blanked — used for brace/paren matching.#code: comments, triple-quoted bodies and char literals are blanked, but regular"…"string literals are PRESERVED, because Scala routes are string arguments (path("users")) that the analyzers read back.
Scala specifics handled: nested block comments (/* /* */ */), triple-quoted
raw strings spanning lines, regular strings with \ escapes, and 'x' /
'\n' char literals (left as code when it is actually a 'sym symbol).
Included Modules
Defined in:
minilexers/scala_lexer.crConstructors
Instance Method Summary
- #code : Array(Char)
-
#code_lines : Array(String)
Code masked source split into lines (1:1 with
String#lines). -
#masked_lines : Array(String)
Structural masked source split into lines (1:1 with
String#lines). - #tokens : Array(ScalaToken)
Instance methods inherited from module Noir::MaskedLexer
in_code?(pos : Int32) : Bool
in_code?,
masked : Array(Char)
masked,
matching_delimiter(open_pos : Int32) : Int32 | Nil
matching_delimiter,
skip_ranges : Array(Range(Int32, Int32))
skip_ranges,
statement_end(start_pos : Int32) : Int32
statement_end
Constructor Detail
Instance Method Detail
Code masked source split into lines (1:1 with String#lines). Comments,
triple-quote bodies and char literals are blanked; regular strings kept.
Structural masked source split into lines (1:1 with String#lines).