1111# SPDX-License-Identifier: Apache-2.0
1212# *******************************************************************************
1313import os
14+ import re
1415
1516from sphinx .application import Sphinx
1617from sphinx_needs .data import NeedsInfoType
@@ -37,6 +38,7 @@ def id_contains_feature(app: Sphinx, need: NeedsInfoType, log: CheckLogger):
3738
3839 # Get the part of the string after the first two underscores: the path
3940 feature = parts [1 ]
41+ featureparts = re .split (r"[_-]" , feature )
4042
4143 dir_docname = os .path .dirname (str (need .get ("docname" , "" )))
4244
@@ -45,7 +47,22 @@ def id_contains_feature(app: Sphinx, need: NeedsInfoType, log: CheckLogger):
4547 # NOTE: This does not match the process requirements
4648 docname = dir_docname if dir_docname else need .get ("docname" , "" )
4749
48- if feature not in docname :
50+ # allow if any feature part is contained in UID
51+ foundfeatpart = any (
52+ featurepart .lower () in docname .lower ()
53+ for featurepart in featureparts
54+ if featureparts
55+ )
56+
57+ # allow abbreviation of the feature
58+ initials = "" .join (
59+ featurepart [0 ].lower () for featurepart in featureparts if len (featureparts ) > 1
60+ )
61+ foundinitials = initials in docname .lower ()
62+
63+ if not (foundfeatpart or foundinitials ):
4964 log .warning_for_option (
50- need , "id" , f"Feature '{ feature } ' not in path '{ docname } '."
65+ need ,
66+ "id" ,
67+ f"Featurepart '{ featureparts } ' not in path '{ docname } ' or abbreviation not ok, expected: '{ initials } '." ,
5168 )
0 commit comments