Files
guru/app-text/lizard/files/lizard-1.17.10-py3.11.patch
2023-07-27 15:50:59 +02:00

61 lines
2.1 KiB
Diff

commit fc8a14e84acd8a4baa2d98bdec4e7ac18ed137a5
Author: Mazunki Hoksaas <rolferen@gmail.com>
Date: Thu Jul 27 15:04:16 2023 +0200
add support for python3.11 re module
diff --git a/lizard_languages/code_reader.py b/lizard_languages/code_reader.py
index 1eb95d5..9e12658 100644
--- a/lizard_languages/code_reader.py
+++ b/lizard_languages/code_reader.py
@@ -4,6 +4,8 @@ Base class for all language parsers
import re
from copy import copy
+from functools import reduce
+from operator import or_
class CodeStateMachine(object):
@@ -112,7 +114,7 @@ class CodeReader:
if not token_class:
token_class = create_token
- def _generate_tokens(source, add):
+ def _generate_tokens(source, add, flags=re.NOFLAG):
# DO NOT put any sub groups in the regex. Good for performance
_until_end = r"(?:\\\n|[^\n])*"
combined_symbols = ["<<=", ">>=", "||", "&&", "===", "!==",
@@ -136,7 +138,7 @@ class CodeReader:
r"|\\\n" +
r"|\n" +
r"|[^\S\n]+" +
- r"|.)", re.M | re.S)
+ r"|.)", re.M | re.S | flags)
macro = ""
for match in token_pattern.finditer(source):
token = token_class(match)
@@ -154,7 +156,21 @@ class CodeReader:
if macro:
yield macro
- return _generate_tokens(source_code, addition)
+ flag_dict = {
+ 'a': re.A, # ASCII-only matching
+ 'i': re.I, # Ignore case
+ 'L': re.L, # Locale dependent
+ 'm': re.M, # Multi-line
+ 's': re.S, # Dot matches all
+ 'u': re.U, # Unicode matching
+ 'x': re.X # Verbose
+ }
+
+ pattern = re.compile(r'\(\?[aiLmsux]+\)')
+ re_flags = ''.join(opt[2:-1] for opt in pattern.findall(addition))
+ flags = reduce(or_, (flag_dict[flag] for flag in re_flags), re.NOFLAG)
+
+ return _generate_tokens(source_code, pattern.sub('', addition), flags=flags)
def __call__(self, tokens, reader):
self.context = reader.context