diff --git a/kolla/hacking/__init__.py b/kolla/hacking/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/kolla/hacking/checks.py b/kolla/hacking/checks.py new file mode 100644 index 0000000000..5a86fe5716 --- /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 828cf2961e..1f0c237e5a 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