@@ -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
10282def 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