Skip to main content

ytil_noxi/
quickfix.rs

1//! Utilities for managing and displaying Nvim quickfix lists.
2
3use core::fmt::Debug;
4
5use nvim_oxi::Array;
6use nvim_oxi::api::opts::CmdOpts;
7use nvim_oxi::api::types::CmdInfosBuilder;
8use rootcause::prelude::ResultExt;
9
10use crate::dict;
11
12/// Opens the quickfix window with the provided file and line number entries.
13///
14/// # Errors
15/// - `setqflist` or `copen` command fails.
16pub fn open<'a>(entries: impl IntoIterator<Item = (&'a str, i64)> + Debug) -> rootcause::Result<()> {
17    let mut qflist = vec![];
18    for (filename, lnum) in entries {
19        qflist.push(dict! {
20            "filename": filename.to_string(),
21            "lnum": lnum
22        });
23    }
24
25    if qflist.is_empty() {
26        return Ok(());
27    }
28
29    nvim_oxi::api::call_function::<_, i64>("setqflist", (Array::from_iter(qflist),))
30        .context("error executing setqflist function")?;
31    nvim_oxi::api::cmd(&CmdInfosBuilder::default().cmd("copen").build(), &CmdOpts::default())
32        .context("error executing copen cmd")?;
33
34    Ok(())
35}