| // Copyright 2020 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package config |
| |
| import ( |
| "strings" |
| |
| "android/soong/android" |
| ) |
| |
| var ( |
| defaultLints = []string{ |
| "-D missing-docs", |
| "-D clippy::missing-safety-doc", |
| } |
| defaultVendorLints = []string{ |
| "", |
| } |
| ) |
| |
| func init() { |
| // Default Rust lints. These apply to all Google-authored modules. |
| pctx.VariableFunc("ClippyDefaultLints", func(ctx android.PackageVarContext) string { |
| if override := ctx.Config().Getenv("CLIPPY_DEFAULT_LINTS"); override != "" { |
| return override |
| } |
| return strings.Join(defaultLints, " ") |
| }) |
| |
| // Rust lints that only applies to external code. |
| pctx.VariableFunc("ClippyVendorLints", func(ctx android.PackageVarContext) string { |
| if override := ctx.Config().Getenv("CLIPPY_VENDOR_LINTS"); override != "" { |
| return override |
| } |
| return strings.Join(defaultVendorLints, " ") |
| }) |
| } |
| |
| type PathBasedClippyConfig struct { |
| PathPrefix string |
| Enabled bool |
| ClippyConfig string |
| } |
| |
| const clippyNone = "" |
| const clippyDefault = "${config.ClippyDefaultLints}" |
| const clippyVendor = "${config.ClippyVendorLints}" |
| |
| // This is a map of local path prefixes to a boolean indicating if the lint |
| // rule should be generated and if so, the set of lints to use. The first entry |
| // matching will be used. If no entry is matching, clippyDefault will be used. |
| var DefaultLocalTidyChecks = []PathBasedClippyConfig{ |
| {"external/", false, clippyNone}, |
| {"hardware/", true, clippyVendor}, |
| {"prebuilts/", false, clippyNone}, |
| {"vendor/google", true, clippyDefault}, |
| {"vendor/", true, clippyVendor}, |
| } |
| |
| // ClippyLintsForDir returns the Clippy lints to be used for a repository. |
| func ClippyLintsForDir(dir string) (bool, string) { |
| for _, pathCheck := range DefaultLocalTidyChecks { |
| if strings.HasPrefix(dir, pathCheck.PathPrefix) { |
| return pathCheck.Enabled, pathCheck.ClippyConfig |
| } |
| } |
| return true, clippyDefault |
| } |