Change default DEFAULT_TIDY_HEADER_DIRS to empty
* Default -header-filter will now contain only module directory. * In a clean build of aosp_x86_64-eng, this change can reduce the number of (duplicated) clang-tidy warnings by 77% or more. * When compiled with WITH_TIDY=1, if DEFAULT_TIDY_HEADER_DIRS is not set, warnings from a header file will be shown only if the file is in a module's (sub)directory. * Set DEFAULT_TIDY_HEADER_DIRS="bionic/|bootable/|build/|cts/|\ dalvik/|developers/|development/|frameworks/|\ libcore/|libnativehelper/|system/" will get before this change's -header-filter. * Fix a bug: Default header-filter was not added when tidy_flags was defined in a module. With this fix, some incorrectly hidden header file tidy warnings will now show up. Bug: 179530304 Test: make with WITH_TIDY=1 and various setting of DEFAULT_TIDY_HEADER_DIRS Change-Id: Ia0c05349908a730862dae36be9a2dbe4f44fb6da
This commit is contained in:
parent
c6226d668e
commit
9f94c362ea
3 changed files with 26 additions and 23 deletions
|
@ -137,6 +137,16 @@ func HasAnyPrefix(s string, prefixList []string) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
// Returns true if any string in the given list has the given substring.
|
||||
func SubstringInList(list []string, substr string) bool {
|
||||
for _, s := range list {
|
||||
if strings.Contains(s, substr) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// Returns true if any string in the given list has the given prefix.
|
||||
func PrefixInList(list []string, prefix string) bool {
|
||||
for _, s := range list {
|
||||
|
|
|
@ -87,27 +87,11 @@ func init() {
|
|||
}, ",")
|
||||
})
|
||||
|
||||
// Give warnings to header files only in selected directories.
|
||||
// Do not give warnings to external or vendor header files, which contain too
|
||||
// many warnings.
|
||||
// To reduce duplicate warnings from the same header files,
|
||||
// header-filter will contain only the module directory and
|
||||
// those specified by DEFAULT_TIDY_HEADER_DIRS.
|
||||
pctx.VariableFunc("TidyDefaultHeaderDirs", func(ctx android.PackageVarContext) string {
|
||||
if override := ctx.Config().Getenv("DEFAULT_TIDY_HEADER_DIRS"); override != "" {
|
||||
return override
|
||||
}
|
||||
return strings.Join([]string{
|
||||
"art/",
|
||||
"bionic/",
|
||||
"bootable/",
|
||||
"build/",
|
||||
"cts/",
|
||||
"dalvik/",
|
||||
"developers/",
|
||||
"development/",
|
||||
"frameworks/",
|
||||
"libcore/",
|
||||
"libnativehelper/",
|
||||
"system/",
|
||||
}, "|")
|
||||
return ctx.Config().Getenv("DEFAULT_TIDY_HEADER_DIRS")
|
||||
})
|
||||
|
||||
// Use WTIH_TIDY_FLAGS to pass extra global default clang-tidy flags.
|
||||
|
|
15
cc/tidy.go
15
cc/tidy.go
|
@ -20,6 +20,7 @@ import (
|
|||
|
||||
"github.com/google/blueprint/proptools"
|
||||
|
||||
"android/soong/android"
|
||||
"android/soong/cc/config"
|
||||
)
|
||||
|
||||
|
@ -75,9 +76,17 @@ func (tidy *tidyFeature) flags(ctx ModuleContext, flags Flags) Flags {
|
|||
}
|
||||
esc := proptools.NinjaAndShellEscapeList
|
||||
flags.TidyFlags = append(flags.TidyFlags, esc(tidy.Properties.Tidy_flags)...)
|
||||
// If TidyFlags is empty, add default header filter.
|
||||
if len(flags.TidyFlags) == 0 {
|
||||
headerFilter := "-header-filter=\"(" + ctx.ModuleDir() + "|${config.TidyDefaultHeaderDirs})\""
|
||||
// If TidyFlags does not contain -header-filter, add default header filter.
|
||||
// Find the substring because the flag could also appear as --header-filter=...
|
||||
// and with or without single or double quotes.
|
||||
if !android.SubstringInList(flags.TidyFlags, "-header-filter=") {
|
||||
defaultDirs := ctx.Config().Getenv("DEFAULT_TIDY_HEADER_DIRS")
|
||||
headerFilter := "-header-filter="
|
||||
if defaultDirs == "" {
|
||||
headerFilter += ctx.ModuleDir() + "/"
|
||||
} else {
|
||||
headerFilter += "\"(" + ctx.ModuleDir() + "/|" + defaultDirs + ")\""
|
||||
}
|
||||
flags.TidyFlags = append(flags.TidyFlags, headerFilter)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue