|  | /* | 
|  | 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 | 
|  | } |