diff --git a/kolla/hacking/__init__.py b/kolla/hacking/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/kolla/hacking/checks.py b/kolla/hacking/checks.py new file mode 100644 index 0000000000000000000000000000000000000000..5a86fe57164ede078ce3e6191916694fae0da90d --- /dev/null +++ b/kolla/hacking/checks.py @@ -0,0 +1,26 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import re + + +mutable_default_args = re.compile(r"^\s*def .+\((.+=\{\}|.+=\[\])") + + +def no_mutable_default_args(logical_line): + msg = "N301: Method's default argument shouldn't be mutable!" + if mutable_default_args.match(logical_line): + yield (0, msg) + + +def factory(register): + register(no_mutable_default_args) diff --git a/tox.ini b/tox.ini index 828cf2961e3b0bb962797c9865617f3e96f41f51..1f0c237e5a2757bd5dcb92d155e04bc24957e097 100644 --- a/tox.ini +++ b/tox.ini @@ -130,3 +130,6 @@ commands= [flake8] show-source = True exclude=.eggs,.git,.tox,doc + +[hacking] +local-check-factory = kolla.hacking.checks.factory