From c8b7f1dddd63f1ef02fb9414cfcff5727e98a911 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 24 May 2026 14:15:26 +0300 Subject: 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. --- internal/repl/completer.go | 5 +++++ internal/repl/handlers.go | 8 ++++++++ internal/rpn/variables.go | 8 ++++++++ 3 files changed, 21 insertions(+) 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{ -- cgit v1.2.3