fix(api): make KeymapInfos::buffer an Option<Buffer> (#255)

This commit is contained in:
Riccardo Mazzarini 2025-06-08 11:41:09 +02:00 committed by GitHub
parent 92031aa2b4
commit 30242cd166
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 34 additions and 4 deletions

View file

@ -9,6 +9,9 @@
- `nvim_oxi::api::get_mode()` is now infallible and always returns a `GotMode`
([#247](https://github.com/noib3/nvim-oxi/pull/247));
- `nvim_oxi::api::KeymapInfos::buffer` is now an `Option<Buffer>` instead of
a `bool` ([#255](https://github.com/noib3/nvim-oxi/pull/255));
### Fixed
- fixed the definition of `DecorationProviderOpts`, which was causing

View file

@ -27,6 +27,7 @@ use crate::{Error, IntoResult, Result};
/// A wrapper around a Neovim buffer handle.
#[derive(Clone, Eq, PartialEq, Hash, Serialize, Deserialize)]
#[serde(transparent)]
pub struct Buffer(pub(crate) BufHandle);
impl fmt::Debug for Buffer {

View file

@ -7,14 +7,16 @@ use types::{
};
use super::Mode;
use crate::serde_utils as utils;
use crate::{Buffer, serde_utils as utils};
#[non_exhaustive]
#[derive(Debug, Clone, Eq, PartialEq, Hash, Deserialize)]
pub struct KeymapInfos {
/// Whether the mapping is local to a specific buffer.
#[serde(deserialize_with = "utils::bool_from_int")]
pub buffer: bool,
/// When the [`KeymapInfos`] are returned from [`Buffer::get_keymap()`],
/// this will contain the [`Buffer`] it was called on. `None` when returned
/// from [`get_keymap()`](crate::get_keymap).
#[serde(deserialize_with = "utils::zero_is_none")]
pub buffer: Option<Buffer>,
/// Optional callback triggered by the keymap.
pub callback: Option<Function<(), ()>>,

View file

@ -158,11 +158,33 @@ fn buf_set_get_del_keymap() {
let keymaps = buf.get_keymap(Mode::Insert).unwrap().collect::<Vec<_>>();
assert_eq!(1, keymaps.len());
assert!(keymaps.iter().all(|keymap| keymap.buffer == Some(buf.clone())));
let res = buf.del_keymap(Mode::Insert, "a");
assert_eq!(Ok(()), res);
}
/// Regression test for https://github.com/noib3/nvim-oxi/issues/226
#[nvim_oxi::test]
fn buf_set_get_keymap_with_bufnr_more_than_one() {
let mut buf = api::create_buf(true, false).unwrap();
assert!(buf.handle() > 1);
let opts = SetKeymapOpts::builder()
.callback(|_| ())
.desc("does nothing")
.expr(true)
.build();
let res = buf.set_keymap(Mode::Insert, "a", "", &opts);
assert_eq!(Ok(()), res);
let keymaps = buf.get_keymap(Mode::Insert).unwrap().collect::<Vec<_>>();
assert_eq!(1, keymaps.len());
assert!(keymaps.iter().all(|keymap| keymap.buffer == Some(buf.clone())));
}
#[nvim_oxi::test]
fn buf_set_get_del_nvo_keymap() {
let mut buf = Buffer::current();
@ -180,6 +202,7 @@ fn buf_set_get_del_nvo_keymap() {
.unwrap()
.collect::<Vec<_>>();
assert_le!(1, keymaps.len());
assert!(keymaps.iter().all(|keymap| keymap.buffer == Some(buf.clone())));
let res = buf.del_keymap(Mode::NormalVisualOperator, "a");
assert_eq!(Ok(()), res);

View file

@ -254,6 +254,7 @@ fn set_get_del_keymap() {
let keymaps = api::get_keymap(Mode::Insert).collect::<Vec<_>>();
assert_le!(1, keymaps.len());
assert!(keymaps.iter().all(|keymap| keymap.buffer.is_none()));
let res = api::del_keymap(Mode::Insert, "a");
assert_eq!(Ok(()), res);