diff --git a/WARNINGS.md b/WARNINGS.md index b1cbc4b27..bebe95d61 100644 --- a/WARNINGS.md +++ b/WARNINGS.md @@ -30,6 +30,7 @@ Warning categories supported by buildifier's linter: * [name-conventions](#name-conventions) * [native-android](#native-android) * [native-build](#native-build) + * [native-cc](#native-cc) * [native-java](#native-java) * [native-package](#native-package) * [no-effect](#no-effect) @@ -479,6 +480,17 @@ there. -------------------------------------------------------------------------------- +## All C++ build rules should be loaded from Starlark + + * Category name: `native-cc` + * Flag in Bazel: [`--incompatible_load_cc_rules_from_bzl`](https://github.com/bazelbuild/bazel/issues/8743) + * Automatic fix: yes + +The C++ build rules should be loaded from Starlark. The native rules [will be +disabled](https://github.com/bazelbuild/bazel/issues/8743). + +-------------------------------------------------------------------------------- + ## All Java build rules should be loaded from Starlark * Category name: `native-java` diff --git a/tables/tables.go b/tables/tables.go index 6b47ad3d1..2dfe75a9f 100644 --- a/tables/tables.go +++ b/tables/tables.go @@ -223,6 +223,24 @@ var AndroidNativeRules = []string{ // AndroidLoadPath is the load path for the Starlark Android Rules. var AndroidLoadPath = "@rules_android//android:rules.bzl" +// CcNativeRules lists all C++ rules that are being migrated from Native to Starlark. +var CcNativeRules = []string{ + "cc_binary", + "cc_test", + "cc_library", + "cc_import", + "cc_proto_library", + "fdo_prefetch_hints", + "fdo_profile", + "cc_toolchain", + "cc_toolchain_suite", + "objc_library", + "objc_import", +} + +// CcLoadPath is the load path for the Starlark C++ Rules. +var CcLoadPath = "@rules_cc//cc:defs.bzl" + // JavaNativeRules lists all Java rules that are being migrated from Native to Starlark. var JavaNativeRules = []string{ "java_binary", diff --git a/warn/warn.go b/warn/warn.go index fdc0137bc..b4fd56d58 100644 --- a/warn/warn.go +++ b/warn/warn.go @@ -128,6 +128,7 @@ var FileWarningMap = map[string]func(f *build.File) []*LinterFinding{ "name-conventions": nameConventionsWarning, "native-android": nativeAndroidRulesWarning, "native-build": nativeInBuildFilesWarning, + "native-cc": nativeCcRulesWarning, "native-java": nativeJavaRulesWarning, "native-package": nativePackageWarning, "no-effect": noEffectWarning, diff --git a/warn/warn_bazel_api.go b/warn/warn_bazel_api.go index 3c4533d21..d5bd90100 100644 --- a/warn/warn_bazel_api.go +++ b/warn/warn_bazel_api.go @@ -578,6 +578,13 @@ func nativeAndroidRulesWarning(f *build.File) []*LinterFinding { return notLoadedFunctionUsageCheck(f, tables.AndroidNativeRules, tables.AndroidLoadPath) } +func nativeCcRulesWarning(f *build.File) []*LinterFinding { + if f.Type != build.TypeBzl && f.Type != build.TypeBuild { + return nil + } + return notLoadedFunctionUsageCheck(f, tables.CcNativeRules, tables.CcLoadPath) +} + func nativeJavaRulesWarning(f *build.File) []*LinterFinding { if f.Type != build.TypeBzl && f.Type != build.TypeBuild { return nil diff --git a/warn/warn_bazel_api_test.go b/warn/warn_bazel_api_test.go index 27088f30e..9bd1be3b4 100644 --- a/warn/warn_bazel_api_test.go +++ b/warn/warn_bazel_api_test.go @@ -494,6 +494,58 @@ android_binary() scopeBzl|scopeBuild) } +func TestNativeCcWarning(t *testing.T) { + checkFindingsAndFix(t, "native-cc", ` +"""My file""" + +def macro(): + cc_library() + native.cc_binary() + cc_test() + cc_proto_library() + native.fdo_prefetch_hints() + native.objc_library() + objc_import() + cc_toolchain() + native.cc_toolchain_suite() + +fdo_profile() +cc_import() +`, fmt.Sprintf(` +"""My file""" + +load(%q, "cc_binary", "cc_import", "cc_library", "cc_proto_library", "cc_test", "cc_toolchain", "cc_toolchain_suite", "fdo_prefetch_hints", "fdo_profile", "objc_import", "objc_library") + +def macro(): + cc_library() + cc_binary() + cc_test() + cc_proto_library() + fdo_prefetch_hints() + objc_library() + objc_import() + cc_toolchain() + cc_toolchain_suite() + +fdo_profile() +cc_import() +`, tables.CcLoadPath), + []string{ + fmt.Sprintf(`:4: Function "cc_library" is not global anymore and needs to be loaded from "%s".`, tables.CcLoadPath), + fmt.Sprintf(`:5: Function "cc_binary" is not global anymore and needs to be loaded from "%s".`, tables.CcLoadPath), + fmt.Sprintf(`:6: Function "cc_test" is not global anymore and needs to be loaded from "%s".`, tables.CcLoadPath), + fmt.Sprintf(`:7: Function "cc_proto_library" is not global anymore and needs to be loaded from "%s".`, tables.CcLoadPath), + fmt.Sprintf(`:8: Function "fdo_prefetch_hints" is not global anymore and needs to be loaded from "%s".`, tables.CcLoadPath), + fmt.Sprintf(`:9: Function "objc_library" is not global anymore and needs to be loaded from "%s".`, tables.CcLoadPath), + fmt.Sprintf(`:10: Function "objc_import" is not global anymore and needs to be loaded from "%s".`, tables.CcLoadPath), + fmt.Sprintf(`:11: Function "cc_toolchain" is not global anymore and needs to be loaded from "%s".`, tables.CcLoadPath), + fmt.Sprintf(`:12: Function "cc_toolchain_suite" is not global anymore and needs to be loaded from "%s".`, tables.CcLoadPath), + fmt.Sprintf(`:14: Function "fdo_profile" is not global anymore and needs to be loaded from "%s".`, tables.CcLoadPath), + fmt.Sprintf(`:15: Function "cc_import" is not global anymore and needs to be loaded from "%s".`, tables.CcLoadPath), + }, + scopeBzl|scopeBuild) +} + func TestNativeJavaWarning(t *testing.T) { checkFindingsAndFix(t, "native-java", ` """My file"""