| # proto-file: warn/docs/docs.proto |
| # proto-message: Warnings |
| # After modifying this file, run `bazel build //warn/docs:warnings_docs && cp bazel-bin/warn/docs/WARNINGS.md .` |
| |
| warnings: { |
| name: "attr-cfg" |
| header: "`cfg = \"data\"` for attr definitions has no effect" |
| description: |
| "The [Configuration](https://docs.bazel.build/versions/main/skylark/rules.html#configurations)\n" |
| "`cfg = \"data\"` is deprecated and has no effect. Consider removing it.\n" |
| "The [Configuration](https://docs.bazel.build/versions/main/skylark/rules.html#configurations)\n" |
| "`cfg = \"host\"` is deprecated. Consider replacing it with `cfg = \"exec\"`." |
| bazel_flag: "--incompatible_disallow_data_transition" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/6153" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "attr-license" |
| header: "`attr.license()` is deprecated and shouldn't be used" |
| description: "The `attr.license()` method is almost never used and being deprecated." |
| bazel_flag: "--incompatible_no_attr_license" |
| autofix: false |
| } |
| |
| warnings: { |
| name: "attr-licenses" |
| header: "Do not use `licenses` as an attribute name." |
| description: "Using licenses as an attribute name may cause unexpected behavior." |
| autofix: false |
| } |
| |
| warnings: { |
| name: "attr-applicable_licenses" |
| header: "Do not use `applicable_licenses` as an attribute name." |
| description: "Using `applicable_licenses` as an attribute name may cause unexpected behavior. Its use may be prohibited in future Bazel releases." |
| autofix: false |
| } |
| |
| warnings: { |
| name: "attr-package-metadata" |
| header: "Do not use `package_metadata` as an attribute name." |
| description: "Using `package_metadata` as an attribute name may cause unexpected behavior. Its use may be prohibited in future Bazel releases." |
| autofix: false |
| } |
| |
| warnings: { |
| name: "attr-non-empty" |
| header: "`non_empty` attribute for attr definitions is deprecated" |
| description: |
| "The `non_empty` [attribute](https://docs.bazel.build/versions/main/skylark/lib/attr.html)\n" |
| "for attr definitions is deprecated, please use `allow_empty` with an opposite value instead." |
| bazel_flag: "--incompatible_disable_deprecated_attr_params" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "attr-output-default" |
| header: "The `default` parameter for `attr.output()`is deprecated" |
| description: |
| "The `default` parameter of `attr.output()` is bug-prone, as two targets of the same rule would be\n" |
| "unable to exist in the same package under default behavior. Use Starlark macros to specify defaults\n" |
| "for these attributes instead." |
| bazel_flag: "--incompatible_no_output_attr_default" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/7950" |
| autofix: false |
| } |
| |
| warnings: { |
| name: "attr-single-file" |
| header: "`single_file` is deprecated" |
| description: |
| "The `single_file` [attribute](https://docs.bazel.build/versions/main/skylark/lib/attr.html)\n" |
| "is deprecated, please use `allow_single_file` instead." |
| bazel_flag: "--incompatible_disable_deprecated_attr_params" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "build-args-kwargs" |
| header: "`*args` and `**kwargs` are not allowed in BUILD files" |
| description: |
| "Having `*args` or `**kwargs` makes BUILD files hard to read and manipulate. The list of\n" |
| "arguments should be explicit." |
| bazel_flag: "--incompatible_no_kwargs_in_build_files" |
| autofix: false |
| } |
| warnings: { |
| name: "bzl-visibility" |
| header: "Module shouldn't be used directly" |
| description: |
| "If a directory `foo` contains a subdirectory `internal` or `private`, only files located under `foo`\n" |
| "can access it.\n\n" |
| "For example, `dir/rules_mockascript/private/foo.bzl` can be loaded from\n" |
| "`dir/rules_mockascript/private/bar.bzl` or `dir/rules_mockascript/sub/public.bzl`,\n" |
| "but not from `dir/other_rule/file.bzl`." |
| autofix: false |
| } |
| |
| warnings: { |
| name: "confusing-name" |
| header: "Never use `l`, `I`, or `O` as names" |
| description: "The names `l`, `I`, or `O` can be easily confused with `I`, `l`, or `0` correspondingly." |
| autofix: false |
| } |
| |
| warnings: { |
| name: "constant-glob" |
| header: "Glob pattern has no wildcard ('*')" |
| description: |
| "[Glob function](https://docs.bazel.build/versions/main/be/functions.html#glob)\n" |
| "is used to get a list of files from the depot. The patterns (the first argument)\n" |
| "typically include a wildcard (* character). A pattern without a wildcard is\n" |
| "often useless and sometimes harmful.\n\n" |
| "To fix the warning, move the string out of the glob:\n\n" |
| "```diff\n" |
| "- glob([\"*.cc\", \"test.cpp\"])\n" |
| "+ glob([\"*.cc\"]) + [\"test.cpp\"]\n" |
| "```\n\n" |
| "**There’s one important difference**: before the change, Bazel would silently\n" |
| "ignore test.cpp if file is missing; after the change, Bazel will throw an error\n" |
| "if file is missing.\n\n" |
| "If `test.cpp` doesn’t exist, the fix becomes:\n\n" |
| "```diff\n" |
| "- glob([\"*.cc\", \"test.cpp\"])\n" |
| "+ glob([\"*.cc\"])\n" |
| "```\n\n" |
| "which improves maintenance and readability.\n\n" |
| "If no pattern has a wildcard, just remove the glob. It will also improve build\n" |
| "performance (glob can be relatively slow):\n\n" |
| "```diff\n" |
| "- glob([\"test.cpp\"])\n" |
| "+ [\"test.cpp\"]\n" |
| "```" |
| } |
| |
| warnings: { |
| name: "ctx-actions" |
| header: "`ctx.{action_name}` is deprecated" |
| description: |
| "The following [actions](https://docs.bazel.build/versions/main/skylark/lib/actions.html)\n" |
| "are deprecated, please use the new API:\n\n" |
| " * [`ctx.new_file`](https://docs.bazel.build/versions/main/skylark/lib/ctx.html#new_file) → [`ctx.actions.declare_file`](https://docs.bazel.build/versions/main/skylark/lib/actions.html#declare_file)\n" |
| " * `ctx.experimental_new_directory` → [`ctx.actions.declare_directory`](https://docs.bazel.build/versions/main/skylark/lib/actions.html#declare_directory)\n" |
| " * [`ctx.file_action`](https://docs.bazel.build/versions/main/skylark/lib/ctx.html#file_action) → [`ctx.actions.write`](https://docs.bazel.build/versions/main/skylark/lib/actions.html#write)\n" |
| " * [`ctx.action(command = \"...\")`](https://docs.bazel.build/versions/main/skylark/lib/ctx.html#action) → [`ctx.actions.run_shell`](https://docs.bazel.build/versions/main/skylark/lib/actions.html#run_shell)\n" |
| " * [`ctx.action(executable = \"...\")`](https://docs.bazel.build/versions/main/skylark/lib/ctx.html#action) → [`ctx.actions.run`](https://docs.bazel.build/versions/main/skylark/lib/actions.html#run)\n" |
| " * [`ctx.empty_action`](https://docs.bazel.build/versions/main/skylark/lib/ctx.html#empty_action) → [`ctx.actions.do_nothing`](https://docs.bazel.build/versions/main/skylark/lib/actions.html#do_nothing)\n" |
| " * [`ctx.template_action`](https://docs.bazel.build/versions/main/skylark/lib/ctx.html#template_action) → [`ctx.actions.expand_template`](https://docs.bazel.build/versions/main/skylark/lib/actions.html#expand_template)" |
| bazel_flag: "--incompatible_new_actions_api" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/5825" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "ctx-args" |
| header: "`ctx.actions.args().add()` for multiple arguments is deprecated" |
| description: |
| "It's deprecated to use the [`add`](https://docs.bazel.build/versions/main/skylark/lib/Args.html#add)\n" |
| "method of `ctx.actions.args()` to add a list (or a depset) of variables. Please use either\n" |
| "[`add_all`](https://docs.bazel.build/versions/main/skylark/lib/Args.html#add_all) or\n" |
| "[`add_joined`](https://docs.bazel.build/versions/main/skylark/lib/Args.html#add_joined),\n" |
| "depending on the desired behavior." |
| bazel_flag: "--incompatible_disallow_old_style_args_add" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/5822" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "deprecated-function" |
| header: "The function is deprecated" |
| description: |
| "The function defined in another .bzl file has a docstring stating that it's deprecated, i.e. it\n" |
| "contains a `Deprecated:` section. The convention for function docstrings is described by\n" |
| "the [`function-docstring`](#function-docstring) warning." |
| } |
| |
| warnings: { |
| name: "depset-items" |
| header: "Depset's \"items\" parameter is deprecated" |
| description: |
| "The `items` parameter for [`depset`](https://docs.bazel.build/versions/main/skylark/lib/globals.html#depset)\n" |
| "is deprecated. In its old form it's either a list of direct elements to be\n" |
| "added (use the `direct` or unnamed first parameter instead) or a depset that\n" |
| "becomes a transitive element of the new depset (use the `transitive` parameter\n" |
| "instead)." |
| bazel_flag: "--incompatible_disable_depset_items" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/9017" |
| } |
| |
| warnings: { |
| name: "depset-iteration" |
| header: "Depset iteration is deprecated" |
| description: |
| "Depsets are complex structures, iterations over them and lookups require flattening them to\n" |
| "a list which may be a heavy operation. To make it more obvious it's now required to call\n" |
| "the `.to_list()` method on them in order to be able to iterate their items:\n\n" |
| "```python\n" |
| "deps = depset()\n" |
| "[x.path for x in deps] # deprecated\n" |
| "[x.path for x in deps.to_list()] # recommended\n" |
| "```" |
| bazel_flag: "--incompatible_depset_is_not_iterable" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/5816" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "depset-union" |
| header: "Depsets should be joined using the depset constructor" |
| description: |
| "The following ways to merge two depsets are deprecated:\n\n" |
| "```python\n" |
| "depset1 + depset2\n" |
| "depset1 | depset2\n" |
| "depset1.union(depset2)\n" |
| "```\n\n" |
| "Please use the [depset](https://docs.bazel.build/versions/main/skylark/lib/depset.html) constructor\n" |
| "instead:\n\n" |
| "```python\n" |
| "depset(transitive = [depset1, depset2])\n" |
| "```\n\n" |
| "When fixing this issue, make sure you\n" |
| "[understand depsets](https://docs.bazel.build/versions/main/skylark/depsets.html)\n" |
| "and try to\n" |
| "[reduce the number of calls to depset](https://docs.bazel.build/versions/main/skylark/performance.html#reduce-the-number-of-calls-to-depset)." |
| bazel_flag: "--incompatible_depset_union" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/5817" |
| } |
| |
| warnings: { |
| name: "dict-concatenation" |
| header: "Dictionary concatenation is deprecated" |
| description: |
| "The `+` operator to concatenate dicts is deprecated. The operator used to create a new dict and\n" |
| "copy the data to it. There are several ways to avoid it, for example, instead of `d = d1 + d2 + d3`\n" |
| "you can use one of the following:\n\n" |
| " * Use [Skylib](https://github.com/bazelbuild/bazel-skylib):\n\n" |
| "```python\n" |
| "load(\"@bazel_skylib//lib:dicts.bzl\", \"dicts\")\n\n" |
| "d = dicts.add(d1, d2, d3)\n" |
| "```\n\n" |
| " * The same if you don't want to use Skylib:\n\n" |
| "```python\n" |
| "d = dict(d1.items() + d2.items() + d3.items())\n" |
| "```\n\n" |
| " * The same in several steps:\n\n" |
| "```python\n" |
| "d = dict(d1) # If you don't want `d1` to be mutated\n" |
| "d.update(d2)\n" |
| "d.update(d3)\n" |
| "```" |
| bazel_flag: "--incompatible_disallow_dict_plus" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/6461" |
| } |
| |
| warnings: { |
| name: "dict-method-named-arg" |
| header: "Dict methods do not have a named argument `default`" |
| description: |
| "Dict methods `get`, `pop` and `setdefault` do not accept a named argument\n" |
| "called `default`. Due to a bug, Bazel currently accepts that named argument.\n" |
| "It is better to use a positional argument instead:\n\n" |
| "```diff\n" |
| "- mydict.get(5, default = 0)\n" |
| "+ mydict.get(5, 0)\n" |
| "```" |
| } |
| |
| warnings: { |
| name: "duplicated-name" |
| header: "A rule with name `foo` was already found on line" |
| description: |
| "Each label in Bazel has a unique name, and Bazel doesn’t allow two rules to have\n" |
| "the same name. With macros, this may be accepted by Bazel (if each macro\n" |
| "generates different rules):\n\n" |
| "```python\n" |
| "my_first_macro(name = \"foo\")\n" |
| "my_other_macro(name = \"foo\")\n" |
| "```\n\n" |
| "Although the build may work, this code can be very confusing. It can confuse\n" |
| "users reading a BUILD file (if they look for the rule “foo”, they may read see\n" |
| "only one of the macros). It will also confuse tools that edit BUILD files.\n\n" |
| "To fix the issue just change the name attribute of one rule/macro." |
| } |
| |
| warnings: { |
| name: "filetype" |
| header: "The `FileType` function is deprecated" |
| description: |
| "The function `FileType` is deprecated. Instead of using it as an argument to the\n" |
| "[`rule` function](https://docs.bazel.build/versions/main/skylark/lib/globals.html#rule)\n" |
| "just use a list of strings." |
| bazel_flag: "--incompatible_disallow_filetype" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/5831" |
| } |
| |
| warnings: { |
| name: "function-docstring" |
| name: "function-docstring-header" |
| name: "function-docstring-args" |
| name: "function-docstring-return" |
| header: "Function docstring" |
| description: |
| "Public functions should have docstrings describing functions and their signatures.\n" |
| "A docstring is a string literal (not a comment) which should be the first statement\n" |
| "of a function (it may follow comment lines). Function docstrings are expected to be\n" |
| "formatted in the following way:\n\n" |
| "```python\n" |
| "\"\"\"One-line summary: must be followed and may be preceded by a blank line.\n" |
| "\n" |
| "Optional additional description like this.\n" |
| "\n" |
| "If it's a function docstring and the function has more than one argument, the docstring has\n" |
| "to document these parameters as follows:\n" |
| "\n" |
| "Args:\n" |
| " parameter1: description of the first parameter. Each parameter line\n" |
| " should be indented by one, preferably two, spaces (as here).\n" |
| " parameter2: description of the second\n" |
| " parameter that spans two lines. Each additional line should have a\n" |
| " hanging indentation of at least one, preferably two, additional spaces (as here).\n" |
| " another_parameter (unused, mutable): a parameter may be followed\n" |
| " by additional attributes in parentheses\n" |
| "\n" |
| "Returns:\n" |
| " Description of the return value.\n" |
| " Should be indented by at least one, preferably two spaces (as here)\n" |
| " Can span multiple lines.\n" |
| "\n" |
| "Deprecated:\n" |
| " Optional, description of why the function is deprecated and what should be used instead.\n" |
| "\"\"\"\n" |
| "```\n\n" |
| "Docstrings are required for all public functions with at least 5 statements. If a docstring exists\n" |
| "it should start with a one-line summary line followed by an empty line. If a docstring is required\n" |
| "or it describes some arguments, it should describe all of them. If a docstring is required and\n" |
| "the function returns a value, it should be described." |
| } |
| |
| warnings: { |
| name: "git-repository" |
| header: "Function `git_repository` is not global anymore" |
| description: |
| "Native `git_repository` and `new_git_repository` functions are removed.\n" |
| "Please use the Starlark version instead:\n\n" |
| "```python\n" |
| "load(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"git_repository\")\n" |
| "```" |
| bazel_flag: "--incompatible_remove_native_git_repository" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/6569" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "http-archive" |
| header: "Function `http_archive` is not global anymore" |
| description: |
| "Native `http_archive` function is removed.\n" |
| "Please use the Starlark version instead:\n\n" |
| "```python\n" |
| "load(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\n" |
| "```" |
| bazel_flag: "--incompatible_remove_native_http_archive" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/6570" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "integer-division" |
| header: "The `/` operator for integer division is deprecated" |
| description: |
| "The `/` operator is deprecated in favor of `//`, please use the latter for\n" |
| "integer division:\n\n" |
| "```python\n" |
| "a = b // c\n" |
| "d //= e\n" |
| "```" |
| bazel_flag: "--incompatible_disallow_slash_operator" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/5823" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "keyword-positional-params" |
| header: "Keyword parameter should be positional" |
| description: |
| "Some parameters for builtin functions in Starlark are keyword for legacy reasons;\n" |
| "their names are not meaningful (e.g. `x`). Making them positional-only will improve\n" |
| "the readability." |
| autofix: true |
| } |
| |
| warnings: { |
| name: "list-append" |
| header: "Prefer using `.append()` to adding a single element list" |
| description: "Transforming `x += [expr]` to `x.append(expr)` avoids a list allocation.\n" |
| "NOTE: .append() does not work if the target is a select, hence this warning can safely\n" |
| "be ignored or suppressed." |
| autofix: true |
| } |
| |
| warnings: { |
| name: "load" |
| header: "Loaded symbol is unused" |
| description: |
| "### Background\n\n" |
| "[load](https://docs.bazel.build/versions/main/skylark/concepts.html#loading-an-extension)\n" |
| "is used to import definitions in a BUILD file. If the definition is not used in\n" |
| "the file, the load can be safely removed. If a symbol is loaded two times, you\n" |
| "will get a warning on the second occurrence.\n\n" |
| "### How to fix it\n\n" |
| "Delete the line. When load is used to import multiple symbols, you can remove\n" |
| "the unused symbols from the list. To fix your BUILD files automatically, try\n" |
| "this command:\n\n" |
| "```bash\n" |
| "$ buildozer 'fix unusedLoads' path/to/BUILD\n" |
| "```\n\n" |
| "If you want to keep the load, you can disable the warning by adding a comment\n" |
| "`# @unused`." |
| autofix: true |
| } |
| |
| warnings: { |
| name: "load-on-top" |
| header: "Load statements should be at the top of the file" |
| description: |
| "Obsolete; the warning has been implemented in the formatter and the fix " |
| "is now automatically applied to all files except `WORKSPACE` files " |
| "(unless suppressed).\n\n" |
| "Load statements should be first statements (with the exception of `WORKSPACE` files),\n" |
| "they can follow only comments and docstrings." |
| bazel_flag: "--incompatible_bzl_disallow_load_after_statement" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/5815" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "module-docstring" |
| header: "The file has no module docstring" |
| description: |
| "`.bzl` files should have docstrings on top of them. A docstring is a string literal\n" |
| "(not a comment) which should be the first statement of the file (it may follow\n" |
| "comment lines). For example:\n\n" |
| "```python\n" |
| "\"\"\"\n" |
| "This module contains build rules for my project.\n" |
| "\"\"\"\n" |
| "\n" |
| "...\n" |
| "```" |
| } |
| |
| warnings: { |
| name: "name-conventions" |
| header: "Name conventions" |
| description: |
| "By convention, all variables should be lower_snake_case, constant should be\n" |
| "UPPER_SNAKE_CASE, and providers should be UpperCamelCase ending with `Info`." |
| } |
| |
| warnings: { |
| name: "native-android" |
| header: "All Android build rules should be loaded from Starlark" |
| description: |
| "The Android build rules should be loaded from Starlark.\n\n" |
| "Update: the plans for disabling native rules\n" |
| "[have been postponed](https://groups.google.com/g/bazel-discuss/c/XNvpWcge4AE/m/aJ-aQzszAwAJ),\n" |
| "at the moment it's not required to load Starlark rules." |
| bazel_flag: "--incompatible_disable_native_android_rules" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/8391" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-build" |
| header: "The `native` module shouldn't be used in BUILD files" |
| description: |
| "There's no need in using `native.` in BUILD files, its members are available\n" |
| "as global symbols there." |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-cc-binary" |
| name: "native-cc-common" |
| name: "native-cc-debug-package-info" |
| name: "native-cc-fdo-prefetch-hints" |
| name: "native-cc-fdo-profile" |
| name: "native-cc-import" |
| name: "native-cc-info" |
| name: "native-cc-library" |
| name: "native-cc-memprof-profile" |
| name: "native-cc-objc-import" |
| name: "native-cc-objc-library" |
| name: "native-cc-propeller-optimize" |
| name: "native-cc-shared-library" |
| name: "native-cc-shared-library-hint-info" |
| name: "native-cc-shared-library-info" |
| name: "native-cc-test" |
| name: "native-cc-toolchain" |
| name: "native-cc-toolchain-suite" |
| header: "All C++ build rules should be loaded from Starlark" |
| description: "The C++ build rules should be loaded from @rules_cc." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-java-binary" |
| header: "All Java build rules should be loaded from Starlark" |
| description: "The Java build rules should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-java-import" |
| header: "All Java build rules should be loaded from Starlark" |
| description: "The Java build rules should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-java-library" |
| header: "All Java build rules should be loaded from Starlark" |
| description: "The Java build rules should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-java-plugin" |
| header: "All Java build rules should be loaded from Starlark" |
| description: "The Java build rules should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-java-test" |
| header: "All Java build rules should be loaded from Starlark" |
| description: "The Java build rules should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-java-package-config" |
| header: "All Java build rules should be loaded from Starlark" |
| description: "The Java build rules should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-java-runtime" |
| header: "All Java build rules should be loaded from Starlark" |
| description: "The Java build rules should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-java-toolchain" |
| header: "All Java build rules should be loaded from Starlark" |
| description: "The Java build rules should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-java-common" |
| header: "All Java build rules should be loaded from Starlark" |
| description: "The Java build rules should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-java-info" |
| header: "All Java build rules should be loaded from Starlark" |
| description: "The Java build rules should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-java-plugin-info" |
| header: "All Java build rules should be loaded from Starlark" |
| description: "The Java build rules should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-package" |
| header: "`native.package()` shouldn't be used in .bzl files" |
| description: |
| "It's discouraged and will be disallowed to use `native.package()` in .bzl files.\n" |
| "It can silently modify the semantics of a BUILD file and makes it hard to maintain." |
| } |
| |
| warnings: { |
| name: "native-proto" |
| header: "proto_library rule should be loaded from Starlark" |
| description: |
| "The proto_library rule should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-java-proto" |
| header: "java_proto_library rule should be loaded from Starlark" |
| description: |
| "The java_proto_library rule should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-java-lite-proto" |
| header: "java_lite_proto_library rule should be loaded from Starlark" |
| description: |
| "The java_lite_proto_library rule should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-cc-proto" |
| header: "cc_proto_library rule should be loaded from Starlark" |
| description: |
| "The cc_proto_library rule should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-proto-lang-toolchain" |
| header: "proto_lang_toolchain rule should be loaded from Starlark" |
| description: |
| "The proto_lang_toolchain rule should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-proto-info" |
| header: "ProtoInfo provider should be loaded from Starlark" |
| description: |
| "The ProtoInfo provider should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-proto-lang-toolchain-info" |
| header: "ProtoLangToolchainInfo provider should be loaded from Starlark" |
| description: |
| "The ProtoLangToolchainInfo provider should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-proto-common" |
| header: "proto_common module should be loaded from Starlark" |
| description: |
| "The proto_common module should be loaded from Starlark." |
| bazel_flag: "--incompatible_autoload_externally" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/23043" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-py" |
| header: "All Python build rules should be loaded from Starlark" |
| description: |
| "The Python build rules should be loaded from Starlark.\n\n" |
| "Update: the plans for disabling native rules\n" |
| "[have been postponed](https://groups.google.com/g/bazel-discuss/c/XNvpWcge4AE/m/aJ-aQzszAwAJ),\n" |
| "at the moment it's not required to load Starlark rules." |
| bazel_flag: "--incompatible_load_python_rules_from_bzl" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/9006" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-sh-binary" |
| header: "sh_binary build rules should be loaded from Starlark" |
| description: "The sh_binary build rules should be loaded from Starlark." |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-sh-library" |
| header: "sh_library build rules should be loaded from Starlark" |
| description: "The sh_library build rules should be loaded from Starlark." |
| autofix: true |
| } |
| |
| warnings: { |
| name: "native-sh-test" |
| header: "sh_test build rules should be loaded from Starlark" |
| description: "The sh_test build rules should be loaded from Starlark." |
| autofix: true |
| } |
| |
| warnings: { |
| name: "no-effect" |
| header: "Expression result is not used" |
| description: "The statement has no effect. Consider removing it or storing its result in a variable." |
| } |
| |
| warnings: { |
| name: "out-of-order-load" |
| header: "Load statements should be ordered by their labels" |
| description: |
| "Obsolete; the warning has been implemented in the formatter and the fix " |
| "is now automatically applied to all files (unless suppressed).\n\n" |
| "Load statements should be ordered by their first argument - extension file label.\n" |
| "This makes it easier to developers to locate loads of interest and reduces chances\n" |
| "for conflicts when performing large-scale automated refactoring.\n\n" |
| "When applying automated fixes, it's highly recommended to also use\n" |
| "[`load-on-top`](#load-on-top) fixes, since otherwise the relative order\n" |
| "of a symbol load and its usage can change resulting in runtime error." |
| autofix: true |
| } |
| |
| warnings: { |
| name: "output-group" |
| header: "`ctx.attr.dep.output_group` is deprecated" |
| description: |
| "The `output_group` field of a target is deprecated in favor of the\n" |
| "[`OutputGroupInfo` provider](https://docs.bazel.build/versions/main/skylark/lib/OutputGroupInfo.html)." |
| bazel_flag: "--incompatible_no_target_output_group" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/7949" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "overly-nested-depset" |
| header: "The depset is potentially overly nested" |
| description: |
| "If a depset is iteratively chained in a for loop, e.g. the following pattern is used:\n\n" |
| "```python\n" |
| "for ...:\n" |
| " x = depset(..., transitive = [..., x, ...])\n" |
| "```\n\n" |
| "this can result in an overly nested depset with a long chain of transitive elements. Such patterns\n" |
| "can lead to performance problems, consider refactoring the code to create a flat list of transitive\n" |
| "elements and call the depset constructor just once:\n\n" |
| "```python\n" |
| "transitive = []\n" |
| "\n" |
| "for ...:\n" |
| " transitive += ...\n" |
| "\n" |
| "x = depset(..., transitive = transitive)\n" |
| "```\n\n" |
| "Or in simple cases you can use list comprehensions instead:\n\n" |
| "```python\n" |
| "x = depset(..., transitive = [y.deps for y in ...])\n" |
| "```\n\n" |
| "For more information, read Bazel documentation about\n" |
| "[depsets](https://docs.bazel.build/versions/main/skylark/depsets.html)\n" |
| "and\n" |
| "[reducing the number of calls to depset](https://docs.bazel.build/versions/main/skylark/performance.html#reduce-the-number-of-calls-to-depset)." |
| } |
| |
| warnings: { |
| name: "package-name" |
| header: "Global variable `PACKAGE_NAME` is deprecated" |
| description: |
| "The global variable `PACKAGE_NAME` is deprecated, please use\n" |
| "[`native.package_name()`](https://docs.bazel.build/versions/main/skylark/lib/native.html#package_name)\n" |
| "instead." |
| bazel_flag: "--incompatible_package_name_is_a_function" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/5827" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "package-on-top" |
| header: "Package declaration should be at the top of the file" |
| description: |
| "Here is a typical structure of a BUILD file:\n\n" |
| " * `load()` statements\n" |
| " * `package()`\n" |
| " * calls to rules, macros\n\n" |
| "Instantiating a rule and setting the package defaults later can be very\n" |
| "confusing, and has been a source of bugs (tools and humans sometimes believe\n" |
| "package applies to everything in a BUILD file). This might become an error in\n" |
| "the future.\n\n" |
| "### What can be used before package()?\n\n" |
| "The linter allows the following to be before `package()`:\n\n" |
| " * comments\n" |
| " * `load()`\n" |
| " * variable declarations\n" |
| " * `package_group()`\n" |
| " * `licenses()`" |
| } |
| |
| warnings: { |
| name: "positional-args" |
| header: "Keyword arguments should be used over positional arguments" |
| description: |
| "All top level calls (except for some built-ins) should use keyword args over\n" |
| "positional arguments. Positional arguments can cause subtle errors if the order\n" |
| "is switched or if an argument is removed. Keyword args also greatly improve\n" |
| "readability.\n\n" |
| "```diff\n" |
| "- my_macro(\"foo\", \"bar\")\n" |
| "+ my_macro(name = \"foo\", env = \"bar\")\n" |
| "```\n\n" |
| "The linter allows the following functions to be called with positional arguments:\n\n" |
| " * `load()`\n" |
| " * `vardef()`\n" |
| " * `export_files()`\n" |
| " * `licenses()`\n" |
| " * `print()`" |
| } |
| |
| warnings: { |
| name: "print" |
| header: "`print()` is a debug function and shouldn't be submitted" |
| description: |
| "Using the `print()` function for warnings is discouraged: they are often spammy and\n" |
| "non actionable, the people who see the warning are usually not the people who can\n" |
| "fix the code to make the warning disappear, and the actual maintainers of the code\n" |
| "may never see the warning." |
| } |
| |
| warnings: { |
| name: "provider-params" |
| header: "Calls to `provider` should specify a list of fields and a documentation" |
| description: |
| "Calls to `provider` should specify a documentation string and a list of fields:\n\n" |
| "```python\n" |
| "ServerAddressInfo = provider(\n" |
| " \"The address of an HTTP server. Fields are host (string) and port (int).\",\n" |
| " fields = [\"host\", \"port\"]\n" |
| ")\n" |
| "```\n\n" |
| "Fields should also be documented when needed:\n\n" |
| "```python\n" |
| "ServerAddressInfo = provider(\n" |
| " \"The address of an HTTP server.\",\n" |
| " fields = {\n" |
| " \"host\": \"string, e.g. 'example.com'\",\n" |
| " \"port\": \"int, a TCP port number\",\n" |
| " }\n" |
| ")\n" |
| "```\n\n" |
| "Note that specifying a list of fields is a breaking change. It is an error if a\n" |
| "call to the provider uses undeclared fields. If you cannot declare the list of\n" |
| "fields, you may explicitly set it to None (and explain why in a comment).\n\n" |
| "```python\n" |
| "AllInfo = provider(\"This provider accepts any field.\", fields = None)\n" |
| "\n" |
| "NoneInfo = provider(\"This provider cannot have fields.\", fields = [])\n" |
| "```\n\n" |
| "See the [documentation for providers](https://docs.bazel.build/versions/main/skylark/lib/globals.html#provider)." |
| } |
| |
| warnings: { |
| name: "redefined-variable" |
| header: "Variable has already been defined" |
| description: |
| "### Background\n\n" |
| "In .bzl files, redefining a global variable is already forbidden. This helps\n" |
| "both humans and tools reason about the code. For consistency, we want to bring\n" |
| "this restriction also to BUILD files.\n\n" |
| "### How to fix it\n\n" |
| "Rename one of the variables.\n\n" |
| "Note that the content of lists and dictionaries can still be modified. We will\n" |
| "forbid reassignment, but not every side-effect." |
| } |
| |
| warnings: { |
| name: "repository-name" |
| header: "Global variable `REPOSITORY_NAME` is deprecated" |
| description: |
| "The global variable `REPOSITORY_NAME` is deprecated, please use\n" |
| "[`native.repository_name()`](https://docs.bazel.build/versions/main/skylark/lib/native.html#repository_name)\n" |
| "instead." |
| bazel_flag: "--incompatible_package_name_is_a_function" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/5827" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "return-value" |
| header: "Some but not all execution paths of a function return a value" |
| description: |
| "Some but not all execution paths of a function return a value. Either there's\n" |
| "an explicit empty `return` statement, or an implicit return in the end of a\n" |
| "function. If it is intentional, make it explicit using `return None`. If you\n" |
| "know certain parts of the code cannot be reached, add the statement\n" |
| "`fail(\"unreachable\")` to them." |
| } |
| |
| warnings: { |
| name: "rule-impl-return" |
| header: "Avoid using the legacy provider syntax" |
| description: |
| "Returning structs from rule implementation functions is\n" |
| "[deprecated](https://docs.bazel.build/versions/main/skylark/rules.html#migrating-from-legacy-providers),\n" |
| "consider using\n" |
| "[providers](https://docs.bazel.build/versions/main/skylark/rules.html#providers)\n" |
| "or lists of providers instead." |
| } |
| |
| warnings: { |
| name: "same-origin-load" |
| header: "Same label is used for multiple loads" |
| description: |
| "Obsolete; the warning has been implemented in the formatter and the fix " |
| "is now automatically applied to all files except `WORKSPACE` files " |
| "(unless suppressed).\n\n" |
| "### Background\n\n" |
| "[load](https://docs.bazel.build/versions/main/skylark/concepts.html#loading-an-extension)\n" |
| "is used to import definitions in a BUILD file. If the same label is used for loading\n" |
| "symbols more the ones, all such loads can be merged into a single one.\n\n" |
| "### How to fix it\n\n" |
| "Merge all loads into a single one. For example,\n\n" |
| "```python\n" |
| "load(\":f.bzl\", \"s1\")\n" |
| "load(\":f.bzl\", \"s2\")\n" |
| "```\n\n" |
| "can be written more compactly as\n\n" |
| "```python\n" |
| "load(\":f.bzl\", \"s1\", \"s2\")\n" |
| "```" |
| autofix: true |
| } |
| |
| warnings: { |
| name: "skylark-comment" |
| name: "skylark-docstring" |
| header: "\"Skylark\" is an outdated name of the language, please use \"starlark\" instead" |
| description: |
| "The configuration language for Bazel is called \"Starlark\" now, the name \"Skylark\" is\n" |
| "outdated and shouldn't be used." |
| autofix: true |
| } |
| |
| warnings: { |
| name: "string-iteration" |
| header: "String iteration is deprecated" |
| description: |
| "Iteration over strings often leads to confusion with iteration over a sequence of strings,\n" |
| "therefore strings won't be recognized as sequences of 1-element strings (like in Python).\n" |
| "Use string indexing and `len` instead:\n\n" |
| "```python\n" |
| "my_string = \"hello world\"\n" |
| "for i in range(len(my_string)):\n" |
| " char = my_string[i]\n" |
| " # do something with char\n" |
| "```" |
| bazel_flag: "--incompatible_string_is_not_iterable" |
| bazel_flag_link: "https://github.com/bazelbuild/bazel/issues/5830" |
| } |
| |
| warnings: { |
| name: "uninitialized" |
| header: "Variable may not have been initialized" |
| description: |
| "The local value can be not initialized at the time of execution. It may happen if it's\n" |
| "initialized in one of the if-else clauses but not in all of them, or in a for-loop which\n" |
| "can potentially be empty." |
| } |
| |
| warnings: { |
| name: "unnamed-macro" |
| header: "The macro should have a keyword argument called \"name\"" |
| description: |
| "By convention all macro functions should have a keyword argument called `name`\n" |
| "(even if they don't use it). This is important for tooling and automation.\n\n" |
| "A macro is a function that calls a rule (either directly or indirectly by calling other\n" |
| "macros).\n\n" |
| "If this function is a helper function that's not supposed to be used outside of its file,\n" |
| "please make it private (rename it so that the name starts with `_`), this will\n" |
| "prevent loading the function from BUILD files and suppress the warning." |
| } |
| |
| warnings: { |
| name: "unreachable" |
| header: "The statement is unreachable" |
| description: |
| "The statement is unreachable because it follows a `return`, `break`, `continue`,\n" |
| "or `fail()` statement." |
| } |
| |
| warnings: { |
| name: "unsorted-dict-items" |
| header: "Dictionary items should be ordered by their keys" |
| description: |
| "Dictionary items should be sorted lexicographically by their keys. This makes\n" |
| "it easier to find the item of interest and reduces chances of conflicts when\n" |
| "performing large-scale automated refactoring.\n\n" |
| "The order is affected by `NamePriority` dictionary passed using `-tables` or\n" |
| "`-add_tables` flags.\n\n" |
| "If you want to preserve the original dictionary items order, you can disable\n" |
| "the warning by adding a comment `# @unsorted-dict-items` to the dictionary\n" |
| "expression or any of its enclosing expressions (binary, if etc). For example,\n\n" |
| "```python\n" |
| "# @unsorted-dict-items\n" |
| "d = {\n" |
| " \"b\": \"bvalue\",\n" |
| " \"a\": \"avalue\",\n" |
| "}\n" |
| "```\n\n" |
| "will not be reported as an issue because the assignment operation that uses\n" |
| "the dictionary with unsorted items has a comment disabling this warning." |
| autofix: true |
| } |
| |
| warnings: { |
| name: "unused-variable" |
| header: "Variable is unused" |
| description: |
| "This happens when a variable or function is set but not used in the file, e.g.\n\n" |
| "```python\n" |
| "x = [1, 2]\n" |
| "```\n\n" |
| "The line can often be safely removed.\n\n" |
| "If you want to keep the variable, you can disable the warning by adding a\n" |
| "comment `# @unused`.\n\n" |
| "```python\n" |
| "x = [1, 2] # @unused\n" |
| "\n" |
| "# @unused\n" |
| "def f(\n" |
| " x,\n" |
| " y, # @unused\n" |
| "):\n" |
| " pass\n" |
| "```\n\n" |
| "If an unused variable is used for partially unpacking tuples, just prefix\n" |
| "its name with an underscore to suppress the warning:\n\n" |
| "```python\n" |
| "x, _y = foo()\n" |
| "for _, (a, _b) in iterable:\n" |
| " print(a + x)\n" |
| "```\n\n" |
| "The same applies for function arguments that are not used by design:\n\n" |
| "```python\n" |
| "def foo(a, _b, *_args):\n" |
| " return bar(a)\n" |
| "```\n\n" |
| "If a tuple is unpacked not in a for-loop and all variables are unused,\n" |
| "it'll still trigger a warning, even if all variables are underscored:\n\n" |
| "```python\n" |
| "_a, _b = pair\n" |
| "_unused = 3\n" |
| "```" |
| } |