From 45d14ab7b57abb6ef1d88705a190d0d528544d33 Mon Sep 17 00:00:00 2001 From: 27Onion Nebell Date: Mon, 20 Jul 2026 17:05:38 +0800 Subject: [PATCH] fix: parsing neovim api function parameters Fix neovim API parsing failure after https://github.com/neovim/neovim/commit/dc8934482e72cdc885da69f7318eabc21a4e8757. --- src/bridge/api_info.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/bridge/api_info.rs b/src/bridge/api_info.rs index 5d4a1192..d5d36e71 100644 --- a/src/bridge/api_info.rs +++ b/src/bridge/api_info.rs @@ -151,6 +151,7 @@ impl ApiParameterType { pub struct ApiParameter { pub name: String, pub parameter_type: ApiParameterType, + pub optional: Option, } #[allow(unused)] @@ -304,13 +305,22 @@ fn parse_parameter_type( fn parse_parameter(value: ValueRef) -> std::result::Result { let info: Vec = value.try_into()?; - if let Some((t, n)) = info.into_iter().collect_tuple() { + let mut info_iter = info.into_iter(); + + let name = info_iter.next(); + let parameter = info_iter.next(); + let optional = info_iter + .next() + .and_then(|value| if let ValueRef::Boolean(b) = value { Some(b) } else { None }); + + if let (Some(t), Some(n)) = (name, parameter) { let name: Utf8StringRef = n.try_into()?; let name = name.as_str(); let parameter_type = parse_parameter_type(t)?; Ok(ApiParameter { name: name.map_or(Err("name field is missing"), |v| Ok(v.to_owned()))?, parameter_type, + optional, }) } else { Err("Invalid parameter".into())