Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CI: exclude linting dependencies from the unittest environment. #8861

Merged

Conversation

mbyrnepr2
Copy link
Member

Type of Changes

Type
πŸ› Bug fix
✨ New feature
βœ“ πŸ”¨ Refactoring
πŸ“œ Docs

Description

@mbyrnepr2 mbyrnepr2 added Skip news πŸ”‡ This change does not require a changelog entry Maintenance Discussion or action around maintaining pylint or the dev workflow labels Jul 18, 2023
@codecov
Copy link

codecov bot commented Jul 18, 2023

Codecov Report

Merging #8861 (728d576) into main (c4281bc) will not change coverage.
The diff coverage is n/a.

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##             main    #8861    /-   ##
=======================================
  Coverage   95.88%   95.88%           
=======================================
  Files         173      173           
  Lines       18552    18552           
=======================================
  Hits        17789    17789           
  Misses        763      763           

@mbyrnepr2 mbyrnepr2 force-pushed the ci_exclude_linting_deps_from_unittests branch from f89e0af to d3eab3d Compare July 18, 2023 18:40
@mbyrnepr2 mbyrnepr2 force-pushed the ci_exclude_linting_deps_from_unittests branch from d3eab3d to 7c63128 Compare July 18, 2023 19:10
@@ -9,4 8,4 @@ pytest-xdist~=3.3
six
# Type packages for mypy
types-pkg_resources==0.1.3
tox>=3
tox>=4.6.4
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are we bumping this? Is the old version broken?

Copy link
Member Author

@mbyrnepr2 mbyrnepr2 Jul 19, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The main reason is I wanted to invalidate the cache (for testing purposes) so that I could see that the virtual environment for the Pytest stage is using the test dependencies only and not re-using the older cache from the previous run with previously-installed dependencies (in which case I couldn't prove this change is working).
For a visual inspection you can compare the output above to this run of the unit tests.

So other than that, I can revert this line once I'm finished noodling, or we can bump it since its a new major version - I'm ok with either outcome.

Copy link
Member Author

@mbyrnepr2 mbyrnepr2 Jul 20, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok so I think the pylint job is failing only for the context of the current branch(or caches related to this branch) because the CI is now using the cache created by the first push/commit: f89e0af.
This commit only contains the change to the requirements_test.txt but not the "install pre-commit" command in the venv.

Apart from that I'm not sure why the primer jobs are erroring - do you have an idea about that @DanielNoord ?

@mbyrnepr2 mbyrnepr2 force-pushed the ci_exclude_linting_deps_from_unittests branch from 348d1d8 to 29a0e0a Compare July 20, 2023 12:04
@mbyrnepr2 mbyrnepr2 force-pushed the ci_exclude_linting_deps_from_unittests branch from e83cf1d to 712ffb8 Compare July 20, 2023 13:04
@@ -173,11 174,9 @@ jobs:
key:
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.prepare-base.outputs.python-key }}
- name: Install tox
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This step wasn't necessary because tox is installed already via requirements_test.txt and it is available once the venv is activated.

@@ -1,4 1,3 @@
-r requirements_test_pre_commit.txt
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the purpose of requirements_test_pre_commit.txt is to invalidate the cache in the CI and install test a new dependency if a user changes the file manually (or dependabot bumps it).
Apart from that, there is a separate job in the CI to run pre-commit and its dependencies are managed via .pre-commit-config.yml.

@mbyrnepr2 mbyrnepr2 force-pushed the ci_exclude_linting_deps_from_unittests branch from 798193f to e7195aa Compare July 20, 2023 13:39
@mbyrnepr2 mbyrnepr2 changed the title CI: exclude linting dependencies from the unittest environement. CI: exclude linting dependencies from the unittest environment. Jul 20, 2023
@jacobtylerwalls
Copy link
Member

jacobtylerwalls commented Jul 20, 2023

The primer is failing with a message I sometimes see locally (to the best of my recollection) when I have an editable install on my path of astroid and the primer __main__ script tries to clone/install a new astroid. Have you looked into it?

@mbyrnepr2 mbyrnepr2 marked this pull request as ready for review July 20, 2023 14:06
@mbyrnepr2
Copy link
Member Author

mbyrnepr2 commented Jul 20, 2023

The primer is failing with a message I sometimes see locally (to the best of my recollection) when I have an editable install on my path of astroid and the primer __main__ script tries to clone/install a new astroid. Have you looked into it?

