7
7
from astroid import context , inference_tip , nodes
8
8
from astroid .brain .helpers import register_module_extender
9
9
from astroid .builder import _extract_single_node , parse
10
- from astroid .const import PY37_PLUS , PY39_PLUS
10
+ from astroid .const import PY37_PLUS , PY39_PLUS , PY311_PLUS
11
11
from astroid .manager import AstroidManager
12
12
13
13
14
- def _re_transform ():
15
- # Since Python 3.6 there is the RegexFlag enum
16
- # where every entry will be exposed via updating globals()
17
- return parse (
18
- """
14
+ def _re_transform () -> nodes .Module :
15
+ # The RegexFlag enum exposes all its entries by updating globals()
16
+ # In 3.6-3.10 all flags come from sre_compile
17
+ if not PY311_PLUS :
18
+ return parse (
19
+ """
19
20
import sre_compile
20
21
ASCII = sre_compile.SRE_FLAG_ASCII
21
22
IGNORECASE = sre_compile.SRE_FLAG_IGNORECASE
@@ -34,6 +35,30 @@ def _re_transform():
34
35
TEMPLATE = sre_compile.SRE_FLAG_TEMPLATE
35
36
T = TEMPLATE
36
37
DEBUG = sre_compile.SRE_FLAG_DEBUG
38
+ """
39
+ )
40
+ # On 3.11+ all flags come from re._compiler
41
+ return parse (
42
+ """
43
+ import re._compiler as _compiler
44
+ NOFLAG = 0
45
+ ASCII = _compiler.SRE_FLAG_ASCII
46
+ IGNORECASE = _compiler.SRE_FLAG_IGNORECASE
47
+ LOCALE = _compiler.SRE_FLAG_LOCALE
48
+ UNICODE = _compiler.SRE_FLAG_UNICODE
49
+ MULTILINE = _compiler.SRE_FLAG_MULTILINE
50
+ DOTALL = _compiler.SRE_FLAG_DOTALL
51
+ VERBOSE = _compiler.SRE_FLAG_VERBOSE
52
+ TEMPLATE = _compiler.SRE_FLAG_TEMPLATE
53
+ DEBUG = _compiler.SRE_FLAG_DEBUG
54
+ A = ASCII
55
+ I = IGNORECASE
56
+ L = LOCALE
57
+ U = UNICODE
58
+ M = MULTILINE
59
+ S = DOTALL
60
+ X = VERBOSE
61
+ T = TEMPLATE
37
62
"""
38
63
)
39
64
0 commit comments