package cmd import ( "fmt" "github.com/jasonross/text-shark/internal/fileops" "github.com/jasonross/text-shark/internal/runner" "github.com/spf13/cobra" ) var ( deleteLineDryRun bool deleteLineType string deleteLineGlob string deleteLineRegex bool ) var deleteLineCmd = &cobra.Command{ Use: "delete-line [path]", Short: "Delete all lines matching from files", Args: cobra.RangeArgs(1, 2), RunE: func(cmd *cobra.Command, args []string) error { pattern := args[0] path := "." if len(args) == 2 { path = args[1] } var rgExtra []string if deleteLineType != "" { rgExtra = append(rgExtra, "--type", deleteLineType) } if deleteLineGlob != "" { rgExtra = append(rgExtra, "--glob", deleteLineGlob) } files, err := runner.RgListFiles(pattern, path, rgExtra...) if err != nil { return err } if len(files) == 0 { fmt.Println("No matches found.") return nil } var results []fileops.DeleteResult for _, f := range files { var res fileops.DeleteResult if deleteLineRegex { res, err = fileops.DeleteLinesInFileRegex(f, pattern, deleteLineDryRun) } else { res, err = fileops.DeleteLinesInFile(f, pattern, deleteLineDryRun) } if err != nil { return fmt.Errorf("%s: %w", f, err) } results = append(results, res) } if deleteLineDryRun { fmt.Println("[dry-run] would modify:") } fileops.PrintDeleteResults(results) return nil }, } func init() { deleteLineCmd.Flags().BoolVar(&deleteLineDryRun, "dry-run", false, "Print what would change without writing") deleteLineCmd.Flags().StringVarP(&deleteLineType, "type", "t", "", "File type filter (e.g. go, py)") deleteLineCmd.Flags().StringVarP(&deleteLineGlob, "glob", "g", "", "Glob pattern for file paths") deleteLineCmd.Flags().BoolVarP(&deleteLineRegex, "regex", "r", false, "Treat pattern as a regular expression") }