I haven't looked thoroughly @jacobtylerwalls, I'm going to take a break but I'd like to look into it. Specifically the error is: https://github.com/pylint-dev/pylint/actions/runs/5611758519/jobs/10268523177?pr=8861#step:11:25
git.exc.NoSuchPathError: /home/runner/work/pylint/pylint/tests/.pylint_primer_tests/pylint-dev/astroid.
Perhaps it is related to the keys that are created from the matrix numbers, and they are not deterministic, but its just off the top of my head.

@jacobtylerwalls
Copy link
Member

(I'd suggest inserting a pip list before the failing line of the script to make sure astroid isn't present.)

@jacobtylerwalls
Copy link
Member

It might also be easier to debug after #8854.

@DanielNoord
Copy link
Collaborator

The failing primers are due to the cache miss. We don't handle that correctly apparently.

We once decided to only create the project caches on main as to not spam our cache with builds from broken PR's. (This can perhaps be reconsidered). If you look at the workflow we don't hit the cache but are then trying to validate it. That obviously fails.

@mbyrnepr2
Copy link
Member Author

The failing primers are due to the cache miss. We don't handle that correctly apparently.

We once decided to only create the project caches on main as to not spam our cache with builds from broken PR's. (This can perhaps be reconsidered). If you look at the workflow we don't hit the cache but are then trying to validate it. That obviously fails.

Thanks @DanielNoord πŸ‘. So, my understanding is that the clone of the primer packages is done on the main branch and all PR branches attempt to access those packages by hitting that single source of truth. Now, if say, the cache was evicted due to hitting the size limit for GitHub workflow caches, then we may need to re-clone in the PR branches. Maybe, let's see :D

@github-actions

This comment has been minimized.

Copy link
Member

@jacobtylerwalls jacobtylerwalls left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Glad this is working!

.github/workflows/primer_run_pr.yaml Outdated Show resolved Hide resolved
@@ -1,4 1,3 @@
-r requirements_test_pre_commit.txt
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if we should update the last paragraph here about pre-commit installation to point out the need to install the pre-commit requirements?

@mbyrnepr2
Copy link
Member Author

Glad this is working!

I was initially happy to see the checks passing but I’m not sure it makes sense to do the clone here. It could contribute to the overall cache size capacity being reached quicker and caches becoming evicted etc. I think I’d like to give it some more consideration before merging anywayπŸ˜„

@mbyrnepr2
Copy link
Member Author

Glad this is working!

I was initially happy to see the checks passing but I’m not sure it makes sense to do the clone here. It could contribute to the overall cache size capacity being reached quicker and caches becoming evicted etc. I think I’d like to give it some more consideration before merging anywayπŸ˜„

This current way may also be contributing to the massive diff which doesn’t look right either

@jacobtylerwalls
Copy link
Member

Ah, can you explain why there would be more caches? Are we using a different cache key than the one created on main?

@github-actions
Copy link
Contributor

πŸ€– Effect of this PR on checked open source code: πŸ€–

