docs: document remaining packages and simplify AST types (#45)

## Summary

- Added doc comments across the codebase: `pkg/lambda`, `pkg/saccharine`, `pkg/codec`, `pkg/engine`, `pkg/iterator`, `pkg/set`, `pkg/convert`, `internal/registry`, and `cmd/lambda`.
- Made lambda and saccharine expression structs use public fields instead of getters, matching `go/ast` conventions.
- Removed superfluous constructors for saccharine and lambda expression/statement types in favor of struct literals.
- Consolidated saccharine token constructors into a single `NewToken` function.
- Removed the unused `trace` package.

## Test plan

- [x] `go build ./...` passes.
- [x] `go test ./...` passes.
- [ ] Verify `go doc` output renders correctly for documented packages.

Reviewed-on: #45
Co-authored-by: M.V. Hutz <git@maximhutz.me>
Co-committed-by: M.V. Hutz <git@maximhutz.me>
This commit was merged in pull request #45.
This commit is contained in:
2026-02-10 01:15:41 +00:00
committed by Maxim Hutz
parent 1f486875fd
commit 361f529bdc
33 changed files with 506 additions and 463 deletions

View File

@@ -6,7 +6,6 @@ import (
"unicode"
"git.maximhutz.com/max/lambda/pkg/iterator"
"git.maximhutz.com/max/lambda/pkg/trace"
)
// isVariables determines whether a rune can be a valid variable.
@@ -51,38 +50,38 @@ func scanToken(i *iterator.Iterator[rune]) (*Token, error) {
letter, err := i.Next()
if err != nil {
return nil, trace.Wrap(err, "cannot produce next token")
return nil, fmt.Errorf("cannot produce next token: %w", err)
}
switch {
case letter == '(':
return NewTokenOpenParen(index), nil
return NewToken(TokenOpenParen, index), nil
case letter == ')':
return NewTokenCloseParen(index), nil
return NewToken(TokenCloseParen, index), nil
case letter == '.':
return NewTokenDot(index), nil
return NewToken(TokenDot, index), nil
case letter == '\\':
return NewTokenSlash(index), nil
return NewToken(TokenSlash, index), nil
case letter == '\n':
return NewTokenSoftBreak(index), nil
return NewToken(TokenSoftBreak, index), nil
case letter == '{':
return NewTokenOpenBrace(index), nil
return NewToken(TokenOpenBrace, index), nil
case letter == '}':
return NewTokenCloseBrace(index), nil
return NewToken(TokenCloseBrace, index), nil
case letter == ':':
if _, err := scanCharacter(i, '='); err != nil {
return nil, err
} else {
return NewTokenAssign(index), nil
return NewToken(TokenAssign, index), nil
}
case letter == ';':
return NewTokenHardBreak(index), nil
return NewToken(TokenHardBreak, index), nil
case letter == '#':
// Skip everything until the next newline or EOF.
for !i.Done() {
r, err := i.Next()
if err != nil {
return nil, trace.Wrap(err, "error while parsing comment")
return nil, fmt.Errorf("error while parsing comment: %w", err)
}
if r == '\n' {