fix(lexer): treat trailing CR as line end so comment text is idempotent
Test / test (push) Successful in 2m13s
Test / test (push) Successful in 2m13s
Assisted-by: GLM 5.3 Flash
This commit is contained in:
+7
-3
@@ -186,15 +186,19 @@ func (l *Lexer) Next() token.Token {
|
||||
}
|
||||
|
||||
// lineComment consumes a // comment up to, but not including, the newline. A
|
||||
// trailing \r is part of a CRLF line ending rather than comment content:
|
||||
// dropping it keeps the formatter's output uniformly LF-terminated.
|
||||
// trailing run of \r, spaces and tabs is line-ending whitespace rather than
|
||||
// comment content, so it never enters the token text. Trimming only a \r
|
||||
// directly before the token's end would make the text depend on what follows
|
||||
// the comment (a newline or the end of the input): "//x\r " would carry the
|
||||
// "\r " while "//x\r\n" would not, and a formatter that terminates the line
|
||||
// with \n would then re-lex its own output to a shorter comment.
|
||||
func (l *Lexer) lineComment(start token.Position) token.Token {
|
||||
var b strings.Builder
|
||||
for !l.atEnd() && l.cur() != '\n' {
|
||||
b.WriteRune(l.cur())
|
||||
l.advance()
|
||||
}
|
||||
return l.make(token.Comment, start, strings.TrimSuffix(b.String(), "\r"))
|
||||
return l.make(token.Comment, start, strings.TrimRight(b.String(), " \t\r"))
|
||||
}
|
||||
|
||||
// blockComment consumes a /* ... */ comment, tolerating an unterminated one.
|
||||
|
||||
Reference in New Issue
Block a user