xref: /aosp_15_r20/external/bazelbuild-rules_go/go/tools/builders/nolint.go (revision 9bb1b549b6a84214c53be0924760be030e66b93a)
1*9bb1b549SSpandan Das// Copyright 2023 The Bazel Authors. All rights reserved.
2*9bb1b549SSpandan Das//
3*9bb1b549SSpandan Das// Licensed under the Apache License, Version 2.0 (the "License");
4*9bb1b549SSpandan Das// you may not use this file except in compliance with the License.
5*9bb1b549SSpandan Das// You may obtain a copy of the License at
6*9bb1b549SSpandan Das//
7*9bb1b549SSpandan Das//    http://www.apache.org/licenses/LICENSE-2.0
8*9bb1b549SSpandan Das//
9*9bb1b549SSpandan Das// Unless required by applicable law or agreed to in writing, software
10*9bb1b549SSpandan Das// distributed under the License is distributed on an "AS IS" BASIS,
11*9bb1b549SSpandan Das// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*9bb1b549SSpandan Das// See the License for the specific language governing permissions and
13*9bb1b549SSpandan Das// limitations under the License.
14*9bb1b549SSpandan Das
15*9bb1b549SSpandan Daspackage main
16*9bb1b549SSpandan Das
17*9bb1b549SSpandan Dasimport "strings"
18*9bb1b549SSpandan Das
19*9bb1b549SSpandan Das// Parse nolint directives and return the applicable linters. If all linters
20*9bb1b549SSpandan Das// apply, returns (nil, true).
21*9bb1b549SSpandan Dasfunc parseNolint(text string) (map[string]bool, bool) {
22*9bb1b549SSpandan Das	text = strings.TrimLeft(text, "/ ")
23*9bb1b549SSpandan Das	if !strings.HasPrefix(text, "nolint") {
24*9bb1b549SSpandan Das		return nil, false
25*9bb1b549SSpandan Das	}
26*9bb1b549SSpandan Das	parts := strings.Split(text, ":")
27*9bb1b549SSpandan Das	if len(parts) == 1 {
28*9bb1b549SSpandan Das		return nil, true
29*9bb1b549SSpandan Das	}
30*9bb1b549SSpandan Das	linters := strings.Split(parts[1], ",")
31*9bb1b549SSpandan Das	result := map[string]bool{}
32*9bb1b549SSpandan Das	for _, linter := range linters {
33*9bb1b549SSpandan Das		if strings.EqualFold(linter, "all") {
34*9bb1b549SSpandan Das			return nil, true
35*9bb1b549SSpandan Das		}
36*9bb1b549SSpandan Das		result[linter] = true
37*9bb1b549SSpandan Das	}
38*9bb1b549SSpandan Das	return result, true
39*9bb1b549SSpandan Das}
40