11from xrlint .plugin import Plugin
2+ from xrlint .rule import RuleConfig
23
34# for icons, see
45# https://squidfunk.github.io/mkdocs-material/reference/icons-emojis/
@@ -39,7 +40,7 @@ def write_rule_ref_page():
3940
4041
4142def write_plugin_rules (stream , plugin : Plugin ):
42- configs = plugin . configs
43+ config_rules = get_plugin_rule_configs ( plugin )
4344 for rule_id in sorted (plugin .rules .keys ()):
4445 rule_meta = plugin .rules [rule_id ].meta
4546 stream .write (
@@ -51,9 +52,8 @@ def write_plugin_rules(stream, plugin: Plugin):
5152 stream .write ("\n \n " )
5253 # List the predefined configurations that contain the rule
5354 stream .write ("Contained in: " )
54- for config_id in sorted (configs .keys ()):
55- config = configs [config_id ]
56- rule_configs = config .rules or {}
55+ for config_id in sorted (config_rules .keys ()):
56+ rule_configs = config_rules [config_id ]
5757 rule_config = rule_configs .get (rule_id ) or rule_configs .get (
5858 f"{ plugin .meta .name } /{ rule_id } "
5959 )
@@ -62,5 +62,21 @@ def write_plugin_rules(stream, plugin: Plugin):
6262 stream .write ("\n \n " )
6363
6464
65+ def get_plugin_rule_configs (plugin ):
66+ configs = plugin .configs
67+ config_rules : dict [str , dict [str , RuleConfig ]] = {}
68+ for config_name , config_list in configs .items ():
69+ # note, here we assume most plugins configure their rules
70+ # in one dedicated config object only. However, this is not
71+ # the general case as file patterns may be used to make the
72+ # rules configurations specific.
73+ rule_configs = {}
74+ for config in config_list :
75+ if config .rules :
76+ rule_configs .update (config .rules )
77+ config_rules [config_name ] = rule_configs
78+ return config_rules
79+
80+
6581if __name__ == "__main__" :
6682 write_rule_ref_page ()
0 commit comments