| /* |
| Copyright 2016 Google LLC |
| |
| 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 |
| |
| https://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. |
| */ |
| |
| // Tables about what Buildifier can and cannot edit. |
| // Perhaps eventually this will be |
| // derived from the BUILD encyclopedia. |
| |
| package tables |
| |
| // IsLabelArg contains a list of named arguments to a rule call that are |
| // considered to have a value that can be treated as a label or list of labels. |
| // There is a separate denylist for rule-specific exceptions. |
| var IsLabelArg = map[string]bool{ |
| "app_target": true, |
| "appdir": true, |
| "base_package": true, |
| "build_deps": true, |
| "cc_deps": true, |
| "ccdeps": true, |
| "common_deps": true, |
| "compile_deps": true, |
| "compiler": true, |
| "data": true, |
| "default_visibility": true, |
| "dep": true, |
| "deps": true, |
| "deps_java": true, |
| "dont_depend_on": true, |
| "env_deps": true, |
| "envscripts": true, |
| "exported_deps": true, |
| "exports": true, |
| "externs_list": true, |
| "files": true, |
| "globals": true, |
| "implementation": true, |
| "implementation_deps": true, |
| "implements": true, |
| "includes": true, |
| "interface": true, |
| "jar": true, |
| "jars": true, |
| "javadeps": true, |
| "lib_deps": true, |
| "library": true, |
| "malloc": true, |
| "model": true, |
| "mods": true, |
| "module_deps": true, |
| "module_target": true, |
| "of": true, |
| "plugins": true, |
| "private_deps": true, |
| "proto_deps": true, |
| "proto_target": true, |
| "protos": true, |
| "resource": true, |
| "resources": true, |
| "runtime_deps": true, |
| "scope": true, |
| "shared_deps": true, |
| "similar_deps": true, |
| "source_jar": true, |
| "src": true, |
| "srcs": true, |
| "stripped_targets": true, |
| "suites": true, |
| "swigdeps": true, |
| "target": true, |
| "target_devices": true, |
| "target_platforms": true, |
| "template": true, |
| "test": true, |
| "test_data": true, |
| "test_deps": true, |
| "test_srcs": true, |
| "tests": true, |
| "tests_deps": true, |
| "tool": true, |
| "tools": true, |
| "visibility": true, |
| } |
| |
| // LabelDenylist is the list of call arguments that cannot be |
| // shortened, because they are not interpreted using the same |
| // rules as for other labels. |
| var LabelDenylist = map[string]bool{ |
| // Shortening this can cause visibility checks to fail. |
| "package_group.includes": true, |
| } |
| |
| // By default, edit.types.IsList consults lang.TypeOf to determine if an arg is a list. |
| // You may override this using IsListArg. Specifying a name here overrides any value |
| // in lang.TypeOf. |
| var IsListArg = map[string]bool{} |
| |
| // IsSortableListArg contains a list of named arguments to a rule call that are |
| // considered to be a sortable list . There is a separate denylist for |
| // rule-specific exceptions. |
| var IsSortableListArg = map[string]bool{ |
| "cc_deps": true, |
| "common_deps": true, |
| "compile_deps": true, |
| "configs": true, |
| "constraints": true, |
| "data": true, |
| "default_visibility": true, |
| "deps": true, |
| "deps_java": true, |
| "exported_deps": true, |
| "exports": true, |
| "filegroups": true, |
| "files": true, |
| "hdrs": true, |
| "implementation_deps": true, |
| "imports": true, |
| "includes": true, |
| "inherits": true, |
| "javadeps": true, |
| "lib_deps": true, |
| "module_deps": true, |
| "outs": true, |
| "packages": true, |
| "plugin_modules": true, |
| "private_deps": true, |
| "proto_deps": true, |
| "protos": true, |
| "pubs": true, |
| "resources": true, |
| "runtime_deps": true, |
| "shared_deps": true, |
| "similar_deps": true, |
| "srcs": true, |
| "swigdeps": true, |
| "swig_includes": true, |
| "tags": true, |
| "test_data": true, |
| "test_deps": true, |
| "test_srcs": true, |
| "test_tags": true, |
| "tests": true, |
| "tools": true, |
| "to_start_extensions": true, |
| "visibility": true, |
| } |
| |
| // SortableDenylist records specific rule arguments that must not be reordered. |
| var SortableDenylist = map[string]bool{ |
| "genrule.outs": true, |
| "genrule.srcs": true, |
| "cc_embed_data.srcs": true, |
| } |
| |
| // SortableAllowlist records specific rule arguments that are guaranteed to be reorderable |
| // (format: "rule_name.attribute_name"). |
| var SortableAllowlist = map[string]bool{} |
| |
| // NamePriority maps an argument name to its sorting priority. |
| // |
| // NOTE(bazel-team): These are the old buildifier rules. It is likely that this table |
| // will change, perhaps swapping in a separate table for each call, |
| // derived from the order used in the Build Encyclopedia. |
| var NamePriority = map[string]int{ |
| "name": -99, |
| "archive_override.module_name": -99, // for MODULE.bazel |
| "git_override.module_name": -99, // for MODULE.bazel |
| "local_path_override.module_name": -99, // for MODULE.bazel |
| "multiple_version_override.module_name": -99, // for MODULE.bazel |
| "single_version_override.module_name": -99, // for MODULE.bazel |
| "bazel_dep.version": -98, // for MODULE.bazel |
| "module.version": -98, // for MODULE.bazel |
| "gwt_name": -98, |
| "package_name": -97, |
| "visible_node_name": -96, // for boq_initial_css_modules and boq_jswire_test_suite |
| "size": -95, |
| "timeout": -94, |
| "testonly": -93, |
| "src": -92, |
| "srcdir": -91, |
| "srcs": -90, |
| "out": -89, |
| "outs": -88, |
| "hdrs": -87, |
| "has_services": -86, // before api versions, for proto |
| "include": -85, // before exclude, for glob |
| "of": -84, // for check_dependencies |
| "baseline": -83, // for searchbox_library |
| // All others sort here, at 0. |
| "destdir": 1, |
| "exports": 2, |
| "runtime_deps": 3, |
| "deps": 4, |
| "implementation": 5, |
| "implements": 6, |
| "alwayslink": 7, |
| } |
| |
| var StripLabelLeadingSlashes = false |
| |
| var ShortenAbsoluteLabelsToRelative = false |
| |
| // AndroidNativeRules lists all Android rules that are being migrated from Native to Starlark. |
| var AndroidNativeRules = []string{ |
| "aar_import", |
| "android_binary", |
| "android_device", |
| "android_instrumentation_test", |
| "android_library", |
| "android_local_test", |
| "android_ndk_respository", |
| "android_sdk_repository", |
| } |
| |
| // AndroidLoadPath is the load path for the Starlark Android Rules. |
| var AndroidLoadPath = "@rules_android//android:rules.bzl" |
| |
| // CcLoadPathPrefix is the load path for the Starlark C++ Rules. |
| var CcLoadPathPrefix = "@rules_cc//cc" |
| |
| // JavaLoadPathPrefix is the load package for the Starlark Java Rules. |
| var JavaLoadPathPrefix = "@rules_java//java" |
| |
| // ShellLoadPathPrefix is the load package for the Starlark Shell Rules. |
| var ShellLoadPathPrefix = "@rules_shell//shell" |
| |
| // PyNativeRules lists all Python rules that are being migrated from Native to Starlark. |
| var PyNativeRules = []string{ |
| "py_library", |
| "py_binary", |
| "py_test", |
| "py_runtime", |
| } |
| |
| // PyLoadPath is the load path for the Starlark Python Rules. |
| var PyLoadPath = "@rules_python//python:defs.bzl" |
| |
| // ProtoLoadPathPrefix is the load path prefix for the Starlark Proto Rules. |
| var ProtoLoadPathPrefix = "@protobuf//bazel" |
| |
| // ModuleToLegacyRepoName contains the mapping from module name to WORKSPACE repository name |
| // for modules with load fixes if those names are different. |
| var ModuleToLegacyRepoName = map[string]string{ |
| "protobuf": "com_google_protobuf", |
| } |
| |
| // IsModuleOverride contains the names of all Bzlmod module overrides available in MODULE.bazel. |
| var IsModuleOverride = map[string]bool{ |
| "archive_override": true, |
| "git_override": true, |
| "local_path_override": true, |
| "multiple_version_override": true, |
| "single_version_override": true, |
| } |
| |
| // OverrideTables allows a user of the build package to override the special-case rules. The user-provided tables replace the built-in tables. |
| func OverrideTables(labelArg, denylist, listArg, sortableListArg, sortDenylist, sortAllowlist map[string]bool, namePriority map[string]int, stripLabelLeadingSlashes, shortenAbsoluteLabelsToRelative bool) { |
| IsLabelArg = labelArg |
| LabelDenylist = denylist |
| IsListArg = listArg |
| IsSortableListArg = sortableListArg |
| SortableDenylist = sortDenylist |
| SortableAllowlist = sortAllowlist |
| NamePriority = namePriority |
| StripLabelLeadingSlashes = stripLabelLeadingSlashes |
| ShortenAbsoluteLabelsToRelative = shortenAbsoluteLabelsToRelative |
| } |
| |
| // MergeTables allows a user of the build package to override the special-case rules. The user-provided tables are merged into the built-in tables. |
| func MergeTables(labelArg, denylist, listArg, sortableListArg, sortDenylist, sortAllowlist map[string]bool, namePriority map[string]int, stripLabelLeadingSlashes, shortenAbsoluteLabelsToRelative bool) { |
| for k, v := range labelArg { |
| IsLabelArg[k] = v |
| } |
| for k, v := range denylist { |
| LabelDenylist[k] = v |
| } |
| for k, v := range listArg { |
| IsListArg[k] = v |
| } |
| for k, v := range sortableListArg { |
| IsSortableListArg[k] = v |
| } |
| for k, v := range sortDenylist { |
| SortableDenylist[k] = v |
| } |
| for k, v := range sortAllowlist { |
| SortableAllowlist[k] = v |
| } |
| for k, v := range namePriority { |
| NamePriority[k] = v |
| } |
| StripLabelLeadingSlashes = stripLabelLeadingSlashes || StripLabelLeadingSlashes |
| ShortenAbsoluteLabelsToRelative = shortenAbsoluteLabelsToRelative || ShortenAbsoluteLabelsToRelative |
| } |