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

  1. Replace splat/hash-splat parameters with explicit named keyword parameters with defaults
  2. Collect the extra inputs as a single Windmill object parameter (e.g. `opts:`) and access keys inside the body
  3. 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

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


AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03). Data as JSON: /api/errors/83b40be1dd1d1e18. Report an issue: GitHub.