Initial commit

This commit is contained in:
2026-03-05 01:13:19 -06:00
commit 1ae223a1dc
21 changed files with 2404 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
package cmd
import (
"fmt"
"github.com/runescape-wiki/rsw/internal/render"
"github.com/runescape-wiki/rsw/internal/wiki"
"github.com/spf13/cobra"
)
func newSearchCmd() *cobra.Command {
var searchLimit int
cmd := &cobra.Command{
Use: "search <query>",
Short: "Search the wiki for pages matching a query",
Long: `Search performs a full-text search across the wiki and returns
matching page titles with short snippets.
Examples:
rsw osrs search "dragon scimitar"
rsw rs3 search "mining training"`,
Args: cobra.MinimumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
query := args[0]
client := wiki.NewClient(GameBaseURL())
results, err := client.Search(query, searchLimit)
if err != nil {
return fmt.Errorf("search failed: %w", err)
}
if len(results) == 0 {
fmt.Println("No results found.")
return nil
}
md := render.New()
md.H2(fmt.Sprintf("Search results for \"%s\"", query))
for i, r := range results {
md.NumberedItem(i+1, fmt.Sprintf("**%s**", r.Title))
if r.Snippet != "" {
md.Line(fmt.Sprintf(" %s", r.Snippet))
}
}
md.Newline()
fmt.Print(md.String())
return nil
},
}
cmd.Flags().IntVar(&searchLimit, "limit", 10, "Maximum number of results")
return cmd
}
func init() {
RegisterCommand(newSearchCmd)
}