0
0
mirror of https://github.com/mongodb/mongo.git synced 2024-12-01 01:21:03 +01:00
mongodb/docs/linting.md
2022-05-25 17:40:16 +00:00

4.9 KiB

Linting in the MongoDB codebase

C++ Linters

clang-format

The buildscripts/clang_format.py wrapper script runs the clang-format linter. You can see the usage message for the wrapper by running buildscripts/clang_format.py --help.

Ex: buildscripts/clang_format.py lint

Linter Configuration File(s) Help Command Documentation
clang-format .clang-format clang-format --help https://clang.llvm.org/docs/ClangFormat.html

clang-tidy

The evergreen/run_clang_tidy.sh shell script runs the clang-tidy linter. In order to run clang-tidy you must have a compilation database (compile_commands.json file).

Ex: bash buildscripts/run_clang_tidy.sh

Linter Configuration File(s) Help Command Documentation
clang-tidy .clang-tidy clang-tidy --help https://clang.llvm.org/extra/clang-tidy/index.html

errorcodes.py

The buildscripts/errorcodes.py script runs a custom error code linter, which verifies that all assertion codes are distinct. You can see the usage by running the following command: buildscripts/errorcodes.py --help.

Ex: buildscripts/errorcodes.py

quickcpplint.py

The buildscripts/quickcpplint.py script runs a simple MongoDB C++ linter. You can see the usage by running the following command: buildscripts/quickcpplint.py --help. You can take a look at buildscripts/linter/simplecpplint.py to better understand the rules for this linter.

Ex: buildscripts/quickcpplint.py lint

Javascript Linters

The buildscripts/eslint.py wrapper script runs the eslint javascript linter. You can see the usage message for the wrapper by running buildscripts/eslint.py --help.

Ex: buildscripts/eslint.py lint

Linter Configuration File(s) Help Command Documentation
eslint .eslintrc.yml .eslintignore eslint --help https://eslint.org/

Yaml Linters

The buildscripts/yamllinters.sh shell script runs the yaml linters. The supported yaml linters are: yamllint & evergreen-lint. evergreen-lint is a custom MongoDB linter used specifically for evergreen yaml files.

Ex: bash buildscripts/yamllinters.sh

Linter Configuration File(s) Help Command Documentation
yamllint etc/yamllint_config.yml yamllint --help https://readthedocs.org/projects/yamllint/
evergreen-lint etc/evergreen_lint.yml python -m evergreen_lint --help https://github.com/evergreen-ci/config-linter

Python Linters

The buildscripts/pylinters.py wrapper script runs the Python linters. You can see the usage message for the wrapper by running the following command: buildscripts/pylinters.py --help. The following linters are supported: pylint, mypy, pydocstyle & yapf.

Ex: buildscripts/pylinters.py lint

Linter Configuration File(s) Help Command Documentation
pylint .pylintrc pylint --help https://www.pylint.org/
mypy .mypy.ini mypy --help https://readthedocs.org/projects/mypy/
pydocstyle .pydocstyle pydocstyle --help https://readthedocs.org/projects/pydocstyle/
yapf .style.yapf yapf --help https://github.com/google/yapf

SCons Linters

buildscripts/pylinters.py has the lint-scons and fix-scons commands to lint and fix SCons and build system related code. Currently yapf is the only linter supported for SCons code.

Using SCons for linting

You can use SCons to run most of the linters listed above via their corresponding Python wrapper script. SCons also provides the ability to run multiple linters in a single command. At this time, SCons does not support clang-tidy or buildscripts/yamllinters.sh

Here are some examples:

SCons Target Linter(s) Example
lint clang-format errorcodes.py quickcpplint.py eslint pylint mypy pydocstyle yapf buildscripts/scons.py lint
lint-fast clang-format errorcodes.py eslint pylint mypy pydocstyle yapf buildscripts/scons.py lint-fast
lint-clang-format clang-format buildscripts/scons.py lint-clang-format
lint-errorcodes errorcodes.py buildscripts/scons.py lint-errorcodes
lint-lint.py quickcpplint.py buildscripts/scons.py lint-lint.py
lint-eslint eslint buildscripts/scons.py lint-eslint
lint-pylinters pylint mypy pydocstyle yapf buildscripts/scons.py lint-pylinters
lint-sconslinters yapf buildscripts/scons.py lint-sconslinters