mirror of
https://github.com/gentoo-mirror/guru.git
synced 2026-07-17 19:13:13 -04:00
Closes: https://bugs.gentoo.org/907137 Signed-off-by: David Roman <davidroman96@gmail.com>
61 lines
2.1 KiB
Diff
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
|