this repo has no description

tsquery: add option to print capture names

+22 -5
+22 -5
tsquery/main.go
··· 34 34 fs := flag.NewFlagSet("tsquery", flag.ExitOnError) 35 35 fs.SetOutput(stderr) 36 36 37 - flagLang := fs.String("l", "go", "language") 38 - var flagCaptues stringsFlag 37 + var ( 38 + flagLang string 39 + flagCaptues stringsFlag 40 + flagWithCaptureNames bool 41 + ) 42 + 43 + fs.StringVar(&flagLang, "l", "go", "language") 39 44 fs.Var(&flagCaptues, "c", "captures to output (comma-separated)") 45 + fs.BoolVar(&flagWithCaptureNames, "n", false, "output capture names") 40 46 41 47 fs.Usage = func() { 42 48 fmt.Fprintf(fs.Output(), "Usage: %s [options] <query> [<file>]\n", fs.Name()) ··· 70 76 } 71 77 72 78 lang := golang.GetLanguage() 73 - switch *flagLang { 79 + switch flagLang { 74 80 case "go": 75 81 lang = golang.GetLanguage() 76 82 default: 77 - return fmt.Errorf("unsupported language: %s", *flagLang) 83 + return fmt.Errorf("unsupported language: %s", flagLang) 84 + } 85 + 86 + dump := func(capture string, value string) { 87 + fmt.Fprintln(stdout, value) 88 + } 89 + 90 + if flagWithCaptureNames { 91 + dump = func(capture string, value string) { 92 + fmt.Fprintf(stdout, "%s: %s\n", capture, value) 93 + } 78 94 } 79 95 80 96 src, err := io.ReadAll(in) ··· 107 123 continue 108 124 } 109 125 110 - fmt.Fprintf(stdout, "%s: %s\n", capture, c.Node.Content(src)) 126 + value := c.Node.Content(src) 127 + dump(capture, value) 111 128 } 112 129 } 113 130