xref: /aosp_15_r20/external/bazelbuild-rules_python/gazelle/python/kinds.go (revision 60517a1edbc8ecf509223e9af94a7adec7d736b8)
1*60517a1eSAndroid Build Coastguard Worker// Copyright 2023 The Bazel Authors. All rights reserved.
2*60517a1eSAndroid Build Coastguard Worker//
3*60517a1eSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*60517a1eSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*60517a1eSAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*60517a1eSAndroid Build Coastguard Worker//
7*60517a1eSAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*60517a1eSAndroid Build Coastguard Worker//
9*60517a1eSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*60517a1eSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*60517a1eSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*60517a1eSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*60517a1eSAndroid Build Coastguard Worker// limitations under the License.
14*60517a1eSAndroid Build Coastguard Worker
15*60517a1eSAndroid Build Coastguard Workerpackage python
16*60517a1eSAndroid Build Coastguard Worker
17*60517a1eSAndroid Build Coastguard Workerimport (
18*60517a1eSAndroid Build Coastguard Worker	"github.com/bazelbuild/bazel-gazelle/rule"
19*60517a1eSAndroid Build Coastguard Worker)
20*60517a1eSAndroid Build Coastguard Worker
21*60517a1eSAndroid Build Coastguard Workerconst (
22*60517a1eSAndroid Build Coastguard Worker	pyBinaryKind  = "py_binary"
23*60517a1eSAndroid Build Coastguard Worker	pyLibraryKind = "py_library"
24*60517a1eSAndroid Build Coastguard Worker	pyTestKind    = "py_test"
25*60517a1eSAndroid Build Coastguard Worker)
26*60517a1eSAndroid Build Coastguard Worker
27*60517a1eSAndroid Build Coastguard Worker// Kinds returns a map that maps rule names (kinds) and information on how to
28*60517a1eSAndroid Build Coastguard Worker// match and merge attributes that may be found in rules of those kinds.
29*60517a1eSAndroid Build Coastguard Workerfunc (*Python) Kinds() map[string]rule.KindInfo {
30*60517a1eSAndroid Build Coastguard Worker	return pyKinds
31*60517a1eSAndroid Build Coastguard Worker}
32*60517a1eSAndroid Build Coastguard Worker
33*60517a1eSAndroid Build Coastguard Workervar pyKinds = map[string]rule.KindInfo{
34*60517a1eSAndroid Build Coastguard Worker	pyBinaryKind: {
35*60517a1eSAndroid Build Coastguard Worker		MatchAny: true,
36*60517a1eSAndroid Build Coastguard Worker		NonEmptyAttrs: map[string]bool{
37*60517a1eSAndroid Build Coastguard Worker			"deps":    true,
38*60517a1eSAndroid Build Coastguard Worker			"main":    true,
39*60517a1eSAndroid Build Coastguard Worker			"srcs":    true,
40*60517a1eSAndroid Build Coastguard Worker			"imports": true,
41*60517a1eSAndroid Build Coastguard Worker		},
42*60517a1eSAndroid Build Coastguard Worker		SubstituteAttrs: map[string]bool{},
43*60517a1eSAndroid Build Coastguard Worker		MergeableAttrs: map[string]bool{
44*60517a1eSAndroid Build Coastguard Worker			"srcs": true,
45*60517a1eSAndroid Build Coastguard Worker		},
46*60517a1eSAndroid Build Coastguard Worker		ResolveAttrs: map[string]bool{
47*60517a1eSAndroid Build Coastguard Worker			"deps": true,
48*60517a1eSAndroid Build Coastguard Worker		},
49*60517a1eSAndroid Build Coastguard Worker	},
50*60517a1eSAndroid Build Coastguard Worker	pyLibraryKind: {
51*60517a1eSAndroid Build Coastguard Worker		MatchAny:   false,
52*60517a1eSAndroid Build Coastguard Worker		MatchAttrs: []string{"srcs"},
53*60517a1eSAndroid Build Coastguard Worker		NonEmptyAttrs: map[string]bool{
54*60517a1eSAndroid Build Coastguard Worker			"deps":    true,
55*60517a1eSAndroid Build Coastguard Worker			"srcs":    true,
56*60517a1eSAndroid Build Coastguard Worker			"imports": true,
57*60517a1eSAndroid Build Coastguard Worker		},
58*60517a1eSAndroid Build Coastguard Worker		SubstituteAttrs: map[string]bool{},
59*60517a1eSAndroid Build Coastguard Worker		MergeableAttrs: map[string]bool{
60*60517a1eSAndroid Build Coastguard Worker			"srcs": true,
61*60517a1eSAndroid Build Coastguard Worker		},
62*60517a1eSAndroid Build Coastguard Worker		ResolveAttrs: map[string]bool{
63*60517a1eSAndroid Build Coastguard Worker			"deps": true,
64*60517a1eSAndroid Build Coastguard Worker		},
65*60517a1eSAndroid Build Coastguard Worker	},
66*60517a1eSAndroid Build Coastguard Worker	pyTestKind: {
67*60517a1eSAndroid Build Coastguard Worker		MatchAny: false,
68*60517a1eSAndroid Build Coastguard Worker		NonEmptyAttrs: map[string]bool{
69*60517a1eSAndroid Build Coastguard Worker			"deps":    true,
70*60517a1eSAndroid Build Coastguard Worker			"main":    true,
71*60517a1eSAndroid Build Coastguard Worker			"srcs":    true,
72*60517a1eSAndroid Build Coastguard Worker			"imports": true,
73*60517a1eSAndroid Build Coastguard Worker		},
74*60517a1eSAndroid Build Coastguard Worker		SubstituteAttrs: map[string]bool{},
75*60517a1eSAndroid Build Coastguard Worker		MergeableAttrs: map[string]bool{
76*60517a1eSAndroid Build Coastguard Worker			"srcs": true,
77*60517a1eSAndroid Build Coastguard Worker		},
78*60517a1eSAndroid Build Coastguard Worker		ResolveAttrs: map[string]bool{
79*60517a1eSAndroid Build Coastguard Worker			"deps": true,
80*60517a1eSAndroid Build Coastguard Worker		},
81*60517a1eSAndroid Build Coastguard Worker	},
82*60517a1eSAndroid Build Coastguard Worker}
83*60517a1eSAndroid Build Coastguard Worker
84*60517a1eSAndroid Build Coastguard Worker// Loads returns .bzl files and symbols they define. Every rule generated by
85*60517a1eSAndroid Build Coastguard Worker// GenerateRules, now or in the past, should be loadable from one of these
86*60517a1eSAndroid Build Coastguard Worker// files.
87*60517a1eSAndroid Build Coastguard Workerfunc (py *Python) Loads() []rule.LoadInfo {
88*60517a1eSAndroid Build Coastguard Worker	return pyLoads
89*60517a1eSAndroid Build Coastguard Worker}
90*60517a1eSAndroid Build Coastguard Worker
91*60517a1eSAndroid Build Coastguard Workervar pyLoads = []rule.LoadInfo{
92*60517a1eSAndroid Build Coastguard Worker	{
93*60517a1eSAndroid Build Coastguard Worker		Name: "@rules_python//python:defs.bzl",
94*60517a1eSAndroid Build Coastguard Worker		Symbols: []string{
95*60517a1eSAndroid Build Coastguard Worker			pyBinaryKind,
96*60517a1eSAndroid Build Coastguard Worker			pyLibraryKind,
97*60517a1eSAndroid Build Coastguard Worker			pyTestKind,
98*60517a1eSAndroid Build Coastguard Worker		},
99*60517a1eSAndroid Build Coastguard Worker	},
100*60517a1eSAndroid Build Coastguard Worker}
101