...
1
15
16
17
18
19
20
21
22
23
24 package test_filegroup
25
26 import (
27 "context"
28 "path"
29
30 "github.com/bazelbuild/bazel-gazelle/config"
31 "github.com/bazelbuild/bazel-gazelle/label"
32 "github.com/bazelbuild/bazel-gazelle/language"
33 "github.com/bazelbuild/bazel-gazelle/repo"
34 "github.com/bazelbuild/bazel-gazelle/resolve"
35 "github.com/bazelbuild/bazel-gazelle/rule"
36 )
37
38 const testFilegroupName = "test_filegroup"
39
40 type testFilegroupLang struct {
41 language.BaseLang
42
43 Initialized, RulesGenerated, DepsResolved bool
44 }
45
46 var (
47 _ language.Language = (*testFilegroupLang)(nil)
48 _ language.LifecycleManager = (*testFilegroupLang)(nil)
49 )
50
51 func NewLanguage() language.Language {
52 return &testFilegroupLang{}
53 }
54
55 func (*testFilegroupLang) Name() string { return testFilegroupName }
56
57 func (*testFilegroupLang) Kinds() map[string]rule.KindInfo {
58 return kinds
59 }
60
61 var kinds = map[string]rule.KindInfo{
62 "filegroup": {
63 NonEmptyAttrs: map[string]bool{"srcs": true, "deps": true},
64 MergeableAttrs: map[string]bool{"srcs": true},
65 },
66 }
67
68 func (l *testFilegroupLang) Before(ctx context.Context) {
69 l.Initialized = true
70 }
71
72 func (l *testFilegroupLang) GenerateRules(args language.GenerateArgs) language.GenerateResult {
73 if !l.Initialized {
74 panic("GenerateRules must not be called before Before")
75 }
76 if l.RulesGenerated {
77 panic("GenerateRules must not be called after DoneGeneratingRules")
78 }
79
80 r := rule.NewRule("filegroup", "all_files")
81 srcs := make([]string, 0, len(args.Subdirs)+len(args.RegularFiles))
82 srcs = append(srcs, args.RegularFiles...)
83 for _, f := range args.Subdirs {
84 pkg := path.Join(args.Rel, f)
85 srcs = append(srcs, "//"+pkg+":all_files")
86 }
87 r.SetAttr("srcs", srcs)
88 r.SetAttr("testonly", true)
89 if args.File == nil || !args.File.HasDefaultVisibility() {
90 r.SetAttr("visibility", []string{"//visibility:public"})
91 }
92 return language.GenerateResult{
93 Gen: []*rule.Rule{r},
94 Imports: []interface{}{nil},
95 }
96 }
97
98 func (l *testFilegroupLang) DoneGeneratingRules() {
99 l.RulesGenerated = true
100 }
101
102 func (l *testFilegroupLang) Resolve(c *config.Config, ix *resolve.RuleIndex, rc *repo.RemoteCache, r *rule.Rule, imports interface{}, from label.Label) {
103 if !l.RulesGenerated {
104 panic("Expected a call to DoneGeneratingRules before Resolve")
105 }
106 if l.DepsResolved {
107 panic("Resolve must be called before calling AfterResolvingDeps")
108 }
109 }
110
111 func (l *testFilegroupLang) AfterResolvingDeps(ctx context.Context) {
112 l.DepsResolved = true
113 }
114
View as plain text