[[linter]] code = 'FLAKE8' include_patterns = ['**/*.py'] exclude_patterns = [ '.git/**', 'build_test_custom_build/**', 'build/**', 'caffe2/**', 'docs/caffe2/**', 'docs/cpp/src/**', 'docs/src/**', 'functorch/docs/**', 'functorch/examples/**', 'functorch/notebooks/**', 'scripts/**', 'test/generated_type_hints_smoketest.py', 'third_party/**', 'torch/include/**', 'torch/lib/**', 'venv/**', '**/*.pyi', 'tools/test/test_selective_build.py', ] command = [ 'python3', 'tools/linter/adapters/flake8_linter.py', '--', '@{{PATHSFILE}}' ] init_command = [ 'python3', 'tools/linter/adapters/pip_init.py', '--dry-run={{DRYRUN}}', 'flake8==3.8.2', 'flake8-bugbear==20.1.4', 'flake8-comprehensions==3.3.0', 'flake8-executable==2.0.4', 'flake8-pyi==20.5.0', 'mccabe==0.6.1', 'pycodestyle==2.6.0', 'pyflakes==2.2.0', ] [[linter]] code = 'CLANGFORMAT' include_patterns = [ 'aten/src/ATen/*.h', 'aten/src/ATen/native/vulkan/**/*.h', 'aten/src/ATen/native/vulkan/**/*.cpp', 'c10/**/*.h', 'c10/**/*.cpp', 'torch/csrc/**/*.h', 'torch/csrc/**/*.cpp', 'test/cpp/**/*.h', 'test/cpp/**/*.cpp', ] exclude_patterns = [ 'aten/src/ATen/native/vulkan/api/vk_mem_alloc.h', 'c10/util/strong_type.h', 'torch/csrc/jit/serialization/mobile_bytecode_generated.h', ] init_command = [ 'python3', 'tools/linter/adapters/s3_init.py', '--config-json=tools/linter/adapters/s3_init_config.json', '--linter=clang-format', '--dry-run={{DRYRUN}}', '--output-dir=.lintbin', '--output-name=clang-format', ] command = [ 'python3', 'tools/linter/adapters/clangformat_linter.py', '--binary=.lintbin/clang-format', '--', '@{{PATHSFILE}}' ] is_formatter = true [[linter]] code = 'MYPY' include_patterns = [ 'torch/**/*.py', 'torch/**/*.pyi', 'caffe2/**/*.py', 'caffe2/**/*.pyi', 'test/test_bundled_images.py', 'test/test_bundled_inputs.py', 'test/test_complex.py', 'test/test_datapipe.py', 'test/test_futures.py', # 'test/test_numpy_interop.py', 'test/test_torch.py', 'test/test_type_hints.py', 'test/test_type_info.py', 'test/test_utils.py', ] exclude_patterns = [ 'torch/include/**', 'torch/csrc/**', 'torch/_dynamo/**/*.py', 'torch/_inductor/**/*.py', 'torch/distributed/elastic/agent/server/api.py', 'torch/testing/_internal/**', 'torch/distributed/fsdp/fully_sharded_data_parallel.py', 'torch/distributed/distributed_c10d.py', # TODO(suo): these exclusions were added just to get lint clean on master. # Follow up to do more target suppressions and remove them. 'torch/distributed/fsdp/flatten_params_wrapper.py', 'torch/ao/quantization/fx/convert.py', 'torch/ao/quantization/_dbr/function_fusion.py', 'test/test_datapipe.py', 'caffe2/contrib/fakelowp/test/test_batchmatmul_nnpi_fp16.py', 'test/test_numpy_interop.py', 'torch/torch_version.py', ] command = [ 'python3', 'tools/linter/adapters/mypy_linter.py', '--config=mypy.ini', '--', '@{{PATHSFILE}}' ] init_command = [ 'python3', 'tools/linter/adapters/pip_init.py', '--dry-run={{DRYRUN}}', 'numpy==1.21.6', 'expecttest==0.1.3', 'mypy==0.960', 'types-requests==2.27.25', 'types-six==1.16.15', 'types-PyYAML==6.0.7', 'types-tabulate==0.8.8', 'types-protobuf==3.19.18', 'types-pkg-resources==0.1.3', 'types-Jinja2==2.11.9', 'junitparser==2.1.1', 'rich==10.9.0', 'pyyaml==6.0', ] [[linter]] code = 'MYPYSTRICT' include_patterns = [ '.github/**/*.py', 'benchmarks/instruction_counts/**/*.py', 'tools/**/*.py', 'torchgen/**/*.py', 'torch/utils/_pytree.py', 'torch/utils/benchmark/utils/common.py', 'torch/utils/benchmark/utils/timer.py', 'torch/utils/benchmark/utils/valgrind_wrapper/**/*.py', ] exclude_patterns = [ # (linbinyu) copied from internal repo 'tools/code_analyzer/gen_operators_yaml.py', 'tools/gen_vulkan_spv.py', 'tools/test/gen_operators_yaml_test.py', 'tools/test/gen_oplist_test.py', 'tools/test/test_selective_build.py', ] command = [ 'python3', 'tools/linter/adapters/mypy_linter.py', '--config=mypy-strict.ini', '--', '@{{PATHSFILE}}' ] [[linter]] code = 'CLANGTIDY' include_patterns = [ 'torch/csrc/fx/**/*.cpp', 'torch/csrc/generic/**/*.cpp', 'torch/csrc/onnx/**/*.cpp', 'torch/csrc/tensor/**/*.cpp', 'torch/csrc/utils/**/*.cpp', ] exclude_patterns = [ # The negative filters below are to exclude files that include onnx_pb.h or # caffe2_pb.h, otherwise we'd have to build protos as part of this CI job. # FunctionsManual.cpp is excluded to keep this diff clean. It will be fixed # in a follow up PR. # /torch/csrc/generic/*.cpp is excluded because those files aren't actually built. # that are not easily converted to accepted c++ 'torch/csrc/jit/passes/onnx/helper.cpp', 'torch/csrc/jit/passes/onnx/shape_type_inference.cpp', 'torch/csrc/jit/serialization/onnx.cpp', 'torch/csrc/jit/serialization/export.cpp', 'torch/csrc/jit/serialization/import.cpp', 'torch/csrc/jit/serialization/import_legacy.cpp', 'torch/csrc/onnx/init.cpp', 'torch/csrc/cuda/nccl.*', 'torch/csrc/cuda/python_nccl.cpp', 'torch/csrc/autograd/FunctionsManual.cpp', 'torch/csrc/generic/*.cpp', 'torch/csrc/jit/codegen/cuda/runtime/*', 'torch/csrc/utils/disable_torch_function.cpp', ] init_command = [ 'python3', 'tools/linter/adapters/s3_init.py', '--config-json=tools/linter/adapters/s3_init_config.json', '--linter=clang-tidy', '--dry-run={{DRYRUN}}', '--output-dir=.lintbin', '--output-name=clang-tidy', ] command = [ 'python3', 'tools/linter/adapters/clangtidy_linter.py', '--binary=.lintbin/clang-tidy', '--build_dir=./build', '--', '@{{PATHSFILE}}' ] [[linter]] code = 'TYPEIGNORE' include_patterns = ['**/*.py', '**/*.pyi'] exclude_patterns = [ 'test/test_jit.py', ] command = [ 'python3', 'tools/linter/adapters/grep_linter.py', '--pattern=# type:\s*ignore([^\[]|$)', '--linter-name=TYPEIGNORE', '--error-name=unqualified type: ignore', """--error-description=\ This line has an unqualified `type: ignore`; \ please convert it to `type: ignore[xxxx]`\ """, '--', '@{{PATHSFILE}}' ] [[linter]] code = 'NOQA' include_patterns = ['**/*.py', '**/*.pyi'] exclude_patterns = ['caffe2/**'] command = [ 'python3', 'tools/linter/adapters/grep_linter.py', '--pattern=# noqa([^:]|$)', '--linter-name=NOQA', '--error-name=unqualified noqa', """--error-description=\ This line has an unqualified `noqa`; \ please convert it to `noqa: XXXX`\ """, '--', '@{{PATHSFILE}}' ] [[linter]] code = 'CIRCLECI' include_patterns=['.circleci/**'] command = [ 'python3', 'tools/linter/adapters/circleci_linter.py', '--regen-script-working-dir=.circleci', '--config-yml=.circleci/config.yml', '--regen-script=generate_config_yml.py', ] [[linter]] code = 'NATIVEFUNCTIONS' include_patterns=['aten/src/ATen/native/native_functions.yaml'] command = [ 'python3', 'tools/linter/adapters/nativefunctions_linter.py', '--native-functions-yml=aten/src/ATen/native/native_functions.yaml', ] init_command = [ 'python3', 'tools/linter/adapters/pip_init.py', '--dry-run={{DRYRUN}}', 'ruamel.yaml==0.17.4', ] is_formatter = true [[linter]] code = 'NEWLINE' include_patterns=['**'] exclude_patterns=[ '**/contrib/**', 'third_party/**', '**/*.bat', '**/*.expect', '**/*.ipynb', '**/*.ps1', '**/*.ptl', 'tools/clang_format_hash/**', 'test/cpp/jit/upgrader_models/*.ptl', 'test/cpp/jit/upgrader_models/*.ptl.ff', ] command = [ 'python3', 'tools/linter/adapters/newlines_linter.py', '--', '@{{PATHSFILE}}', ] is_formatter = true [[linter]] code = 'SPACES' include_patterns = ['**'] exclude_patterns = [ '**/contrib/**', '**/*.diff', 'third_party/**', 'aten/src/ATen/native/vulkan/api/vk_mem_alloc.h', 'test/cpp/jit/upgrader_models/*.ptl', 'test/cpp/jit/upgrader_models/*.ptl.ff', ] command = [ 'python3', 'tools/linter/adapters/grep_linter.py', '--pattern=[[:blank:]]$', '--linter-name=SPACES', '--error-name=trailing spaces', '--replace-pattern=s/[[:blank:]]+$//', """--error-description=\ This line has trailing spaces; please remove them.\ """, '--', '@{{PATHSFILE}}' ] [[linter]] code = 'TABS' include_patterns = ['**'] exclude_patterns = [ '**/*.svg', '**/*Makefile', '**/contrib/**', 'third_party/**', '**/.gitattributes', '**/.gitmodules', 'aten/src/ATen/native/vulkan/api/vk_mem_alloc.h', 'test/cpp/jit/upgrader_models/*.ptl', 'test/cpp/jit/upgrader_models/*.ptl.ff', '.lintrunner.toml', ] command = [ 'python3', 'tools/linter/adapters/grep_linter.py', # @lint-ignore TXT2 '--pattern= ', '--linter-name=TABS', '--error-name=saw some tabs', '--replace-pattern=s/\t/ /', """--error-description=\ This line has tabs; please replace them with spaces.\ """, '--', '@{{PATHSFILE}}' ] [[linter]] code = 'INCLUDE' include_patterns = [ 'c10/**', 'aten/**', 'torch/csrc/**', ] exclude_patterns = [ 'aten/src/ATen/native/quantized/cpu/qnnpack/**', 'aten/src/ATen/native/vulkan/api/vk_mem_alloc.h', 'torch/csrc/jit/serialization/mobile_bytecode_generated.h', ] command = [ 'python3', 'tools/linter/adapters/grep_linter.py', '--pattern=#include "', '--linter-name=INCLUDE', '--error-name=quoted include', '--replace-pattern=s/#include "(.*)"$/#include <\1>/', """--error-description=\ This #include uses quotes; please convert it to #include \ """, '--', '@{{PATHSFILE}}' ] [[linter]] code = 'PYBIND11_INCLUDE' include_patterns = [ '**/*.cpp', '**/*.h', ] exclude_patterns = [ 'torch/csrc/utils/pybind.h', 'torch/utils/benchmark/utils/valgrind_wrapper/compat_bindings.cpp', 'caffe2/**/*', ] command = [ 'python3', 'tools/linter/adapters/grep_linter.py', '--pattern=#include ', '--linter-name=PYBIND11_INCLUDE', '--match-first-only', '--error-name=direct include of pybind11', # https://stackoverflow.com/a/33416489/23845 # NB: this won't work if the pybind11 include is on the first line; # but that's fine because it will just mean the lint will still fail # after applying the change and you will have to fix it manually '--replace-pattern=1,/(#include \n\1/', """--error-description=\ This #include directly includes pybind11 without also including \ #include ; this means some important \ specializations may not be included.\ """, '--', '@{{PATHSFILE}}' ] [[linter]] code = 'PYBIND11_SPECIALIZATION' include_patterns = [ '**/*.cpp', '**/*.h', ] exclude_patterns = [ # The place for all orphan specializations 'torch/csrc/utils/pybind.h', # These specializations are non-orphan 'torch/csrc/distributed/c10d/init.cpp', 'torch/csrc/jit/python/pybind.h', # These are safe to exclude as they do not have Python 'c10/**/*', ] command = [ 'python3', 'tools/linter/adapters/grep_linter.py', '--pattern=PYBIND11_DECLARE_HOLDER_TYPE', '--linter-name=PYBIND11_SPECIALIZATION', '--error-name=pybind11 specialization in non-standard location', """--error-description=\ This pybind11 specialization (PYBIND11_DECLARE_HOLDER_TYPE) should \ be placed in torch/csrc/utils/pybind.h so that it is guaranteed to be \ included at any site that may potentially make use of it via py::cast. \ If your specialization is in the same header file as the definition \ of the holder type, you can ignore this lint by adding your header to \ the exclude_patterns for this lint in .lintrunner.toml. For more \ information see https://github.com/pybind/pybind11/issues/4099 \ """, '--', '@{{PATHSFILE}}' ] [[linter]] code = 'PYPIDEP' include_patterns = ['.github/**'] exclude_patterns = [ '**/*.rst', '**/*.py', '**/*.md', '**/*.diff', ] command = [ 'python3', 'tools/linter/adapters/grep_linter.py', """--pattern=\ (pip|pip3|python -m pip|python3 -m pip|python3 -mpip|python -mpip) \ install ([a-zA-Z0-9][A-Za-z0-9\\._\\-]+)([^/=<>~!]+)[A-Za-z0-9\\._\\-\\*\\+\\!]*$\ """, '--linter-name=PYPIDEP', '--error-name=unpinned PyPI install', """--error-description=\ This line has unpinned PyPi installs; \ please pin them to a specific version: e.g. 'thepackage==1.2'\ """, '--', '@{{PATHSFILE}}' ] [[linter]] code = 'EXEC' include_patterns = ['**'] exclude_patterns = [ 'third_party/**', 'torch/bin/**', '**/*.so', '**/*.py', '**/*.sh', '**/*.bash', '**/git-pre-commit', '**/git-clang-format', '**/gradlew', ] command = [ 'python3', 'tools/linter/adapters/exec_linter.py', '--', '@{{PATHSFILE}}', ] [[linter]] code = 'CUBINCLUDE' include_patterns = ['aten/**'] exclude_patterns = [ 'aten/src/ATen/cuda/cub*.cuh', ] command = [ 'python3', 'tools/linter/adapters/grep_linter.py', '--pattern=#include