1212use PhpParser \Node \Stmt ;
1313use PhpParser \NodeVisitorAbstract ;
1414use PhpStaticAnalysis \Attributes \Deprecated ;
15+ use PhpStaticAnalysis \Attributes \Immutable ;
1516use PhpStaticAnalysis \Attributes \Impure ;
1617use PhpStaticAnalysis \Attributes \Internal ;
1718use PhpStaticAnalysis \Attributes \IsReadOnly ;
@@ -65,6 +66,7 @@ class AttributeNodeVisitor extends NodeVisitorAbstract
6566 private const ALLOWED_ATTRIBUTES_PER_NODE_TYPE = [
6667 Stmt \Class_::class => [
6768 Deprecated::class,
69+ Immutable::class,
6870 Internal::class,
6971 Method::class,
7072 Mixin::class,
@@ -110,6 +112,7 @@ class AttributeNodeVisitor extends NodeVisitorAbstract
110112 ],
111113 Stmt \Interface_::class => [
112114 Deprecated::class,
115+ Immutable::class,
113116 Internal::class,
114117 Method::class,
115118 Mixin::class,
@@ -129,6 +132,7 @@ class AttributeNodeVisitor extends NodeVisitorAbstract
129132 ],
130133 Stmt \Trait_::class => [
131134 Deprecated::class,
135+ Immutable::class,
132136 Internal::class,
133137 Method::class,
134138 Mixin::class,
@@ -145,6 +149,7 @@ class AttributeNodeVisitor extends NodeVisitorAbstract
145149
146150 private const SHORT_NAME_TO_FQN = [
147151 'Deprecated ' => Deprecated::class,
152+ 'Immutable ' => Immutable::class,
148153 'Impure ' => Impure::class,
149154 'Internal ' => Internal::class,
150155 'IsReadOnly ' => IsReadOnly::class,
@@ -174,6 +179,9 @@ class AttributeNodeVisitor extends NodeVisitorAbstract
174179 Deprecated::class => [
175180 'all ' => 'deprecated ' ,
176181 ],
182+ Immutable::class => [
183+ 'all ' => 'immutable ' ,
184+ ],
177185 Impure::class => [
178186 'all ' => 'impure ' ,
179187 ],
@@ -253,6 +261,9 @@ class AttributeNodeVisitor extends NodeVisitorAbstract
253261 Deprecated::class => [
254262 'all ' => self ::ARGS_NONE ,
255263 ],
264+ Immutable::class => [
265+ 'all ' => self ::ARGS_NONE_WITH_PREFIX ,
266+ ],
256267 Impure::class => [
257268 'all ' => self ::ARGS_NONE_WITH_PREFIX ,
258269 ],
0 commit comments