-
Notifications
You must be signed in to change notification settings - Fork 42
/
.pre-commit-config.yaml
135 lines (123 loc) · 5.4 KB
/
.pre-commit-config.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
ci:
autofix_prs: false
autoupdate_schedule: quarterly
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
exclude: \.txt$
- id: trailing-whitespace # Remove trailing whitespaces
- id: check-merge-conflict
# Fix common spelling mistakes
- repo: https://github.com/codespell-project/codespell
rev: v2.3.0
hooks:
- id: codespell
args: [
'--ignore-words-list', 'nd,alos,inout,theses',
'--ignore-regex', '\bhist\b',
'--'
]
types_or: [python, rst, markdown]
files: ^(xdem|doc|tests)/
# Replace relative imports (e.g. 'from . import georaster' -> 'from geoutils import georaster')
- repo: https://github.com/MarcoGorelli/absolufy-imports
rev: v0.3.1
hooks:
- id: absolufy-imports
# Format the code aggressively using black
- repo: https://github.com/psf/black
rev: 24.10.0
hooks:
- id: black
args: [--line-length=120]
# Lint the code using flake8
- repo: https://github.com/pycqa/flake8
rev: 7.1.1
hooks:
- id: flake8
# More than one argument in the second list, so need to pass arguments as below (and -- to finish)
args: [
'--max-line-length', '120', # we can write dicts however we want
'--extend-ignore', 'E203,C408,B028', # flake8 disagrees with black, so this should be ignored.
'--'
]
additional_dependencies:
- flake8-comprehensions
- flake8-bugbear
files: ^(xdem|tests)
# Lint the code using mypy
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.13.0
hooks:
- id: mypy
args: [
--config-file=mypy.ini,
--strict,
--implicit-optional,
--ignore-missing-imports, # Don't warn about stubs since pre-commit runs in a limited env
--allow-untyped-calls, # Dynamic function/method calls are okay. Untyped function definitions are not okay.
--show-error-codes,
--no-warn-unused-ignores, # Ignore 'type: ignore' comments that are not used.
--disable-error-code=attr-defined, # "Module has no attribute 'XXX'" occurs because of the pre-commit env.
--disable-error-code=name-defined, # "Name 'XXX' is not defined" occurs because of the pre-commit env.
--disable-error-code=var-annotated,
--disable-error-code=no-any-return
]
additional_dependencies: [tokenize-rt==3.2.0, numpy==1.26]
files: ^(xdem|tests|doc/code)
# Sort imports using isort
- repo: https://github.com/PyCQA/isort
rev: 5.13.2
hooks:
- id: isort
args: ["--profile", "black"]
# Automatically upgrade syntax to a minimum version
- repo: https://github.com/asottile/pyupgrade
rev: v3.19.0
hooks:
- id: pyupgrade
args: [--py37-plus]
# Various formattings
- repo: https://github.com/pre-commit/pygrep-hooks
rev: v1.10.0
hooks:
# Single backticks should apparently not be used
- id: rst-backticks
# Check that all directives end with double colon
- id: rst-directive-colons
types: [text]
types_or: [python, rst]
# Inline code should not touch normal text
- id: rst-inline-touching-normal
types: [text]
types_or: [python, rst]
# Eval should never be used (can do arbitrary code execution)
- id: python-no-eval
# Enforce the use of type annotations instead of docstring type comments
- id: python-use-type-annotations
# Add custom regex lints (see .relint.yml)
- repo: https://github.com/codingjoe/relint
rev: 3.3.1
hooks:
- id: relint
- repo: local
hooks:
# Generate pip's requirements.txt from conda's environment.yml to ensure consistency
- id: pip-to-conda
name: Generate pip dependency from conda
language: python
entry: .github/scripts/generate_pip_deps_from_conda.py
files: ^(environment.yml|requirements.txt)$
pass_filenames: false
additional_dependencies: [tomli, pyyaml]
# # Add license header to the source files
# - repo: local
# hooks:
# - id: add-license-header
# name: Add License Header
# entry: python .github/scripts/apply_license_header.py
# language: python
# files: \.py$