77from pathlib import Path
88from typing import TYPE_CHECKING , Any
99
10+ from packaging .version import InvalidVersion , Version
11+
1012from ansiblelint .constants import RULE_DOC_URL
1113
1214if TYPE_CHECKING :
@@ -41,7 +43,7 @@ class BaseRule:
4143 id : str = ""
4244 tags : list [str ] = []
4345 description : str = ""
44- version_added : str = ""
46+ version_changed : str = ""
4547 severity : str = ""
4648 link : str = ""
4749 has_dynamic_tags : bool = False
@@ -59,6 +61,13 @@ class BaseRule:
5961 # Allow rules to provide a custom short description instead of using __doc__
6062 _shortdesc : str = ""
6163
64+ def __init__ (self ) -> None :
65+ try :
66+ Version (self .version_changed )
67+ except InvalidVersion :
68+ msg = f"Rule { self .__class__ .__name__ } has an invalid version_changed field '{ self .version_changed } ', is should be a 'X.Y.Z' format value."
69+ _logger .warning (msg )
70+
6271 @property
6372 def help (self ) -> str :
6473 """Return a help markdown string for the rule."""
@@ -195,7 +204,7 @@ class RuntimeErrorRule(BaseRule):
195204 _shortdesc = "Unexpected internal error"
196205 severity = "VERY_HIGH"
197206 tags = ["core" ]
198- version_added = "v5 .0.0"
207+ version_changed = "5 .0.0"
199208 _order = 0
200209 unloadable = True
201210
@@ -207,7 +216,7 @@ class AnsibleParserErrorRule(BaseRule):
207216 description = "Ansible parser fails; this usually indicates an invalid file."
208217 severity = "VERY_HIGH"
209218 tags = ["core" ]
210- version_added = "v5 .0.0"
219+ version_changed = "5 .0.0"
211220 _order = 0
212221 unloadable = True
213222
@@ -219,7 +228,7 @@ class LoadingFailureRule(BaseRule):
219228 description = "Linter failed to process a file, possible invalid file."
220229 severity = "VERY_HIGH"
221230 tags = ["core" , "unskippable" ]
222- version_added = "v4 .3.0"
231+ version_changed = "4 .3.0"
223232 _help = LOAD_FAILURE_MD
224233 _order = 0
225234 _ids = {
@@ -235,6 +244,6 @@ class WarningRule(BaseRule):
235244 severity = "LOW"
236245 # should remain experimental as that would keep it warning only
237246 tags = ["core" , "experimental" ]
238- version_added = "v6 .8.0"
247+ version_changed = "6 .8.0"
239248 _order = 0
240249 unloadable = True
0 commit comments