Rule: erb-strict-locals-comment-syntax
Ensures that strict locals comments use the exact locals: ( ... ) syntax so they are properly recognized by Rails and tooling. Also validates that only keyword arguments are used (no positional, block, or splat arguments).
Strict locals comments declare which locals are expected in a template. Misspellings or malformed syntax silently disable the declaration, leading to confusing runtime errors when required locals are missing.
Additionally, Rails only supports keyword arguments in strict locals declarations. Positional, block, and splat arguments will raise an ActionView::Error at render-time.
This rule catches invalid comment forms and argument types early during development.
Required keyword argument:
<%# locals: (user:) %>Keyword argument with default value:
<%# locals: (user:, admin: false) %>Complex default values:
<%# locals: (items: [], config: {}) %>No locals (empty):
<%# locals: () %>Double-splat for optional keyword arguments:
<%# locals: (message: "Hello", **attributes) %>Missing colon after locals:
<%# locals() %>Singular local instead of locals:
<%# local: (user:) %>Missing colon before parentheses:
<%# locals (user:) %>Missing parentheses around parameters:
<%# locals: user %>Empty locals: without parentheses:
<%# locals: %>Unbalanced parentheses:
<%# locals: (user: %>Ruby comment in execution tag:
<% # locals: (user:) %>Positional argument (use user: instead):
<%# locals: (user) %>Block argument:
<%# locals: (&block) %>Single splat argument:
<%# locals: (*args) %>Note: Double-splat (**attributes) IS supported for optional keyword arguments.
Trailing comma:
<%# locals: (user:,) %>Leading comma:
<%# locals: (, user:) %>Double comma:
<%# locals: (user:,, admin:) %>Only one locals: comment is allowed per partial:
<%# locals: (user:) %>
<p>Content</p>
<%# locals: (admin:) %>