forked from cuonglm/gocmt
-
Notifications
You must be signed in to change notification settings - Fork 0
/
helper.go
73 lines (64 loc) · 1.38 KB
/
helper.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
71
72
73
package main
import (
"go/ast"
"go/scanner"
"os"
"strings"
)
func isGoFile(f os.FileInfo) bool {
name := f.Name()
return !f.IsDir() && !strings.HasPrefix(name, ".") && strings.HasSuffix(name, ".go")
}
func printError(err error) {
scanner.PrintError(os.Stderr, err)
}
func walkFunc(path string, fi os.FileInfo, err error) error {
if err == nil && isGoFile(fi) {
err = processFile(path, *template, *inPlace)
}
if err != nil {
return err
}
return nil
}
func isLineComment(comment *ast.CommentGroup) bool {
if comment == nil {
return false
}
if len(comment.List) == 0 {
return false
}
head := comment.List[0].Text
head = strings.TrimSpace(head)
return strings.HasPrefix(head, "//")
}
func hasCommentPrefix(comment *ast.CommentGroup, prefix string) bool {
return strings.HasPrefix(strings.TrimSpace(comment.Text()), prefix)
}
func appendCommentGroup(list []*ast.CommentGroup, item *ast.CommentGroup) []*ast.CommentGroup {
ret := []*ast.CommentGroup{}
hasInsert := false
for _, group := range list {
if group.Pos() < item.Pos() {
ret = append(ret, group)
continue
}
if group.Pos() == item.Pos() {
ret = append(ret, item)
hasInsert = true
continue
}
if group.Pos() > item.Pos() {
if !hasInsert {
ret = append(ret, item)
hasInsert = true
}
ret = append(ret, group)
continue
}
}
if !hasInsert {
ret = append(ret, item)
}
return ret
}