Skip to content

Commit 5822e21

Browse files
committed
Listing go files recursively with -R flag
1 parent bb81abe commit 5822e21

File tree

1 file changed

+52
-3
lines changed

1 file changed

+52
-3
lines changed

main.go

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import (
55
"flag"
66
"fmt"
77
"os"
8+
"path/filepath"
89
"sort"
10+
"strings"
911
)
1012

1113
const (
@@ -19,6 +21,7 @@ const (
1921
var (
2022
printVersion bool
2123
inputFile string
24+
recurse bool
2225
sortOutput bool
2326
silent bool
2427
printTree bool // for debugging
@@ -28,6 +31,7 @@ var (
2831
func init() {
2932
flag.BoolVar(&printVersion, "v", false, "print version")
3033
flag.StringVar(&inputFile, "L", "", "source file names are read from the specified file.")
34+
flag.BoolVar(&recurse, "R", false, "recurse into directories in the file list")
3135
flag.BoolVar(&sortOutput, "sort", true, "sort tags")
3236
flag.BoolVar(&silent, "silent", false, "do not produce any output on error")
3337
flag.BoolVar(&printTree, "tree", false, "print syntax tree (debugging)")
@@ -39,11 +43,37 @@ func init() {
3943
}
4044
}
4145

42-
func getFileNames() ([]string, error) {
43-
var names []string
46+
func walkDir(names []string, dir string) ([]string, error) {
47+
e := filepath.Walk(dir, func(path string, _ os.FileInfo, err error) error {
48+
if err != nil {
49+
return err
50+
}
51+
if strings.HasSuffix(path, ".go") {
52+
names = append(names, path)
53+
}
54+
return nil
55+
})
4456

45-
names = append(names, flag.Args()...)
57+
return names, e
58+
}
4659

60+
func recurseNames(names []string) ([]string, error) {
61+
var ret []string
62+
for _, name := range names {
63+
info, e := os.Stat(name)
64+
if e != nil || info == nil || !info.IsDir() {
65+
ret = append(ret, name) // defer the error handling to the scanner
66+
} else {
67+
ret, e = walkDir(ret, name)
68+
if e != nil {
69+
return names, e
70+
}
71+
}
72+
}
73+
return ret, nil
74+
}
75+
76+
func readNames(names []string) ([]string, error) {
4777
if len(inputFile) == 0 {
4878
return names, nil
4979
}
@@ -71,6 +101,25 @@ func getFileNames() ([]string, error) {
71101
return names, nil
72102
}
73103

104+
func getFileNames() ([]string, error) {
105+
var names []string
106+
107+
names = append(names, flag.Args()...)
108+
names, err := readNames(names)
109+
if err != nil {
110+
return nil, err
111+
}
112+
113+
if recurse {
114+
names, err = recurseNames(names)
115+
if err != nil {
116+
return nil, err
117+
}
118+
}
119+
120+
return names, nil
121+
}
122+
74123
func main() {
75124
flag.Parse()
76125

0 commit comments

Comments
 (0)