blob: 6781ac4f11ed18b5453e7a7ccaaf5b5358e9fbff [file] [log] [blame]
Henry Schreinerfd61f502020-09-16 17:13:41 -04001# To use:
2#
3# pre-commit run -a
4#
5# Or:
6#
7# pre-commit install # (runs every time you commit in git)
8#
9# To update this file:
10#
11# pre-commit autoupdate
12#
13# See https://github.com/pre-commit/pre-commit
14
Henry Schreinerd8c7ee02020-07-20 13:35:21 -040015repos:
Henry Schreinerfd61f502020-09-16 17:13:41 -040016# Standard hooks
Henry Schreinerd8c7ee02020-07-20 13:35:21 -040017- repo: https://github.com/pre-commit/pre-commit-hooks
Henry Schreiner8e5d3d22021-01-25 16:09:36 -050018 rev: v3.4.0
Henry Schreinerd8c7ee02020-07-20 13:35:21 -040019 hooks:
20 - id: check-added-large-files
21 - id: check-case-conflict
22 - id: check-merge-conflict
23 - id: check-symlinks
24 - id: check-yaml
25 - id: debug-statements
26 - id: end-of-file-fixer
27 - id: mixed-line-ending
28 - id: requirements-txt-fixer
29 - id: trailing-whitespace
30 - id: fix-encoding-pragma
31
Henry Schreinerfd61f502020-09-16 17:13:41 -040032# Black, the code formatter, natively supports pre-commit
33- repo: https://github.com/psf/black
34 rev: 20.8b1
35 hooks:
36 - id: black
Henry Schreiner645d8382020-10-14 14:08:41 -040037 # By default, this ignores pyi files, though black supports them
38 types: [text]
Henry Schreinerc50f90e2020-10-16 16:38:13 -040039 files: \.pyi?$
Henry Schreinerfd61f502020-09-16 17:13:41 -040040
41# Changes tabs to spaces
Henry Schreinerd8c7ee02020-07-20 13:35:21 -040042- repo: https://github.com/Lucas-C/pre-commit-hooks
Henry Schreiner5c936d42020-07-21 09:34:20 -040043 rev: v1.1.9
Henry Schreinerd8c7ee02020-07-20 13:35:21 -040044 hooks:
45 - id: remove-tabs
Henry Schreinerd8c7ee02020-07-20 13:35:21 -040046
Henry Schreinerfd61f502020-09-16 17:13:41 -040047# Flake8 also supports pre-commit natively (same author)
Henry Schreinerd8c7ee02020-07-20 13:35:21 -040048- repo: https://gitlab.com/pycqa/flake8
Henry Schreiner8e5d3d22021-01-25 16:09:36 -050049 rev: 3.8.4
Henry Schreinerd8c7ee02020-07-20 13:35:21 -040050 hooks:
51 - id: flake8
Henry Schreiner8b0ccf72020-07-20 15:07:22 -040052 additional_dependencies: [flake8-bugbear, pep8-naming]
Henry Schreinerd8c7ee02020-07-20 13:35:21 -040053 exclude: ^(docs/.*|tools/.*)$
Henry Schreiner8b0ccf72020-07-20 15:07:22 -040054
Henry Schreinerfd61f502020-09-16 17:13:41 -040055# CMake formatting
Henry Schreinere2a96892020-07-29 16:42:07 -040056- repo: https://github.com/cheshirekow/cmake-format-precommit
Henry Schreiner82dbc5b2020-09-30 15:48:08 -040057 rev: v0.6.13
Henry Schreinere2a96892020-07-29 16:42:07 -040058 hooks:
59 - id: cmake-format
60 additional_dependencies: [pyyaml]
Henry Schreinered6de122020-08-01 23:47:47 -040061 types: [file]
62 files: (\.cmake|CMakeLists.txt)(.in)?$
Henry Schreinere2a96892020-07-29 16:42:07 -040063
Henry Schreiner645d8382020-10-14 14:08:41 -040064# Check static types with mypy
65- repo: https://github.com/pre-commit/mirrors-mypy
Henry Schreiner8e5d3d22021-01-25 16:09:36 -050066 rev: v0.800
Henry Schreiner645d8382020-10-14 14:08:41 -040067 hooks:
68 - id: mypy
69 # The default Python type ignores .pyi files, so let's rerun if detected
70 types: [text]
71 files: ^pybind11.*\.pyi?$
72 # Running per-file misbehaves a bit, so just run on all files, it's fast
73 pass_filenames: false
74
Henry Schreinerfd61f502020-09-16 17:13:41 -040075# Checks the manifest for missing files (native support)
76- repo: https://github.com/mgedmin/check-manifest
Henry Schreiner8e5d3d22021-01-25 16:09:36 -050077 rev: "0.46"
Henry Schreinerfd61f502020-09-16 17:13:41 -040078 hooks:
79 - id: check-manifest
80 # This is a slow hook, so only run this if --hook-stage manual is passed
81 stages: [manual]
82 additional_dependencies: [cmake, ninja]
83
84# The original pybind11 checks for a few C++ style items
Henry Schreiner8b0ccf72020-07-20 15:07:22 -040085- repo: local
86 hooks:
Henry Schreiner37f845a2020-09-08 09:26:50 -040087 - id: disallow-caps
88 name: Disallow improper capitalization
89 language: pygrep
Henry Schreinerebd5c5b2020-11-11 11:45:28 -050090 entry: PyBind|Numpy|Cmake|CCache
Henry Schreiner37f845a2020-09-08 09:26:50 -040091 exclude: .pre-commit-config.yaml
92
93- repo: local
94 hooks:
Henry Schreiner8b0ccf72020-07-20 15:07:22 -040095 - id: check-style
96 name: Classic check-style
97 language: system
98 types:
99 - c++
100 entry: ./tools/check-style.sh