Documentation
¶
Overview ¶
Package repl provides composable components for building interactive Scheme REPLs on top of the Wile engine.
Components can be used independently or composed into a full REPL:
- REPL: Full read-eval-print loop with readline support
- MetaCommandHandler: Comma-prefixed commands (,doc, ,apropos, etc.)
- Completer: Tab completion for bindings and commands
- DebugContext: Breakpoints, stepping, backtrace
- DocProvider: Documentation lookup interface
- RegistryDocProvider: Registry-backed documentation
All components that need engine access take *wile.Engine at construction time. The REPL composes the other components with sensible defaults; embedders can construct and configure individual components for custom use.
Index ¶
- func StripExamples(doc string) string
- type Completer
- type DebugCommandInfo
- type DebugContext
- type DocInfo
- type DocProvider
- type DocSearchProvider
- type MetaCommandHandler
- func (p *MetaCommandHandler) Commands() []string
- func (p *MetaCommandHandler) DisassembleBinding(name string) (string, error)
- func (p *MetaCommandHandler) Handle(ctx context.Context, line string, out io.Writer) bool
- func (p *MetaCommandHandler) SetDebugContext(dc *DebugContext)
- func (p *MetaCommandHandler) SetPager(pager string)
- type MetaOption
- type Option
- func WithCompleter(c *Completer) Option
- func WithContinuationPrompt(prompt string) Option
- func WithDebugContext(dc *DebugContext) Option
- func WithDocProvider(dp DocProvider) Option
- func WithErrorOutput(w io.Writer) Option
- func WithHistoryFile(path string) Option
- func WithOutput(w io.Writer) Option
- func WithPrompt(prompt string) Option
- type REPL
- type RegistryDocProvider
- func (p *RegistryDocProvider) ByCategory(category string) []registry.DocSearchResult
- func (p *RegistryDocProvider) Categories() []string
- func (p *RegistryDocProvider) LookupDoc(name string) (DocInfo, bool)
- func (p *RegistryDocProvider) Search(ctx context.Context, pattern string) []registry.DocSearchResult
- func (p *RegistryDocProvider) UnloadedLibraries(ctx context.Context) []*wile.LibraryInfo
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func StripExamples ¶
StripExamples removes the Examples: section from a docstring. Returns the description portion only. If no Examples: section exists, returns the original string unchanged.
Types ¶
type Completer ¶
type Completer struct {
// contains filtered or unexported fields
}
Completer implements readline.AutoCompleter for a Wile REPL. It completes Scheme bindings, meta-command names, and filenames.
func NewCompleter ¶
NewCompleter creates a completer. eng may be nil if only meta-command completion is needed.
func (*Completer) BindingNames ¶
BindingNames returns all binding names visible in the environment.
type DebugCommandInfo ¶
type DebugCommandInfo struct {
Name string
Aliases []string
Summary string
Detail string
Handler func(args []string, out io.Writer)
}
DebugCommandInfo describes a single debug command: its canonical name, aliases, summary text, detail text, and handler function.
type DebugContext ¶
type DebugContext struct {
// contains filtered or unexported fields
}
DebugContext holds the state for debug commands.
func NewDebugContext ¶
func NewDebugContext() *DebugContext
NewDebugContext creates a new debug context.
func (*DebugContext) DebugCommands ¶
func (p *DebugContext) DebugCommands() []DebugCommandInfo
DebugCommands returns the canonical list of debug commands with bound handlers.
func (*DebugContext) Debugger ¶
func (p *DebugContext) Debugger() *wile.Debugger
Debugger returns the debugger instance.
func (*DebugContext) HandleDebugCommand ¶
func (p *DebugContext) HandleDebugCommand(line string, out io.Writer) bool
HandleDebugCommand processes a debug command starting with ','. Returns true if a command was handled, false otherwise.
func (*DebugContext) SetCurrentState ¶ added in v1.13.14
func (p *DebugContext) SetCurrentState(state values.DebugState)
SetCurrentState sets the current debug state (for inspection commands).
type DocInfo ¶
type DocInfo struct {
Doc string
Syntax string // e.g. "(if <test> <consequent> <alternate>)"
TypeLabel string // e.g. "special form", "syntax"
ParamNames []string
Category string
ParamCount int
IsVariadic bool
ParamTypes []values.TypeConstraint
ReturnType values.TypeConstraint
Keywords []string
}
DocInfo holds documentation for a primitive binding.
type DocProvider ¶
type DocProvider interface {
// LookupDoc returns documentation for the named primitive.
// Returns found=false if no documentation exists.
LookupDoc(name string) (info DocInfo, found bool)
}
DocProvider looks up documentation for named bindings.
type DocSearchProvider ¶
type DocSearchProvider interface {
DocProvider
// Search returns entries whose name, doc, or category contains pattern
// (case-insensitive substring match). Results are sorted by name.
Search(ctx context.Context, pattern string) []registry.DocSearchResult
// Categories returns sorted category names.
Categories() []string
// ByCategory returns entries in the named category, sorted by name.
ByCategory(category string) []registry.DocSearchResult
}
DocSearchProvider extends DocProvider with search and category browsing.
type MetaCommandHandler ¶
type MetaCommandHandler struct {
// contains filtered or unexported fields
}
MetaCommandHandler dispatches comma-prefixed meta-commands. Session commands (help, doc, edit) are handled directly; debug commands are delegated to DebugContext.
func NewMetaCommandHandler ¶
func NewMetaCommandHandler(eng *wile.Engine, opts ...MetaOption) *MetaCommandHandler
NewMetaCommandHandler creates a new meta-command handler.
func (*MetaCommandHandler) Commands ¶
func (p *MetaCommandHandler) Commands() []string
Commands returns all meta-command names and aliases (session + debug) for autocomplete.
func (*MetaCommandHandler) DisassembleBinding ¶
func (p *MetaCommandHandler) DisassembleBinding(name string) (string, error)
DisassembleBinding looks up a named binding and returns its formatted disassembly. Returns an error if the name is unbound, nil, or not a procedure. Exported for use by the MCP handler.
func (*MetaCommandHandler) Handle ¶
Handle processes a line starting with ",". Returns true if the line was a meta-command (even if unrecognized), false if it's not a meta-command.
func (*MetaCommandHandler) SetDebugContext ¶
func (p *MetaCommandHandler) SetDebugContext(dc *DebugContext)
SetDebugContext attaches a debug context for debug command delegation.
func (*MetaCommandHandler) SetPager ¶
func (p *MetaCommandHandler) SetPager(pager string)
SetPager overrides the pager command used for long output. Pass "" to disable paging (e.g., for non-TTY contexts like MCP).
type MetaOption ¶
type MetaOption func(*MetaCommandHandler)
MetaOption configures a MetaCommandHandler.
func WithMetaDocProvider ¶
func WithMetaDocProvider(dp DocProvider) MetaOption
WithMetaDocProvider sets the documentation provider for the meta handler.
type Option ¶
type Option func(*REPL)
Option configures a REPL.
func WithCompleter ¶
WithCompleter sets an externally-created completer.
func WithContinuationPrompt ¶
WithContinuationPrompt sets the continuation prompt for multi-line input.
func WithDebugContext ¶
func WithDebugContext(dc *DebugContext) Option
WithDebugContext sets an externally-created debug context.
func WithDocProvider ¶
func WithDocProvider(dp DocProvider) Option
WithDocProvider sets the documentation provider for the ,doc command.
func WithErrorOutput ¶
WithErrorOutput sets the error output writer.
func WithHistoryFile ¶
WithHistoryFile sets the history file path.
type REPL ¶
type REPL struct {
// contains filtered or unexported fields
}
REPL is an interactive Read-Eval-Print Loop.
type RegistryDocProvider ¶
type RegistryDocProvider struct {
// contains filtered or unexported fields
}
RegistryDocProvider adapts a registry.Registry to the DocProvider interface.
func NewRegistryDocProvider ¶
func NewRegistryDocProvider(reg *registry.Registry, eng *wile.Engine) *RegistryDocProvider
NewRegistryDocProvider creates a DocProvider backed by the given registry. eng may be nil; when non-nil, Search includes loaded and unloaded libraries.
func (*RegistryDocProvider) ByCategory ¶
func (p *RegistryDocProvider) ByCategory(category string) []registry.DocSearchResult
ByCategory returns entries in the named category, sorted by name.
func (*RegistryDocProvider) Categories ¶
func (p *RegistryDocProvider) Categories() []string
Categories returns sorted category names, excluding the empty-string category.
func (*RegistryDocProvider) LookupDoc ¶
func (p *RegistryDocProvider) LookupDoc(name string) (DocInfo, bool)
LookupDoc returns documentation for the named binding from the registry. It checks primitives first, then falls back to binding specs and doc entries.
func (*RegistryDocProvider) Search ¶
func (p *RegistryDocProvider) Search(ctx context.Context, pattern string) []registry.DocSearchResult
Search returns entries whose name, doc, or category contains pattern (case-insensitive substring match). Results are sorted by name. Delegates to registry.SearchDoc for non-library results, then appends library results from the Engine's loaded and unloaded library methods.
The library matching logic here mirrors registry.SearchDoc's searchLibraries/searchUnloadedExports functions but operates on wile.LibraryInfo instead of compilation.* types. This duplication is a structural consequence of decoupling repl/ from machine/compilation/.
func (*RegistryDocProvider) UnloadedLibraries ¶ added in v1.12.0
func (p *RegistryDocProvider) UnloadedLibraries(ctx context.Context) []*wile.LibraryInfo
UnloadedLibraries returns info for libraries that are discoverable via the file resolver but not yet imported. Returns nil if no engine is available.