dash/test/lint
MarcoFalke a84ec5cc19 Merge #16726: tests: Avoid common Python default parameter gotcha when mutable dict/list:s are used as default parameter values
e4f4ea47ebf7774fb6f445adde7bf7ea71fa05a1 lint: Catch use of [] or {} as default parameter values in Python functions (practicalswift)
25dd86715039586d92176eee16e9c6644d2547f0 Avoid using mutable default parameter values (practicalswift)

Pull request description:

  Avoid common Python default parameter gotcha when mutable `dict`/`list`:s are used as default parameter values.

  Examples of this gotcha caught during review:
  * https://github.com/bitcoin/bitcoin/pull/16673#discussion_r317415261
  * https://github.com/bitcoin/bitcoin/pull/14565#discussion_r241942304

  Perhaps surprisingly this is how mutable list and dictionary default parameter values behave in Python:

  ```
  >>> 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})
  ```

  In contrast to:

  ```
  >>> 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})
  ```

  The latter is typically the intended behaviour.

  This PR fixes two instances of this and adds a check guarding against this gotcha going forward :-)

ACKs for top commit:
  Sjors:
    Oh Python... ACK e4f4ea47ebf7774fb6f445adde7bf7ea71fa05a1. Testing tip: swap the two commits.

Tree-SHA512: 56e14d24fc866211a20185c9fdb274ed046c3aed2dc0e07699e58b6f9fa3b79f6d0c880fb02d72b7fe5cc5eb7c0ff6da0ead33123344e1a872209370c2e49e3f
2023-04-04 12:45:27 -05:00
..
check-doc.py merge bitcoin#19671: Remove -zapwallettxes 2022-05-13 18:06:06 +05:30
check-rpc-mappings.py refactor: remove leftover rpc prefix from filename (evo, quorum) 2022-10-21 21:51:45 +05:30
commit-script-check.sh Merge bitcoin/bitcoin#23543: test: Prevent non-compatible sed binary for scripted-diffs 2022-04-11 09:46:40 -07:00
extended-lint-all.sh Merge #14505: test: Add linter to make sure single parameter constructors are marked explicit 2021-11-24 14:36:20 -05:00
extended-lint-cppcheck.sh build/depends: commit dashpay/bls-signatures@66ee820f to source tree as vendored (#5077) 2022-11-22 11:34:46 -06:00
git-subtree-check.sh Merge #17329: linter: Strip trailing / in path for git-subtree-check 2021-07-13 20:43:16 -05:00
lint-all.sh Optimize linters (#4637) 2021-12-30 19:34:36 +03:00
lint-assertions.sh partial bitcoin#19277: Add Assert identity function' 2022-05-13 18:06:06 +05:30
lint-circular-dependencies.sh Merge #17261: Make ScriptPubKeyMan an actual interface and the wallet to have multiple 2023-03-19 11:08:31 -05:00
lint-cppcheck-dash.sh refactor: remove leftover rpc prefix from filename (evo, quorum) 2022-10-21 21:51:45 +05:30
lint-filenames.sh build: add exclusions to linting scripts and filters 2022-12-01 00:51:08 +05:30
lint-format-strings.py Merge #17261: Make ScriptPubKeyMan an actual interface and the wallet to have multiple 2023-03-19 11:08:31 -05:00
lint-format-strings.sh build/depends: commit dashpay/bls-signatures@66ee820f to source tree as vendored (#5077) 2022-11-22 11:34:46 -06:00
lint-git-commit-check.sh Fix lint-git-commit-check.sh (#4267) 2021-07-19 12:32:12 +03:00
lint-include-guards.sh build: add exclusions to linting scripts and filters 2022-12-01 00:51:08 +05:30
lint-includes.sh Merge #17477: Remove the mempool's NotifyEntryAdded and NotifyEntryRemoved signals 2023-02-15 00:07:39 -06:00
lint-locale-dependence.sh Merge #18817: doc: Document differences in bitcoind and bitcoin-qt locale handling 2023-04-02 17:00:24 -05:00
lint-logs.sh Merge #17260: Split some CWallet functions into new LegacyScriptPubKeyMan (#4938) 2022-08-08 11:05:21 -05:00
lint-python-dead-code.sh Merge #21096: Re-add dead code detection 2021-10-05 20:34:00 +03:00
lint-python-mutable-default-parameters.sh Merge #16726: tests: Avoid common Python default parameter gotcha when mutable dict/list:s are used as default parameter values 2023-04-04 12:45:27 -05:00
lint-python-utf8-encoding.sh partial merge #17398: Update leveldb to 1.22+ (#4230) 2021-07-15 15:42:55 -05:00
lint-python.sh build: add exclusions to linting scripts and filters 2022-12-01 00:51:08 +05:30
lint-qt.sh Merge #13529: Use new Qt5 connect syntax 2021-08-23 12:12:31 -04:00
lint-rpc-help.sh Merge bitcoin#14726: Use RPCHelpMan for all RPCs (#4492) 2021-10-12 00:55:23 +03:00
lint-shebang.sh build: add exclusions to linting scripts and filters 2022-12-01 00:51:08 +05:30
lint-shell-locale.sh build/depends: commit dashpay/bls-signatures@66ee820f to source tree as vendored (#5077) 2022-11-22 11:34:46 -06:00
lint-shell.sh build: add exclusions to linting scripts and filters 2022-12-01 00:51:08 +05:30
lint-spelling.ignore-words.txt Merge #17351: doc: Fix some misspellings 2022-04-02 16:30:53 +05:30
lint-spelling.sh partial Merge bitcoin/bitcoin#22405: build: remove --enable-glibc-back-compat from Guix build 2023-03-26 16:50:26 -05:00
lint-submodule.sh Merge #18056: ci: Check for submodules 2021-07-13 21:17:15 -05:00
lint-tests.sh Merge #13510: Scripts and tools: Obsolete #!/bin/bash shebang 2020-12-18 12:55:45 -06:00
lint-whitespace.sh Merge #20937: guix: Make nsis reproducible by respecting SOURCE-DATE-EPOCH 2023-03-26 16:50:26 -05:00
README.md Merge #17176: ci: Cleanup macOS runs 2022-05-17 01:20:21 -04:00

This folder contains lint scripts.

check-doc.py

Check for missing documentation of command line options.

commit-script-check.sh

Verification of scripted diffs. Scripted diffs are only assumed to run on the latest LTS release of Ubuntu. Running them on other operating systems might require installing GNU tools, such as GNU sed.

git-subtree-check.sh

Run this script from the root of the repository to verify that a subtree matches the contents of the commit it claims to have been updated to.

To use, make sure that you have fetched the upstream repository branch in which the subtree is maintained:

Usage: git-subtree-check.sh DIR (COMMIT)

COMMIT may be omitted, in which case HEAD is used.

lint-all.sh

Calls other scripts with the lint- prefix.