Effect on astroid:
The following messages are now emitted:

  1. line-too-long:
    Line too long (103/100)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/arguments.py#L185
  2. fixme:
    XXX can do better ?
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/arguments.py#L218
  3. too-complex:
    'infer_argument' is too complex. The McCabe rating is 29
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/arguments.py#L141
  4. consider-ternary-expression:
    Consider rewriting as a ternary expression
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/arguments.py#L186
  5. use-implicit-booleaness-not-comparison-to-zero:
    "argindex == 0" can be simplified to "not argindex", if it is strictly an int, as 0 is falsey
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/arguments.py#L211
  6. magic-value-comparison:
    Consider using a named constant or an enum instead of 'method'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/arguments.py#L215
  7. magic-value-comparison:
    Consider using a named constant or an enum instead of 'method'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/arguments.py#L230
  8. magic-value-comparison:
    Consider using a named constant or an enum instead of 'classmethod'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/arguments.py#L234
  9. too-many-branches:
    Too many branches (26/25)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/arguments.py#L141
  10. locally-disabled:
    Locally disabling import-outside-toplevel (C0415)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L418
  11. locally-disabled:
    Locally disabling import-outside-toplevel (C0415)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L525
  12. locally-disabled:
    Locally disabling too-many-locals (R0914)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L694
  13. locally-disabled:
    Locally disabling too-many-statements (R0915)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L694
  14. empty-comment:
    Line with empty comment
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L833
  15. empty-comment:
    Line with empty comment
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L836
  16. too-complex:
    '_resolve_assignment_parts' is too complex. The McCabe rating is 13
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L478
  17. too-complex:
    '_infer_context_manager' is too complex. The McCabe rating is 14
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L540
  18. too-complex:
    'starred_assigned_stmts' is too complex. The McCabe rating is 36
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L678
  19. magic-value-comparison:
    Consider using a named constant or an enum instead of 'staticmethod'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L365
  20. magic-value-comparison:
    Consider using a named constant or an enum instead of 'metaclass'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L368
  21. protected-access:
    Access to a protected member _proxied of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L372
  22. magic-value-comparison:
    Consider using a named constant or an enum instead of 'classmethod'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L373
  23. magic-value-comparison:
    Consider using a named constant or an enum instead of 'method'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L376
  24. while-used:
    Used while loop
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L382
  25. protected-access:
    Access to a protected member _proxied of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L383
  26. magic-value-comparison:
    Consider using a named constant or an enum instead of 'init'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L392
  27. too-many-try-statements:
    try clause contains 3 statements, expected at most 1
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L404
  28. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L412
  29. while-used:
    Used while loop
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L429
  30. protected-access:
    Access to a protected member _proxied of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L430
  31. unused-argument:
    Unused argument 'assign_path'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L416
  32. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L444
  33. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L465
  34. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L519
  35. redefined-loop-name:
    Redefining 'assigned' from loop (line 527)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L529
  36. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L540
  37. docstring-first-line-empty:
    First line empty in function docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L678
  38. invalid-name:
    Function name "determine_starred_iteration_lookups" doesn't conform to '[a-z][a-z0-9_]{2,30}$' pattern
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L695
  39. too-many-try-statements:
    try clause contains 2 statements, expected at most 1
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L849
  40. redefined-loop-name:
    Redefining 'element' from loop (line 829)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L851
  41. too-many-branches:
    Too many branches (28/25)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L678
  42. unused-argument:
    Unused argument 'assign_path'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L682
  43. unused-argument:
    Unused argument 'self'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L876
  44. unused-argument:
    Unused argument 'node'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L877
  45. unused-argument:
    Unused argument 'context'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L878
  46. unused-argument:
    Unused argument 'assign_path'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L879
  47. unused-argument:
    Unused argument 'self'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L890
  48. unused-argument:
    Unused argument 'node'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L891
  49. unused-argument:
    Unused argument 'context'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L892
  50. unused-argument:
    Unused argument 'assign_path'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L893
  51. unused-argument:
    Unused argument 'node'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L905
  52. unused-argument:
    Unused argument 'context'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L906
  53. unused-argument:
    Unused argument 'assign_path'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L907
  54. suppressed-message:
    Suppressed 'import-outside-toplevel' (from line 418)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L418
  55. suppressed-message:
    Suppressed 'import-outside-toplevel' (from line 525)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L525
  56. suppressed-message:
    Suppressed 'too-many-locals' (from line 694)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L678
  57. suppressed-message:
    Suppressed 'too-many-statements' (from line 694)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/protocols.py#L678
  58. locally-disabled:
    Locally disabling unsubscriptable-object (E1136)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L125
  59. locally-disabled:
    Locally disabling unsubscriptable-object (E1136)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1114
  60. locally-disabled:
    Locally disabling unsubscriptable-object (E1136)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1801
  61. fixme:
    FIXME : maybe we should reintroduce and visit_delattr ?
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1255
  62. fixme:
    XXX REMOVE me :
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1500
  63. too-complex:
    This 'if' is too complex. The McCabe rating is 84
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L201
  64. too-complex:
    This 'if' is too complex. The McCabe rating is 12
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1850
  65. invalid-name:
    Type variable name "T_Doc" doesn't conform to predefined naming style
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L39
  66. too-many-try-statements:
    try clause contains 8 statements, expected at most 1
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L75
  67. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L73
  68. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L92
  69. invalid-name:
    Variable name "t" doesn't conform to '[a-z_][a-z0-9_]{2,30}$' pattern
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L136
  70. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L535
  71. consider-using-assignment-expr:
    Use 'if (cls := node.class) in self._visit_meths:' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L539
  72. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L671
  73. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L705
  74. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L729
  75. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L734
  76. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L737
  77. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L748
  78. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L858
  79. magic-value-comparison:
    Consider using a named constant or an enum instead of 'metaclass'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L899
  80. magic-value-comparison:
    Consider using a named constant or an enum instead of 'metaclass'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L912
  81. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L922
  82. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1015
  83. consider-ternary-expression:
    Consider rewriting as a ternary expression
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1021
  84. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1133
  85. consider-ternary-expression:
    Consider rewriting as a ternary expression
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1201
  86. consider-using-assignment-expr:
    Use 'if (type_comment_annotation := self.check_function_type_comment(node, newnode)):' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1208
  87. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1226
  88. redefined-loop-name:
    Redefining 'name' from loop (line 1351)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1352
  89. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1339
  90. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1356
  91. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1367
  92. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1384
  93. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1506
  94. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1517
  95. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1543
  96. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1672
  97. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1792
  98. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1824
  99. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1839
  100. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1852
  101. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1866
  102. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1877
  103. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1890
  104. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1890
  105. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1902
  106. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1917
  107. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1936
  108. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1956
  109. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1971
  110. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1987
  111. too-many-public-methods:
    Too many public methods (80/20)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L52
  112. suppressed-message:
    Suppressed 'unsubscriptable-object' (from line 125)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L125
  113. suppressed-message:
    Suppressed 'unsubscriptable-object' (from line 1114)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1114
  114. suppressed-message:
    Suppressed 'unsubscriptable-object' (from line 1801)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/rebuilder.py#L1801
  115. locally-disabled:
    Locally disabling unused-variable (W0612)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L673
  116. locally-disabled:
    Locally disabling useless-suppression (I0021)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L673
  117. locally-disabled:
    Locally disabling unused-variable (W0612)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L706
  118. locally-disabled:
    Locally disabling useless-suppression (I0021)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L706
  119. fixme:
    FIXME : should we merge child_sequence and locate_child ? locate_child
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L391
  120. fixme:
    TODO: Remove this after removal of the 'doc' attribute
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L744
  121. too-complex:
    'repr_tree' is too complex. The McCabe rating is 18
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L623
  122. consider-ternary-expression:
    Consider rewriting as a ternary expression
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L141
  123. too-many-try-statements:
    try clause contains 4 statements, expected at most 1
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L147
  124. consider-ternary-expression:
    Consider rewriting as a ternary expression
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L225
  125. consider-using-assignment-expr:
    Use 'if (attr := getattr(self, field)) is None:' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L245
  126. consider-using-assignment-expr:
    Use 'if not (attr := getattr(self, field)):' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L257
  127. while-used:
    Used while loop
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L267
  128. consider-using-assignment-expr:
    Use 'if (node_or_sequence := getattr(self, field)) is child:' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L353
  129. consider-ternary-expression:
    Consider rewriting as a ternary expression
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L431
  130. too-many-try-statements:
    try clause contains 3 statements, expected at most 1
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L448
  131. while-used:
    Used while loop
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L449
  132. while-used:
    Used while loop
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L454
  133. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L549
  134. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L552
  135. protected-access:
    Access to a protected member _get_name_nodes of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L554
  136. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L556
  137. invalid-name:
    Method name "get_return_nodes_skip_functions" doesn't conform to '[a-z][a-z0-9_]{2,30}$' pattern
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L556
  138. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L556
  139. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L559
  140. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L559
  141. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L562
  142. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L562
  143. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L565
  144. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L600
  145. unused-argument:
    Unused argument 'node'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L600
  146. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L609
  147. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L616
  148. invalid-name:
    Method name "eq" doesn't conform to '[a-z_][a-z0-9_]{2,30}$' pattern
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L616
  149. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L616
  150. unused-argument:
    Unused argument 'value'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L616
  151. unused-argument:
    Unused argument 'done'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L662
  152. unused-argument:
    Unused argument 'depth'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L662
  153. magic-value-comparison:
    Consider using a named constant or an enum instead of '2'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L686
  154. consider-using-assignment-expr:
    Use 'if not (broken := _repr_tree(node[0], result, done, cur_indent, depth)):' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L688
  155. protected-access:
    Access to a protected member _other_fields of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L729
  156. protected-access:
    Access to a protected member _astroid_fields of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L730
  157. protected-access:
    Access to a protected member _other_other_fields of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L732
  158. magic-value-comparison:
    Consider using a named constant or an enum instead of 'doc'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L745
  159. too-many-statements:
    Too many statements (65/60)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L623
  160. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L761
  161. unused-argument:
    Unused argument 'context'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L761
  162. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L781
  163. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L785
  164. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L785
  165. suppressed-message:
    Suppressed 'useless-suppression' (from line 673)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L673
  166. suppressed-message:
    Suppressed 'useless-suppression' (from line 706)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_ng.py#L706
  167. locally-disabled:
    Locally disabling too-many-instance-attributes (R0902)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L610
  168. locally-disabled:
    Locally disabling too-many-arguments (R0913)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L741
  169. locally-disabled:
    Locally disabling import-outside-toplevel (C0415)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1032
  170. locally-disabled:
    Locally disabling import-outside-toplevel (C0415)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1084
  171. locally-disabled:
    Locally disabling redefined-builtin (W0622)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1963
  172. locally-disabled:
    Locally disabling redefined-builtin (W0622)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2604
  173. locally-disabled:
    Locally disabling redefined-builtin (W0622)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2684
  174. locally-disabled:
    Locally disabling no-member (E1101)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2973
  175. locally-disabled:
    Locally disabling redefined-builtin (W0622)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3680
  176. locally-disabled:
    Locally disabling import-outside-toplevel (C0415)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3699
  177. locally-disabled:
    Locally disabling import-outside-toplevel (C0415)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4270
  178. line-too-long:
    Line too long (101/100)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L875
  179. line-too-long:
    Line too long (108/100)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2046
  180. line-too-long:
    Line too long (102/100)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2057
  181. too-many-lines:
    Too many lines in module (5446/3000)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1
  182. fixme:
    XXX maybe if self.ops:
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1841
  183. fixme:
    TODO: move to util?
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1845
  184. fixme:
    TODO When is 'level' None?
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2820
  185. fixme:
    XXX not 'nonzero'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4193
  186. fixme:
    TODO value is required, not optional
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4545
  187. fixme:
    TODO: See if we should revisit these with the normal builder.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L5418
  188. too-complex:
    '_get_arguments_data' is too complex. The McCabe rating is 16
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L867
  189. too-complex:
    'get_children' is too complex. The McCabe rating is 12
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L996
  190. too-complex:
    '_format_args' is too complex. The McCabe rating is 11
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1046
  191. too-complex:
    '_infer_subscript' is too complex. The McCabe rating is 13
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3689
  192. too-complex:
    'block_range' is too complex. The McCabe rating is 12
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3845
  193. too-complex:
    'block_range' is too complex. The McCabe rating is 12
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3946
  194. too-complex:
    '_infer_unaryop' is too complex. The McCabe rating is 15
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4264
  195. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L742
  196. consider-using-assignment-expr:
    Use 'if (annotation := self.varargannotation) is not None:' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L915
  197. consider-using-assignment-expr:
    Use 'if (annotation := self.kwonlyargs_annotations[index]) is not None:' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L921
  198. consider-using-assignment-expr:
    Use 'if (default := self.kw_defaults[index]) is not None:' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L924
  199. consider-using-assignment-expr:
    Use 'if (annotation := self.kwargannotation) is not None:' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L930
  200. consider-using-assignment-expr:
    Use 'if (index := _find_arg(argname, args)[0]) is not None:' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L954
  201. consider-using-assignment-expr:
    Use 'if (idx := index - (len(args) - len(self.defaults) - len(self.kw_defaults))) >= 0:' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L956
  202. missing-param-doc:
    "rec" missing in parameter documentation
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L975
  203. missing-type-doc:
    "rec" missing in parameter type documentation
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L975
  204. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1039
  205. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1046
  206. too-many-try-statements:
    try clause contains 5 statements, expected at most 1
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1095
  207. protected-access:
    Access to a protected member _proxied of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1098
  208. unused-argument:
    Unused argument 'kwargs'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1079
  209. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1151
  210. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1178
  211. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1203
  212. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1238
  213. protected-access:
    Access to a protected member _assign_nodes_in_scope of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1260
  214. protected-access:
    Access to a protected member _get_yield_nodes_skip_functions of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1263
  215. protected-access:
    Access to a protected member _get_yield_nodes_skip_lambdas of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1266
  216. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1295
  217. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1366
  218. too-many-try-statements:
    try clause contains 2 statements, expected at most 1
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1384
  219. protected-access:
    Access to a protected member _get_yield_nodes_skip_functions of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1400
  220. protected-access:
    Access to a protected member _get_yield_nodes_skip_lambdas of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1405
  221. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1487
  222. too-many-try-statements:
    try clause contains 2 statements, expected at most 1
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1500
  223. magic-value-comparison:
    Consider using a named constant or an enum instead of '**'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1519
  224. unused-argument:
    Unused argument 'kwargs'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1522
  225. docstring-first-line-empty:
    First line empty in method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1574
  226. consider-ternary-expression:
    Consider rewriting as a ternary expression
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1639
  227. magic-value-comparison:
    Consider using a named constant or an enum instead of 'or'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1639
  228. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1714
  229. too-many-try-statements:
    try clause contains 3 statements, expected at most 1
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1753
  230. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1818
  231. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1847
  232. docstring-first-line-empty:
    First line empty in method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1853
  233. redefined-loop-name:
    Redefining 'left' from loop (line 1876)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1883
  234. redefined-loop-name:
    Redefining 'right' from loop (line 1876)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1883
  235. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1960
  236. confusing-consecutive-elif:
    Consecutive elif with differing indentation level, consider creating a function to separate the inner elif
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1993
  237. docstring-first-line-empty:
    First line empty in method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2025
  238. magic-value-comparison:
    Consider using a named constant or an enum instead of 'value'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2079
  239. missing-param-doc:
    "context" missing in parameter documentation
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2083
  240. too-many-try-statements:
    try clause contains 2 statements, expected at most 1
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2102
  241. missing-raises-doc:
    "AstroidValueError" not documented as being raised
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2083
  242. missing-raises-doc:
    "AstroidIndexError" not documented as being raised
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2083
  243. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2123
  244. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2197
  245. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2255
  246. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2295
  247. missing-param-doc:
    "context" missing in parameter documentation
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2382
  248. consider-using-assignment-expr:
    Use 'if not (double_starred := util.safe_infer(value, context)):' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2474
  249. protected-access:
    Access to a protected member _infer_map of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2478
  250. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2509
  251. protected-access:
    Access to a protected member _get_yield_nodes_skip_functions of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2517
  252. protected-access:
    Access to a protected member _get_yield_nodes_skip_lambdas of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2521
  253. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2546
  254. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2602
  255. protected-access:
    Access to a protected member _get_name_nodes of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2640
  256. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2681
  257. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2758
  258. docstring-first-line-empty:
    First line empty in method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2776
  259. consider-using-assignment-expr:
    Use 'if (name := context.lookupname) is None:' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2847
  260. too-many-try-statements:
    try clause contains 4 statements, expected at most 1
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2860
  261. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2900
  262. docstring-first-line-empty:
    First line empty in method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2925
  263. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3001
  264. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3034
  265. protected-access:
    Access to a protected member _get_yield_nodes_skip_functions of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3039
  266. protected-access:
    Access to a protected member _get_yield_nodes_skip_lambdas of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3044
  267. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3067
  268. docstring-first-line-empty:
    First line empty in method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3128
  269. consider-using-assignment-expr:
    Use 'if (name := context.lookupname) is None:' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3179
  270. too-many-try-statements:
    try clause contains 2 statements, expected at most 1
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3182
  271. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3229
  272. docstring-first-line-empty:
    First line empty in method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3247
  273. missing-param-doc:
    "context" missing in parameter documentation
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3298
  274. docstring-first-line-empty:
    First line empty in method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3323
  275. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3393
  276. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3429
  277. magic-value-comparison:
    Consider using a named constant or an enum instead of 'NotImplementedError'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3445
  278. protected-access:
    Access to a protected member _get_name_nodes of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3445
  279. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3470
  280. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3477
  281. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3525
  282. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3544
  283. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3548
  284. missing-param-doc:
    "context" missing in parameter documentation
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3555
  285. magic-value-comparison:
    Consider using a named constant or an enum instead of 'start'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3564
  286. magic-value-comparison:
    Consider using a named constant or an enum instead of 'stop'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3566
  287. magic-value-comparison:
    Consider using a named constant or an enum instead of 'step'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3568
  288. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3573
  289. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3628
  290. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3681
  291. consider-using-assignment-expr:
    Use 'if (instance_as_index := helpers.class_instance_as_index(index)):' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3717
  292. unused-argument:
    Unused argument 'kwargs'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3690
  293. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3754
  294. docstring-first-line-empty:
    First line empty in method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3777
  295. docstring-first-line-empty:
    First line empty in method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3882
  296. docstring-first-line-empty:
    First line empty in method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3988
  297. missing-param-doc:
    "context" missing in parameter documentation
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4039
  298. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4080
  299. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4140
  300. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4180
  301. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4233
  302. too-many-try-statements:
    try clause contains 2 statements, expected at most 1
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4245
  303. magic-value-comparison:
    Consider using a named constant or an enum instead of 'not'.
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4259
  304. consider-using-assignment-expr:
    Use 'if (meth := UNARY_OP_METHOD[self.op]) is None:' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4280
  305. too-many-try-statements:
    try clause contains 12 statements, expected at most 1
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4296
  306. consider-using-assignment-expr:
    Use 'if (result := next(call_results, None)) is None:' instead
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4317
  307. unused-argument:
    Unused argument 'kwargs'
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4265
  308. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4364
  309. protected-access:
    Access to a protected member _get_yield_nodes_skip_functions of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4400
  310. protected-access:
    Access to a protected member _get_yield_nodes_skip_lambdas of a client class
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4405
  311. docstring-first-line-empty:
    First line empty in method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4429
  312. missing-param-doc:
    "type_annotation" missing in parameter documentation
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4468
  313. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4531
  314. docstring-first-line-empty:
    First line empty in method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4569
  315. docstring-first-line-empty:
    First line empty in method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4654
  316. missing-param-doc:
    "values" missing in parameter documentation
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4690
  317. differing-param-doc:
    "value" differing in parameter documentation
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4690
  318. docstring-first-line-empty:
    First line empty in method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4720
  319. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4759
  320. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4856
  321. no-self-use:
    Method could be a function
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4856
  322. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4938
  323. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4985
  324. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L5030
  325. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L5114
  326. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L5153
  327. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L5211
  328. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L5258
  329. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L5313
  330. missing-function-docstring:
    Missing function or method docstring
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L5361
  331. suppressed-message:
    Suppressed 'too-many-instance-attributes' (from line 610)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L608
  332. suppressed-message:
    Suppressed 'too-many-arguments' (from line 741)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L742
  333. suppressed-message:
    Suppressed 'import-outside-toplevel' (from line 1032)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1032
  334. suppressed-message:
    Suppressed 'import-outside-toplevel' (from line 1084)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1085
  335. suppressed-message:
    Suppressed 'import-outside-toplevel' (from line 1084)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1086
  336. suppressed-message:
    Suppressed 'redefined-builtin' (from line 1963)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L1963
  337. suppressed-message:
    Suppressed 'redefined-builtin' (from line 2604)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2604
  338. suppressed-message:
    Suppressed 'redefined-builtin' (from line 2684)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2684
  339. suppressed-message:
    Suppressed 'no-member' (from line 2973)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L2973
  340. suppressed-message:
    Suppressed 'redefined-builtin' (from line 3680)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3681
  341. suppressed-message:
    Suppressed 'import-outside-toplevel' (from line 3699)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L3699
  342. suppressed-message:
    Suppressed 'import-outside-toplevel' (from line 4270)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/node_classes.py#L4270
  343. locally-disabled:
    Locally disabling too-many-return-statements (R0911)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b9f200888c82a62510d64e67e0b2e2dd/astroid/nodes/scoped_nodes/scoped_nodes.py#L1298
  344. locally-disabled:
    Locally disabling import-outside-toplevel (C0415)
    https://github.com/pylint-dev/astroid/blob/4d03bec4b...

