windmill-labs/windmill · error
- {} {}s are not supported
Error message
- {}
{}s are not supported What it means
windmill-parser-ruby rejects keyword, splat, and hash-splat parameters (`key:`, `*args`, `**opts`) in the `main` signature because Windmill passes inputs as explicitly named arguments and cannot map splat-style parameters. The error names the offending parameter and the unsupported kind.
Source
Thrown at backend/parsers/windmill-parser-ruby/src/lib.rs:173
..Default::default()
});
}
_ => {
let Range { start_byte, end_byte, .. } = a.range();
bail!(
"Cannot parse optional parameter: {}",
&code.get(start_byte..end_byte).unwrap_or("CANNOT DISPLAY")
)
}
}
}
let kind = a.kind();
if matches!(
kind,
"keyword_parameter" | "splat_parameter" | "hash_splat_parameter"
) {
let Range { start_byte, end_byte, .. } = a.range();
bail!(
" - {}\n{}s are not supported",
&code.get(start_byte..end_byte).unwrap_or("CANNOT DISPLAY"),
kind.replace("_", " ")
);
}
}
}
}
return Ok(Some(args));
}
}
Ok(None)
}
#[cfg(test)]
mod test {
use serde_json::json;View on GitHub (pinned to e474e8803c)
Solutions
- Replace splat/hash-splat parameters with explicit named keyword parameters with defaults
- Collect the extra inputs as a single Windmill object parameter (e.g. `opts:`) and access keys inside the body
- Remove the variadic parameter and pass each value explicitly
Example fix
// before
def main(**opts)
// after
def main(opts: {}) # opts typed as object in Windmill Defensive patterns
Strategy: try-catch
Validate before calling
# reject splats/keywords before deploying def main(**opts); end # <- never use *args / **opts in main
Try / catch
match parse_ruby_sig_meta(code) {
Err(e) if e.to_string().contains("s are not supported") =>
eprintln!("replace splat/keyword params with named args: {e}"),
Err(e) => return Err(e),
Ok(meta) => { /* proceed */ }
} Prevention
- Never use *args, **opts, or bare keyword nodes in `def main`
- Model extra inputs as a single object parameter
- Validate signatures in CI with the parser
When it happens
Trigger: `def main(*args)`, `def main(**opts)`, or a bare keyword parameter node appearing in the main signature while parsing the Ruby script's signature metadata.
Common situations: Ruby developers writing idiomatic variadic signatures; Windmill requires an explicit, typed parameter list for each input.
Related errors
- Cannot parse optional parameter: {}
- Aborted from C
- Nesting is not supported
- Failed to parse code
- Invalid gemfile do block
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/83b40be1dd1d1e18.
Report an issue: GitHub.