diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-24 14:15:26 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-24 14:15:26 +0300 |
| commit | c8b7f1dddd63f1ef02fb9414cfcff5727e98a911 (patch) | |
| tree | 4109718598cfbb8cfa98c7a4e0d4f130d902aab5 | |
| parent | a8bf293f048b91c912c77768b6a7859f58739e9c (diff) | |
Add compile-time interface satisfaction checks (xj)
Add var _ Interface assertions to verify implementations at compile
time:
- internal/rpn/variables.go: assert *Variables against
VariableReader, VariableWriter, VariablePersistence, and
VariableStore
- internal/repl/handlers.go: assert *BuiltInCommandHandler,
*RPNHandler, *PercentageHandler, and *ErrorHandler against
CommandHandler (BaseHandler intentionally excluded as it lacks a
Handle method and is only meant for embedding)
- internal/repl/completer.go: assert *AutoCompleteAdapter against
readline.AutoCompleter (adds readline import)
Note: internal/rpn/constants.go already had assertions in place.
| -rw-r--r-- | internal/repl/completer.go | 5 | ||||
| -rw-r--r-- | internal/repl/handlers.go | 8 | ||||
| -rw-r--r-- | internal/rpn/variables.go | 8 |
3 files changed, 21 insertions, 0 deletions
diff --git a/internal/repl/completer.go b/internal/repl/completer.go index acdd79a..70a0b86 100644 --- a/internal/repl/completer.go +++ b/internal/repl/completer.go @@ -5,6 +5,8 @@ package repl import ( "strings" + + "github.com/chzyer/readline" ) // completer provides auto-completion for built-in commands. @@ -29,6 +31,9 @@ func completer(text string) []string { return suggestions } +// Ensure AutoCompleteAdapter implements readline.AutoCompleter at compile time. +var _ readline.AutoCompleter = (*AutoCompleteAdapter)(nil) + // AutoCompleteAdapter implements the readline AutoCompleter interface, // providing tab-completion suggestions for built-in commands. type AutoCompleteAdapter struct { diff --git a/internal/repl/handlers.go b/internal/repl/handlers.go index a04a76c..cc9336d 100644 --- a/internal/repl/handlers.go +++ b/internal/repl/handlers.go @@ -40,6 +40,14 @@ type CommandHandler interface { SetNext(next CommandHandler) } +// Ensure all handler types implement CommandHandler at compile time. +var ( + _ CommandHandler = (*BuiltInCommandHandler)(nil) + _ CommandHandler = (*RPNHandler)(nil) + _ CommandHandler = (*PercentageHandler)(nil) + _ CommandHandler = (*ErrorHandler)(nil) +) + // BaseHandler provides common functionality for all handlers in the chain. // It stores a reference to the next handler and provides the Next() method // for forwarding requests. diff --git a/internal/rpn/variables.go b/internal/rpn/variables.go index 0ebb52f..eab6546 100644 --- a/internal/rpn/variables.go +++ b/internal/rpn/variables.go @@ -65,6 +65,14 @@ type VariableStore interface { VariablePersistence } +// Ensure Variables implements all variable interfaces at compile time. +var ( + _ VariableReader = (*Variables)(nil) + _ VariableWriter = (*Variables)(nil) + _ VariablePersistence = (*Variables)(nil) + _ VariableStore = (*Variables)(nil) +) + // NewVariables creates and initializes a new Variables instance. func NewVariables() *Variables { return &Variables{ |
