feat: add comment support to saccharine language #25

Merged
mvhutz merged 3 commits from feat/comment-support into main 2026-01-13 02:00:01 +00:00
3 changed files with 33 additions and 0 deletions
Showing only changes of commit 6418e05255 - Show all commits

View File

@@ -77,6 +77,23 @@ func getToken(i *iterator.Iterator[rune]) (*Token, error) {
} }
case letter == ';': case letter == ';':
return NewHardBreak(index), nil return NewHardBreak(index), nil
case letter == '#':
// Skip everything until the next newline or EOF
for {
if i.Done() {
break
}
r, err := i.Next()
if err != nil {
return nil, trace.Wrap(err, "error while parsing comment")
}
if r == '\n' {
// Put the newline back so it can be processed as a soft break
i.Back()
break
}
}
return nil, nil
case unicode.IsSpace(letter): case unicode.IsSpace(letter):
return nil, nil return nil, nil
case isVariable(letter): case isVariable(letter):

1
tests/comments.expected Normal file
View File

@@ -0,0 +1 @@
VALUE

15
tests/comments.test Normal file
View File

@@ -0,0 +1,15 @@
# This is a full-line comment at the start
# The following defines the identity function
identity := \x.x # This is an end-of-line comment
# Define a simple function that applies a function twice
twice := \f.\x.(f (f x))
# Test that comments don't interfere with expressions
result := (twice identity VALUE) # Should just return VALUE
# Multiple comments in a row
# can appear anywhere
# without breaking the code
result # Final comment at the end