This comment was truncated because GitHub allows only 65536 characters in a comment.

This comment was generated for commit 728d576

@jacobtylerwalls
Copy link
Member

@DanielNoord it did occur to me recently that the project cache is not very useful now that so many projects are the in the primer. I think the cache is only good for about an hour at most before a new commit on one of the projects invalidates the whole thing.

@mbyrnepr2
Copy link
Member Author

mbyrnepr2 commented Jul 22, 2023

Ah, can you explain why there would be more caches? Are we using a different cache key than the one created on main?

Sorry, I guess the clone I've added wouldn't add a new cache. But it would add overhead if all the parallel jobs for a particular Python version perform the clones at the same time.

I do notice a large number of caches in the list (https://github.com/pylint-dev/pylint/actions/caches) so overall I think there should be some way to limit the number; otherwise caches may start to disappear leading to unexpected behaviour.
usage limits and eviction policy

@jacobtylerwalls
Copy link
Member

If you don't mind, I'd prefer to merge ASAP, as the broken primer is adding to the burden of understanding for a new contributor on another PR.

@mbyrnepr2
Copy link
Member Author

Ok @jacobtylerwalls πŸ‘

@jacobtylerwalls
Copy link
Member

@mbyrnepr2 just noticed the pylint pre-commit job is failing, I suppose we should look at that first

@mbyrnepr2
Copy link
Member Author

Ah yeah because of this, right? #8861 (comment)

@DanielNoord
Copy link
Collaborator

@DanielNoord it did occur to me recently that the project cache is not very useful now that so many projects are the in the primer. I think the cache is only good for about an hour at most before a new commit on one of the projects invalidates the whole thing.

I think the idea was/is that by allowing only one "environment" to create the cache we avoid this issue. The main job is the only one getting new commits and the PR jobs shouldn't care about them.

But I agree, feel free to merge. I'm on holiday with minimal internet so have little time to look into a more sustainable solution myself.

@jacobtylerwalls jacobtylerwalls merged commit 4e62b4c into pylint-dev:main Jul 22, 2023
43 of 44 checks passed
@Pierre-Sassoulas
Copy link
Member

I've been pushing for not using bleeding edge if external repository in primers for a long time, mainly because that way if something change in the result then you would know it must come from pylint. If using bleeding edge also invalidates the cache as soon as there is a new commit in one of the many very popular repo we're using (and it make sense that it does) then using bleeding edge is also making the cache useless and pipelines dramatically slower. I would be strongly in favor of setting the primed version by git sha and discussing the best way to upgrade those periodocally. What do you think @DanielNoord ?

@mbyrnepr2 mbyrnepr2 deleted the ci_exclude_linting_deps_from_unittests branch July 23, 2023 06:05
@DanielNoord
Copy link
Collaborator

All of those concerns can be/were avoided by only allowing main to update the cache. By doing so we make sure to always compare against the same version and the workflow that takes the longest is not blocking the merging of any PR.

Can't we just increase the retention period?

@mbyrnepr2
Copy link
Member Author

mbyrnepr2 commented Jul 23, 2023

All of those concerns can be/were avoided by only allowing main to update the cache. By doing so we make sure to always compare against the same version and the workflow that takes the longest is not blocking the merging of any PR.

Can't we just increase the retention period?

I haven’t seen anything in the docs about increasing retention period (apart from simply accessing it at least once per week) but perhaps we could add a workflow which removes caches which are no longer of use (e.g. venv caches created by a PR branch which has been closed or merged to main). Could also see if we can have only one primer package cache at any time and remove others (needs some more thought).

@Pierre-Sassoulas
Copy link
Member

All of those concerns can be/were avoided by only allowing main to update the cache.

Sure, but there's some thing to consider to implement the caching correctly on main cached with implicit bleeding edge (which do not seem to be taken into account atm). Some feature branches live for a long time and the closest common commit between main and the feature branch can become old (unavailable in cache ?). If new commits were made on main then there's an issue between the cache from the latest common commit might be too old and invalidated but the latest commit on main is having some unrelated changes from other pylint pull requests. I think it caused issue in the past.

Having the git sha being explicitly used in the cache hash and having most pipeline using the same cache unless we upgrade the primed repository or the dependencies seems like it would prevent headaches at implementation. Let me know if I'm mistaken and this cache mechanism is already implemented. But then even if it was already implemented perfectly; there's a second point that will still stand : the number of cached image should be a lot lower with explicit shas (one every time we upgrade a dependency or the primed repo shas, instead of one every time we commit on main, basically) so there should be less cache miss and less image created from scratch overall.

@DanielNoord
Copy link
Collaborator

All of those concerns can be/were avoided by only allowing main to update the cache.

Sure, but there's some thing to consider to implement the caching correctly on main cached with implicit bleeding edge (which do not seem to be taken into account atm). Some feature branches live for a long time and the closest common commit between main and the feature branch can become old (unavailable in cache ?). If new commits were made on main then there's an issue between the cache from the latest common commit might be too old and invalidated but the latest commit on main is having some unrelated changes from other pylint pull requests. I think it caused issue in the past.

Yeah this can of course happen. Ideally we would just run the primer twice, but that is too expensive (now)..

Having the git sha being explicitly used in the cache hash and having most pipeline using the same cache unless we upgrade the primed repository or the dependencies seems like it would prevent headaches at implementation. Let me know if I'm mistaken and this cache mechanism is already implemented. But then even if it was already implemented perfectly; there's a second point that will still stand : the number of cached image should be a lot lower with explicit shas (one every time we upgrade a dependency or the primed repo shas, instead of one every time we commit on main, basically) so there should be less cache miss and less image created from scratch overall.

We could consider this, but then I would only do this if we also set up a system to automatically bump the sha's. Testing against outdated code is not really useful and might also be harder to debug.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Maintenance Discussion or action around maintaining pylint or the dev workflow performance Skip news πŸ”‡ This change does not require a changelog entry
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants