Skip to content

Commit b08166b

Browse files
authored
Fix brain dict regression (#2204)
Fix regression resulting in ignored pylint settings We get rid of the immutable instance attributes in AstroidManager, ensuring that these always mutate the global state instead of instance's. This fixes a regression introduced in commit bbcc58b. Fixes #2200
1 parent 4493399 commit b08166b

File tree

3 files changed

+42
-5
lines changed

3 files changed

+42
-5
lines changed

ChangeLog

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,11 @@ Release date: TBA
147147

148148
Refs pylint-dev/pylint#8598
149149

150+
* Fix a regression in 2.12.0 where settings in AstroidManager would be ignored.
151+
Most notably this addresses pylint-dev/pylint#7433.
152+
153+
Refs #2204
154+
150155

151156
What's New in astroid 2.15.6?
152157
=============================

astroid/manager.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,27 @@ def __init__(self) -> None:
6969
self.astroid_cache = AstroidManager.brain["astroid_cache"]
7070
self._mod_file_cache = AstroidManager.brain["_mod_file_cache"]
7171
self._failed_import_hooks = AstroidManager.brain["_failed_import_hooks"]
72-
self.always_load_extensions = AstroidManager.brain["always_load_extensions"]
73-
self.optimize_ast = AstroidManager.brain["optimize_ast"]
7472
self.extension_package_whitelist = AstroidManager.brain[
7573
"extension_package_whitelist"
7674
]
7775
self._transform = AstroidManager.brain["_transform"]
7876

77+
@property
78+
def always_load_extensions(self) -> bool:
79+
return AstroidManager.brain["always_load_extensions"]
80+
81+
@always_load_extensions.setter
82+
def always_load_extensions(self, value: bool) -> None:
83+
AstroidManager.brain["always_load_extensions"] = value
84+
85+
@property
86+
def optimize_ast(self) -> bool:
87+
return AstroidManager.brain["optimize_ast"]
88+
89+
@optimize_ast.setter
90+
def optimize_ast(self, value: bool) -> None:
91+
AstroidManager.brain["optimize_ast"] = value
92+
7993
@property
8094
def register_transform(self):
8195
# This and unregister_transform below are exported for convenience

tests/test_regrtest.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import pytest
1111

12-
from astroid import MANAGER, Instance, bases, nodes, parse, test_utils
12+
from astroid import MANAGER, Instance, bases, manager, nodes, parse, test_utils
1313
from astroid.builder import AstroidBuilder, _extract_single_node, extract_node
1414
from astroid.context import InferenceContext
1515
from astroid.exceptions import InferenceError
@@ -36,6 +36,24 @@ def tearDown(self) -> None:
3636
sys.path.pop(0)
3737
sys.path_importer_cache.pop(resources.find("data"), None)
3838

39+
def test_manager_instance_attributes_reference_global_MANAGER(self) -> None:
40+
for expected in (True, False):
41+
with mock.patch.dict(
42+
manager.AstroidManager.brain,
43+
values={"always_load_extensions": expected},
44+
):
45+
assert (
46+
MANAGER.always_load_extensions
47+
== manager.AstroidManager.brain["always_load_extensions"]
48+
)
49+
with mock.patch.dict(
50+
manager.AstroidManager.brain,
51+
values={"optimize_ast": expected},
52+
):
53+
assert (
54+
MANAGER.optimize_ast == manager.AstroidManager.brain["optimize_ast"]
55+
)
56+
3957
def test_module_path(self) -> None:
4058
man = test_utils.brainless_manager()
4159
mod = man.ast_from_module_name("package.import_package_subpackage_module")
@@ -49,9 +67,9 @@ def test_module_path(self) -> None:
4967
self.assertEqual(module.name, "package.subpackage.module")
5068

5169
def test_package_sidepackage(self) -> None:
52-
manager = test_utils.brainless_manager()
70+
brainless_manager = test_utils.brainless_manager()
5371
assert "package.sidepackage" not in MANAGER.astroid_cache
54-
package = manager.ast_from_module_name("absimp")
72+
package = brainless_manager.ast_from_module_name("absimp")
5573
self.assertIsInstance(package, nodes.Module)
5674
self.assertTrue(package.package)
5775
subpackage = next(package.getattr("sidepackage")[0].infer())

0 commit comments

Comments
 (0)