oxc-project/oxc · error
Invalid fix capabilities. Did you mean 'suggestion'?
Error message
Invalid fix capabilities. Did you mean 'suggestion'?
What it means
Diagnostic from oxlint's vue/return-in-emits-validator rule (crates/oxc_linter/src/rules/vue/return_in_emits_validator.rs), `.vue` files only. Validators declared in `emits: { foo(payload) {...} }` (Options API) or `defineEmits({ foo(...) {...} })` must return a boolean verdict. This variant fires when the validator's top-level body contains no return-with-value at all (returns inside nested functions don't count), making the validator effectively always-false.
Source
Thrown at crates/oxc_macros/src/declare_oxc_lint.rs:425
fn parse_fix(s: &str) -> proc_macro2::TokenStream {
const SEP: char = '_';
match s {
"none" => {
return quote! { RuleFixMeta::None };
}
"pending" => {
return quote! { RuleFixMeta::FixPending };
}
"fix" => return quote! { RuleFixMeta::Fixable(FixKind::SafeFix) },
"suggestion" => return quote! { RuleFixMeta::Fixable(FixKind::Suggestion) },
"conditional" => {
panic!("Invalid fix capabilities: missing a fix kind. Did you mean 'fix-conditional'?")
}
"None" => panic!("Invalid fix capabilities. Did you mean 'none'?"),
"Pending" => panic!("Invalid fix capabilities. Did you mean 'pending'?"),
"Fix" => panic!("Invalid fix capabilities. Did you mean 'fix'?"),
"Suggestion" => panic!("Invalid fix capabilities. Did you mean 'suggestion'?"),
invalid if !invalid.contains(SEP) => panic!(
"invalid fix capabilities: {invalid}. Valid capabilities are none, pending, fix, suggestion, or [fix|suggestion]_[conditional?]_[dangerous?]."
),
_ => {}
}
assert!(s.contains(SEP));
let mut is_conditional = false;
let fix_kinds = s
.split(SEP)
.filter(|seg| match *seg {
"conditional" => {
is_conditional = true;
false
}
// e.g. "safe_fix". safe is implied
"safe"View on GitHub (pinned to a3d33dda7c)
Solutions
- Return the check result: `foo(p) { return typeof p === 'string'; }`.
- For arrow validators use a concise body: `foo: (p) => typeof p === 'string'`.
- If no validation is needed, declare the event as a string: `emits: ['foo']`.
Example fix
// before
emits: { foo(payload) { validate(payload); } }
// after
emits: { foo(payload) { return validate(payload); } } Defensive patterns
Strategy: validation
Validate before calling
// every emits validator must return a value
function checkEmits(defs) {
for (const [name, v] of Object.entries(defs)) {
if (typeof v !== 'function') continue;
const src = v.toString();
if (!/\breturn\s+[^;\n]/.test(src)) {
throw new Error(`validator '${name}' never returns a value`);
}
}
} Prevention
- Model validators as pure boolean predicates that always return.
- Unit-test each validator with a valid and an invalid payload.
- Use string-form emits when no validation is needed.
When it happens
Trigger: `emits: { foo() { doCheck(); } }` or `emits: { foo() { return; } }` — the function/arrow body has zero value-carrying top-level returns. Also validators whose only returns live inside nested function or arrow callbacks (nested_depth > 0 is skipped).
Common situations: Validators written as throwing assertions instead of predicates; refactors that empty the body; pasting event handlers into the emits option.
Related errors
- invalid fix capabilities: {invalid}. Valid capabilities are
- Cannot create a `NonEmptyStack` from an empty iterator
- Invalid fix capabilities. Did you mean 'fix'?
- Change to `throw new TypeError(...)`
- Could not find the reuseWorker option in ${path}
AI-assisted analysis of oxc-project/oxc@a3d33dda7c (2026-08-20).
Data as JSON: /api/errors/c09c172ff22ec25e.
Report an issue: GitHub.