-
Notifications
You must be signed in to change notification settings - Fork 0
/
config.go
70 lines (57 loc) · 1.29 KB
/
config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package main
import (
"flag"
"log"
"regexp"
)
type config struct {
impRegex *regexp.Regexp
txtRegex *regexp.Regexp
group bool
dir string
exclDirs strSet
}
func makeConfig() config {
c := config{
exclDirs: make(strSet),
}
imp := flag.String("import", "",
"search for import matching the regular expression")
txt := flag.String("text", "",
"search for source code matching the regular expression")
flag.BoolVar(&c.group, "group", false, "group search results")
flag.StringVar(&c.dir, "dir", "",
"directory to search in (default - current directory)")
flag.Var(c.exclDirs, "exclude-dir",
"name of subdirectory to exclude from search")
flag.Parse()
c.setRegex(*imp, *txt)
c.validateDir()
return c
}
func (c *config) setRegex(imp, txt string) {
if imp != "" {
r, err := regexp.Compile(imp)
if err != nil {
log.Fatalf("invalid regular expression for import: %s", err)
}
c.impRegex = r
}
if txt != "" {
r, err := regexp.Compile(txt)
if err != nil {
log.Fatalf("invalid regular expression for source code: %s", err)
}
c.txtRegex = r
}
if c.group && c.txtRegex != nil {
log.Println("warning: ignore group flag for search by sources")
}
}
func (c *config) validateDir() {
if c.dir == "" {
c.dir = getCurDir()
} else {
c.dir = expandDir(c.dir)
}
}