Skip to content

Commit d19d9fa

Browse files
committed
refactor
1 parent 39b69a6 commit d19d9fa

File tree

1 file changed

+17
-17
lines changed
  • src/sphinx_codeautolink/extension

1 file changed

+17
-17
lines changed

src/sphinx_codeautolink/extension/block.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -371,22 +371,22 @@ def link_html(
371371

372372
# The builtin re doesn't support variable-width lookbehind,
373373
# so instead we use a match groups in all pre patterns to remove the non-content.
374-
no_dot_prere = r'(?<!<span class="o">\.</span>)()'
374+
no_dot_pre = r'(?<!<span class="o">\.</span>)()'
375375
# Potentially instead assert an initial closing parenthesis followed by a dot.
376-
call_dot_prere = r'(\)</span>\s*<span class="o">\.</span>\s*)'
377-
# Pygments 2.19 changed import whitespace highlighting
378-
# so we need to support both for now (see #152)
379-
import_prere = (
380-
r'((<span class="kn">import</span>(<span class="w">\s+</span>)|(/s+)(<span class="p">\(</span>\s*)?)'
381-
r'|(<span class="[op]">,</span>(<span class="w">\s*</span>)|(\s*)))'
376+
call_dot_pre = r'(\)</span>\s*<span class="o">\.</span>\s*)'
377+
no_dot_post = r'(?!(<span class="o">\.)|(</a>))'
378+
379+
# Pygments 2.19 changed import whitespace highlighting so we need to support both
380+
# with "w" class and raw whitespace for now (see #152)
381+
whitespace = r'(<span class="w">\s*</span>)|(\s*)'
382+
import_pre = (
383+
rf'((<span class="kn">import</span>{whitespace}(<span class="p">\(</span>\s*)?)'
384+
rf'|(<span class="[op]">,</span>{whitespace}))'
382385
)
383-
from_prere = r'(<span class="kn">from</span>(<span class="w">\s+</span>)|(\s+))'
386+
import_post = r'(?=($)|(\s+)|(<span class="[opw]">))(?!</a>)'
384387

385-
no_dot_postre = r'(?!(<span class="o">\.)|(</a>))'
386-
import_postre = (
387-
r'(?=($)|(\s+)|(<span class="w">)|(<span class="[op]">,</span>)|(<span class="p">\)))(?!</a>)'
388-
)
389-
from_postre = r'(?=(<span class="w">\s*</span>)|(\s*)<span class="kn">import</span>)'
388+
from_pre = rf'(<span class="kn">from</span>{whitespace})'
389+
from_post = rf'(?={whitespace}<span class="kn">import</span>)'
390390

391391

392392
def construct_name_pattern(name: Name) -> str:
@@ -397,17 +397,17 @@ def construct_name_pattern(name: Name) -> str:
397397
[first_name_pattern.format(name=parts[0])]
398398
+ [name_pattern.format(name=p) for p in parts[1:]]
399399
)
400-
return no_dot_prere + pattern + no_dot_postre
400+
return no_dot_pre + pattern + no_dot_post
401401
elif name.context == LinkContext.after_call:
402402
parts = name.code_str.split(".")
403403
pattern = period.join(
404404
[first_name_pattern.format(name=parts[0])]
405405
+ [name_pattern.format(name=p) for p in parts[1:]]
406406
)
407-
return call_dot_prere + pattern + no_dot_postre
407+
return call_dot_pre + pattern + no_dot_post
408408
elif name.context == LinkContext.import_from:
409409
pattern = import_from_pattern.format(name=name.code_str)
410-
return from_prere + pattern + from_postre
410+
return from_pre + pattern + from_post
411411
elif name.context == LinkContext.import_target:
412412
pattern = import_target_pattern.format(name=name.code_str)
413-
return import_prere + pattern + import_postre
413+
return import_pre + pattern + import_post

0 commit comments

Comments
 (0)