aboutsummaryrefslogtreecommitdiff
path: root/test/lint/lint-python-mutable-default-parameters.py
diff options
context:
space:
mode:
authorMarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>2024-07-31 08:33:01 +0200
committerMarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>2024-08-09 08:11:16 +0200
commitfac7b7ff7f453a9ba14053a99ce0a113509bf600 (patch)
tree3629c2edbf2a1c866a23893ede52940360b041d4 /test/lint/lint-python-mutable-default-parameters.py
parentdf241970a3a3e7e24c001c399435d1baf3b8a2ae (diff)
downloadbitcoin-fac7b7ff7f453a9ba14053a99ce0a113509bf600.tar.xz
lint: Find function calls in default arguments
Diffstat (limited to 'test/lint/lint-python-mutable-default-parameters.py')
-rwxr-xr-xtest/lint/lint-python-mutable-default-parameters.py72
1 files changed, 0 insertions, 72 deletions
diff --git a/test/lint/lint-python-mutable-default-parameters.py b/test/lint/lint-python-mutable-default-parameters.py
deleted file mode 100755
index 820595ea34..0000000000
--- a/test/lint/lint-python-mutable-default-parameters.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright (c) 2019-2022 The Bitcoin Core developers
-# Distributed under the MIT software license, see the accompanying
-# file COPYING or http://www.opensource.org/licenses/mit-license.php.
-
-"""
-Detect when a mutable list or dict is used as a default parameter value in a Python function.
-"""
-
-import subprocess
-import sys
-
-
-def main():
- command = [
- "git",
- "grep",
- "-E",
- r"^\s*def [a-zA-Z0-9_]+\(.*=\s*(\[|\{)",
- "--",
- "*.py",
- ]
- output = subprocess.run(command, stdout=subprocess.PIPE, text=True)
- if len(output.stdout) > 0:
- error_msg = (
- "A mutable list or dict seems to be used as default parameter value:\n\n"
- f"{output.stdout}\n"
- f"{example()}"
- )
- print(error_msg)
- sys.exit(1)
- else:
- sys.exit(0)
-
-
-def example():
- return """This is how mutable list and dict default parameter values behave:
-
->>> def f(i, j=[], k={}):
-... j.append(i)
-... k[i] = True
-... return j, k
-...
->>> f(1)
-([1], {1: True})
->>> f(1)
-([1, 1], {1: True})
->>> f(2)
-([1, 1, 2], {1: True, 2: True})
-
-The intended behaviour was likely:
-
->>> def f(i, j=None, k=None):
-... if j is None:
-... j = []
-... if k is None:
-... k = {}
-... j.append(i)
-... k[i] = True
-... return j, k
-...
->>> f(1)
-([1], {1: True})
->>> f(1)
-([1], {1: True})
->>> f(2)
-([2], {2: True})"""
-
-
-if __name__ == "__main__":
- main()