Skip to content

Commit bf41457

Browse files
committed
Avoid greedy regex, which is very slow for long numbers
1 parent dc79ba1 commit bf41457

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

fprettify/__init__.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,11 @@ def build_scope_parser(fypp=True, mod=True, subr=True):
500500

501501
## F90_CONSTANTS_TYPES_RE = re.compile(r"\b" + F90_NUMBER_ALL_RE + "_(" + "|".join([a + r"\b" for a in (
502502
F90_CONSTANTS_TYPES_RE = re.compile(
503-
r"(" + F90_NUMBER_ALL_RE + ")*_(" + "|".join((
503+
# Zaikun's modification 3 >>
504+
# Avoid greedy regex, which is very slow for long numbers.
505+
#r"(" + F90_NUMBER_ALL_RE + ")*_(" + "|".join((
506+
r"(" + F90_NUMBER_ALL_RE + ")_(" + "|".join((
507+
# << Zaikun's modification
504508
## F2003 iso_fortran_env constants.
505509
## F2003 iso_c_binding constants.
506510
"c_int", "c_short", "c_long", "c_long_long", "c_signed_char",
@@ -1071,19 +1075,20 @@ def format_single_fline(f_line, whitespace, whitespace_dict, linebreak_pos,
10711075
'print': 6, # 6: print / read statements
10721076
'type': 7, # 7: select type components
10731077
'intrinsics': 8, # 8: intrinsics
1074-
'decl': 9 # 9: declarations
1078+
'decl': 9, # 9: declarations
1079+
'use_only': 10
10751080
}
10761081

10771082
if whitespace == 0:
1078-
spacey = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
1083+
spacey = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
10791084
elif whitespace == 1:
1080-
spacey = [1, 1, 1, 1, 0, 0, 1, 0, 1, 1]
1085+
spacey = [1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1]
10811086
elif whitespace == 2:
1082-
spacey = [1, 1, 1, 1, 1, 0, 1, 0, 1, 1]
1087+
spacey = [1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1]
10831088
elif whitespace == 3:
1084-
spacey = [1, 1, 1, 1, 1, 1, 1, 0, 1, 1]
1089+
spacey = [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]
10851090
elif whitespace == 4:
1086-
spacey = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
1091+
spacey = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
10871092
else:
10881093
raise NotImplementedError("unknown value for whitespace")
10891094

@@ -1342,8 +1347,8 @@ def add_whitespace_context(line, spacey):
13421347

13431348
# format ':' for labels and use only statements
13441349
if USE_RE.search(line):
1345-
line = re.sub(r'(only)\s*:\s*', r'\g<1>:' + ' ' *
1346-
spacey[0], line, flags=RE_FLAGS)
1350+
line = re.sub(r'(only)\s*:\s*', r'\g<1>' + ' ' * spacey[10] + ':' + ' ' * spacey[0], line, flags=RE_FLAGS)
1351+
13471352

13481353
return line
13491354

@@ -2018,6 +2023,8 @@ def get_arg_parser(args):
20182023
help="boolean, en-/disable whitespace for select type components")
20192024
parser.add_argument("--whitespace-intrinsics", type=str2bool, nargs="?", default="None", const=True,
20202025
help="boolean, en-/disable whitespace for intrinsics like if/write/close")
2026+
parser.add_argument("--whitespace-use-only", type=str2bool, nargs="?", default="None", const=True,
2027+
help="boolean, en-/disable whitespace for the colon after `use MODULE, only`")
20212028
parser.add_argument("--strict-indent", action='store_true', default=False, help="strictly impose indentation even for nested loops")
20222029
parser.add_argument("--enable-decl", action="store_true", default=False, help="enable whitespace formatting of declarations ('::' operator).")
20232030
parser.add_argument("--disable-indent", action='store_true', default=False, help="don't impose indentation")
@@ -2087,6 +2094,7 @@ def build_ws_dict(args):
20872094
ws_dict['print'] = args.whitespace_print
20882095
ws_dict['type'] = args.whitespace_type
20892096
ws_dict['intrinsics'] = args.whitespace_intrinsics
2097+
ws_dict['use_only'] = args.whitespace_use_only
20902098
return ws_dict
20912099

20922100
# support legacy input:

0 commit comments

Comments
 (0)