Skip to content

Commit 1cd4850

Browse files
committed
update
1 parent 68d36af commit 1cd4850

File tree

1 file changed

+11
-30
lines changed

1 file changed

+11
-30
lines changed

src/sphinxnotes/snippet/ext.py

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -69,34 +69,14 @@ def extract_keywords(s: Snippet) -> list[str]:
6969
return keywords
7070

7171

72-
def is_document_matched(
73-
pats: dict[str, list[str]], docname: str
74-
) -> dict[str, list[str]]:
75-
"""Whether the docname matched by given patterns pats"""
76-
new_pats = {}
77-
for tag, ps in pats.items():
72+
def _get_document_allowed_tags(pats: dict[str, list[str]], docname: str) -> str:
73+
"""Return the tags of snippets that are allowed to be picked from the document."""
74+
allowed_tags = ''
75+
for tags, ps in pats.items():
7876
for pat in ps:
7977
if re.match(pat, docname):
80-
new_pats.setdefault(tag, []).append(pat)
81-
return new_pats
82-
83-
84-
def is_snippet_matched(pats: dict[str, list[str]], s: Snippet, docname: str) -> bool:
85-
"""Whether the snippet's tags and docname matched by given patterns pats"""
86-
if '*' in pats: # Wildcard
87-
for pat in pats['*']:
88-
if re.match(pat, docname):
89-
return True
90-
91-
not_in_pats = True
92-
for k in extract_tags(s):
93-
if k not in pats:
94-
continue
95-
not_in_pats = False
96-
for pat in pats[k]:
97-
if re.match(pat, docname):
98-
return True
99-
return not_in_pats
78+
allowed_tags += tags
79+
return allowed_tags
10080

10181

10282
def on_config_inited(app: Sphinx, appcfg: SphinxConfig) -> None:
@@ -132,15 +112,16 @@ def on_doctree_resolved(app: Sphinx, doctree: nodes.document, docname: str) -> N
132112
)
133113
return
134114

135-
pats = is_document_matched(app.config.snippet_patterns, docname)
136-
if len(pats) == 0:
137-
logger.debug('[snippet] skip picking because %s is not matched', docname)
115+
allowed_tags = _get_document_allowed_tags(app.config.snippet_patterns, docname)
116+
if not allowed_tags:
117+
logger.debug('[snippet] skip picking: no tag allowed for document %s', docname)
138118
return
139119

140120
doc = []
141121
snippets = pick(app, doctree, docname)
142122
for s, n in snippets:
143-
if not is_snippet_matched(pats, s, docname):
123+
# FIXME: Better filter logic.
124+
if extract_tags(s) not in allowed_tags:
144125
continue
145126
tpath = [x.astext() for x in titlepath.resolve(app.env, docname, n)]
146127
if isinstance(s, Section):

0 commit comments

Comments
 (0)