From 6313c15c643a2b4831845e0ea2511032f94adef4 Mon Sep 17 00:00:00 2001 From: Ashwin Naren Date: Sat, 5 Apr 2025 17:01:50 -0700 Subject: [PATCH 1/3] add _suggestions module --- stdlib/src/lib.rs | 2 ++ stdlib/src/suggestions.rs | 23 +++++++++++++++++++++++ vm/src/suggestion.rs | 2 +- 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 stdlib/src/suggestions.rs diff --git a/stdlib/src/lib.rs b/stdlib/src/lib.rs index 9ee8e3e81d..e9d10dfde4 100644 --- a/stdlib/src/lib.rs +++ b/stdlib/src/lib.rs @@ -33,6 +33,7 @@ mod pyexpat; mod pystruct; mod random; mod statistics; +mod suggestions; // TODO: maybe make this an extension module, if we ever get those // mod re; #[cfg(feature = "bz2")] @@ -133,6 +134,7 @@ pub fn get_module_inits() -> impl Iterator, StdlibInit "unicodedata" => unicodedata::make_module, "zlib" => zlib::make_module, "_statistics" => statistics::make_module, + "suggestions" => suggestions::make_module, // crate::vm::sysmodule::sysconfigdata_name() => sysconfigdata::make_module, } #[cfg(any(unix, target_os = "wasi"))] diff --git a/stdlib/src/suggestions.rs b/stdlib/src/suggestions.rs new file mode 100644 index 0000000000..4fcfa9aa68 --- /dev/null +++ b/stdlib/src/suggestions.rs @@ -0,0 +1,23 @@ +pub(crate) use _suggestions::make_module; + +#[pymodule] +mod _suggestions { + use rustpython_vm::VirtualMachine; + + use crate::vm::PyObjectRef; + + #[pyfunction] + fn _generate_suggestions( + canidates: Vec, + name: PyObjectRef, + vm: &VirtualMachine, + ) -> PyObjectRef { + match crate::vm::suggestion::calculate_suggestions( + canidates.iter(), + &name + ) { + Some(suggestion) => suggestion.into(), + None => vm.ctx.none(), + } + } +} diff --git a/vm/src/suggestion.rs b/vm/src/suggestion.rs index 01f53d70ca..3d075ee3bb 100644 --- a/vm/src/suggestion.rs +++ b/vm/src/suggestion.rs @@ -12,7 +12,7 @@ use std::iter::ExactSizeIterator; const MAX_CANDIDATE_ITEMS: usize = 750; -fn calculate_suggestions<'a>( +pub fn calculate_suggestions<'a>( dir_iter: impl ExactSizeIterator, name: &PyObjectRef, ) -> Option { From 2d39c491542df7da95a78419cabedacd3f9d02a7 Mon Sep 17 00:00:00 2001 From: Ashwin Naren Date: Sat, 5 Apr 2025 17:24:22 -0700 Subject: [PATCH 2/3] formatting --- stdlib/src/suggestions.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/stdlib/src/suggestions.rs b/stdlib/src/suggestions.rs index 4fcfa9aa68..7652e713f3 100644 --- a/stdlib/src/suggestions.rs +++ b/stdlib/src/suggestions.rs @@ -12,10 +12,7 @@ mod _suggestions { name: PyObjectRef, vm: &VirtualMachine, ) -> PyObjectRef { - match crate::vm::suggestion::calculate_suggestions( - canidates.iter(), - &name - ) { + match crate::vm::suggestion::calculate_suggestions(canidates.iter(), &name) { Some(suggestion) => suggestion.into(), None => vm.ctx.none(), } From f9ddfdee6b2b5b0a1f3aff6a9c91f43d00f67a59 Mon Sep 17 00:00:00 2001 From: Ashwin Naren Date: Sat, 5 Apr 2025 19:54:02 -0700 Subject: [PATCH 3/3] fix typo --- stdlib/src/suggestions.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/src/suggestions.rs b/stdlib/src/suggestions.rs index 7652e713f3..e49e9dd4a4 100644 --- a/stdlib/src/suggestions.rs +++ b/stdlib/src/suggestions.rs @@ -8,11 +8,11 @@ mod _suggestions { #[pyfunction] fn _generate_suggestions( - canidates: Vec, + candidates: Vec, name: PyObjectRef, vm: &VirtualMachine, ) -> PyObjectRef { - match crate::vm::suggestion::calculate_suggestions(canidates.iter(), &name) { + match crate::vm::suggestion::calculate_suggestions(candidates.iter(), &name) { Some(suggestion) => suggestion.into(), None => vm.ctx.none(), }