make tidy attribute tri-state

Bazel boolean attributes can only support true or false states, but the
clang-tidy logic changes for modules which don't set a specific value.
Therefore, the tidy attribute should really be a tri-state of "true",
"false", or "" (unset).

Test: b test //build/bazel/rules/...
Bug: 268681923
Change-Id: I85fbaa612d175f475757db806cea6c018901fe3e
This commit is contained in:
Sam Delmerico
2023-03-14 14:05:28 -04:00
parent a8c1cacaf9
commit 63f0c93b09
2 changed files with 31 additions and 5 deletions

View File

@@ -3640,8 +3640,17 @@ func TestCcLibraryWithTidy(t *testing.T) {
ModuleTypeUnderTestFactory: cc.LibraryFactory, ModuleTypeUnderTestFactory: cc.LibraryFactory,
Blueprint: ` Blueprint: `
cc_library_static { cc_library_static {
name: "foo", name: "foo",
srcs: ["foo.cpp"], srcs: ["foo.cpp"],
}
cc_library_static {
name: "foo-no-tidy",
srcs: ["foo.cpp"],
tidy: false,
}
cc_library_static {
name: "foo-tidy",
srcs: ["foo.cpp"],
tidy: true, tidy: true,
tidy_checks: ["check1", "check2"], tidy_checks: ["check1", "check2"],
tidy_checks_as_errors: ["check1error", "check2error"], tidy_checks_as_errors: ["check1error", "check2error"],
@@ -3652,7 +3661,16 @@ cc_library_static {
MakeBazelTarget("cc_library_static", "foo", AttrNameToString{ MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
"local_includes": `["."]`, "local_includes": `["."]`,
"srcs": `["foo.cpp"]`, "srcs": `["foo.cpp"]`,
"tidy": `True`, }),
MakeBazelTarget("cc_library_static", "foo-no-tidy", AttrNameToString{
"local_includes": `["."]`,
"srcs": `["foo.cpp"]`,
"tidy": `"never"`,
}),
MakeBazelTarget("cc_library_static", "foo-tidy", AttrNameToString{
"local_includes": `["."]`,
"srcs": `["foo.cpp"]`,
"tidy": `"local"`,
"tidy_checks": `[ "tidy_checks": `[
"check1", "check1",
"check2", "check2",

View File

@@ -71,7 +71,7 @@ type staticOrSharedAttributes struct {
} }
type tidyAttributes struct { type tidyAttributes struct {
Tidy *bool Tidy *string
Tidy_flags []string Tidy_flags []string
Tidy_checks []string Tidy_checks []string
Tidy_checks_as_errors []string Tidy_checks_as_errors []string
@@ -82,7 +82,15 @@ type tidyAttributes struct {
func (m *Module) convertTidyAttributes(ctx android.BaseMutatorContext, moduleAttrs *tidyAttributes) { func (m *Module) convertTidyAttributes(ctx android.BaseMutatorContext, moduleAttrs *tidyAttributes) {
for _, f := range m.features { for _, f := range m.features {
if tidy, ok := f.(*tidyFeature); ok { if tidy, ok := f.(*tidyFeature); ok {
moduleAttrs.Tidy = tidy.Properties.Tidy var tidyAttr *string
if tidy.Properties.Tidy != nil {
if *tidy.Properties.Tidy {
tidyAttr = proptools.StringPtr("local")
} else {
tidyAttr = proptools.StringPtr("never")
}
}
moduleAttrs.Tidy = tidyAttr
moduleAttrs.Tidy_flags = tidy.Properties.Tidy_flags moduleAttrs.Tidy_flags = tidy.Properties.Tidy_flags
moduleAttrs.Tidy_checks = tidy.Properties.Tidy_checks moduleAttrs.Tidy_checks = tidy.Properties.Tidy_checks
moduleAttrs.Tidy_checks_as_errors = tidy.Properties.Tidy_checks_as_errors moduleAttrs.Tidy_checks_as_errors = tidy.Properties.Tidy_checks_as_errors