helpers.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. # Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html
  2. # For details: https://github.com/pylint-dev/astroid/blob/main/LICENSE
  3. # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt
  4. from __future__ import annotations
  5. from collections.abc import Callable
  6. from typing import TYPE_CHECKING
  7. from astroid.exceptions import InferenceError
  8. from astroid.manager import AstroidManager
  9. from astroid.nodes.scoped_nodes import Module
  10. if TYPE_CHECKING:
  11. from astroid.nodes.node_ng import NodeNG
  12. def register_module_extender(
  13. manager: AstroidManager, module_name: str, get_extension_mod: Callable[[], Module]
  14. ) -> None:
  15. def transform(node: Module) -> None:
  16. extension_module = get_extension_mod()
  17. for name, objs in extension_module.locals.items():
  18. node.locals[name] = objs
  19. for obj in objs:
  20. if obj.parent is extension_module:
  21. obj.parent = node
  22. manager.register_transform(Module, transform, lambda n: n.name == module_name)
  23. # pylint: disable-next=too-many-locals
  24. def register_all_brains(manager: AstroidManager) -> None:
  25. from astroid.brain import ( # pylint: disable=import-outside-toplevel
  26. brain_argparse,
  27. brain_attrs,
  28. brain_boto3,
  29. brain_builtin_inference,
  30. brain_collections,
  31. brain_crypt,
  32. brain_ctypes,
  33. brain_curses,
  34. brain_dataclasses,
  35. brain_datetime,
  36. brain_dateutil,
  37. brain_functools,
  38. brain_gi,
  39. brain_hashlib,
  40. brain_http,
  41. brain_hypothesis,
  42. brain_io,
  43. brain_mechanize,
  44. brain_multiprocessing,
  45. brain_namedtuple_enum,
  46. brain_numpy_core_einsumfunc,
  47. brain_numpy_core_fromnumeric,
  48. brain_numpy_core_function_base,
  49. brain_numpy_core_multiarray,
  50. brain_numpy_core_numeric,
  51. brain_numpy_core_numerictypes,
  52. brain_numpy_core_umath,
  53. brain_numpy_ma,
  54. brain_numpy_ndarray,
  55. brain_numpy_random_mtrand,
  56. brain_pathlib,
  57. brain_pkg_resources,
  58. brain_pytest,
  59. brain_qt,
  60. brain_random,
  61. brain_re,
  62. brain_regex,
  63. brain_responses,
  64. brain_scipy_signal,
  65. brain_signal,
  66. brain_six,
  67. brain_sqlalchemy,
  68. brain_ssl,
  69. brain_statistics,
  70. brain_subprocess,
  71. brain_threading,
  72. brain_type,
  73. brain_typing,
  74. brain_unittest,
  75. brain_uuid,
  76. )
  77. brain_argparse.register(manager)
  78. brain_attrs.register(manager)
  79. brain_boto3.register(manager)
  80. brain_builtin_inference.register(manager)
  81. brain_collections.register(manager)
  82. brain_crypt.register(manager)
  83. brain_ctypes.register(manager)
  84. brain_curses.register(manager)
  85. brain_dataclasses.register(manager)
  86. brain_datetime.register(manager)
  87. brain_dateutil.register(manager)
  88. brain_functools.register(manager)
  89. brain_gi.register(manager)
  90. brain_hashlib.register(manager)
  91. brain_http.register(manager)
  92. brain_hypothesis.register(manager)
  93. brain_io.register(manager)
  94. brain_mechanize.register(manager)
  95. brain_multiprocessing.register(manager)
  96. brain_namedtuple_enum.register(manager)
  97. brain_numpy_core_einsumfunc.register(manager)
  98. brain_numpy_core_fromnumeric.register(manager)
  99. brain_numpy_core_function_base.register(manager)
  100. brain_numpy_core_multiarray.register(manager)
  101. brain_numpy_core_numerictypes.register(manager)
  102. brain_numpy_core_umath.register(manager)
  103. brain_numpy_random_mtrand.register(manager)
  104. brain_numpy_ma.register(manager)
  105. brain_numpy_ndarray.register(manager)
  106. brain_numpy_core_numeric.register(manager)
  107. brain_pathlib.register(manager)
  108. brain_pkg_resources.register(manager)
  109. brain_pytest.register(manager)
  110. brain_qt.register(manager)
  111. brain_random.register(manager)
  112. brain_re.register(manager)
  113. brain_regex.register(manager)
  114. brain_responses.register(manager)
  115. brain_scipy_signal.register(manager)
  116. brain_signal.register(manager)
  117. brain_six.register(manager)
  118. brain_sqlalchemy.register(manager)
  119. brain_ssl.register(manager)
  120. brain_statistics.register(manager)
  121. brain_subprocess.register(manager)
  122. brain_threading.register(manager)
  123. brain_type.register(manager)
  124. brain_typing.register(manager)
  125. brain_unittest.register(manager)
  126. brain_uuid.register(manager)
  127. def is_class_var(node: NodeNG) -> bool:
  128. """Return True if node is a ClassVar, with or without subscripting."""
  129. try:
  130. inferred = next(node.infer())
  131. except (InferenceError, StopIteration):
  132. return False
  133. return getattr(inferred, "name", "") == "ClassVar"