diff --git a/pgml-dashboard/build.rs b/pgml-dashboard/build.rs index b96470c58..236a78d8b 100644 --- a/pgml-dashboard/build.rs +++ b/pgml-dashboard/build.rs @@ -5,7 +5,7 @@ fn main() { println!("cargo:rerun-if-changed=migrations"); let output = Command::new("git") - .args(&["rev-parse", "HEAD"]) + .args(["rev-parse", "HEAD"]) .output() .unwrap(); let git_hash = String::from_utf8(output.stdout).unwrap(); diff --git a/pgml-dashboard/src/api/chatbot.rs b/pgml-dashboard/src/api/chatbot.rs index 36294346e..c4b12d0c2 100644 --- a/pgml-dashboard/src/api/chatbot.rs +++ b/pgml-dashboard/src/api/chatbot.rs @@ -298,10 +298,10 @@ pub async fn wrapped_chatbot_get_answer( history.reverse(); let history = history.join("\n"); - let mut pipeline = Pipeline::new("v1", None, None, None); + let pipeline = Pipeline::new("v1", None, None, None); let context = collection .query() - .vector_recall(&data.question, &mut pipeline, Some(json!({ + .vector_recall(&data.question, &pipeline, Some(json!({ "instruction": "Represent the Wikipedia question for retrieving supporting documents: " }).into())) .limit(5) @@ -312,9 +312,8 @@ pub async fn wrapped_chatbot_get_answer( .collect::>() .join("\n"); - let answer = match brain { - _ => get_openai_chatgpt_answer(knowledge_base, &history, &context, &data.question).await, - }?; + let answer = + get_openai_chatgpt_answer(knowledge_base, &history, &context, &data.question).await?; let new_history_messages: Vec = vec![ serde_json::to_value(user_document).unwrap().into(), diff --git a/pgml-dashboard/src/api/cms.rs b/pgml-dashboard/src/api/cms.rs index 6cc774ebe..87dfd45f7 100644 --- a/pgml-dashboard/src/api/cms.rs +++ b/pgml-dashboard/src/api/cms.rs @@ -88,20 +88,20 @@ impl Collection { fn build_index(&mut self, hide_root: bool) { let summary_path = self.root_dir.join("SUMMARY.md"); let summary_contents = std::fs::read_to_string(&summary_path) - .expect(format!("Could not read summary: {summary_path:?}").as_str()); + .unwrap_or_else(|_| panic!("Could not read summary: {summary_path:?}")); let mdast = markdown::to_mdast(&summary_contents, &::markdown::ParseOptions::default()) - .expect(format!("Could not parse summary: {summary_path:?}").as_str()); + .unwrap_or_else(|_| panic!("Could not parse summary: {summary_path:?}")); for node in mdast .children() - .expect(format!("Summary has no content: {summary_path:?}").as_str()) + .unwrap_or_else(|| panic!("Summary has no content: {summary_path:?}")) .iter() { match node { Node::List(list) => { - self.index = self.get_sub_links(&list).expect( - format!("Could not parse list of index links: {summary_path:?}").as_str(), - ); + self.index = self.get_sub_links(list).unwrap_or_else(|_| { + panic!("Could not parse list of index links: {summary_path:?}") + }); break; } _ => { @@ -221,13 +221,13 @@ impl Collection { let root = parse_document(&arena, &contents, &crate::utils::markdown::options()); // Title of the document is the first (and typically only)

- let title = crate::utils::markdown::get_title(&root).unwrap(); - let toc_links = crate::utils::markdown::get_toc(&root).unwrap(); - let image = crate::utils::markdown::get_image(&root); - crate::utils::markdown::wrap_tables(&root, &arena).unwrap(); + let title = crate::utils::markdown::get_title(root).unwrap(); + let toc_links = crate::utils::markdown::get_toc(root).unwrap(); + let image = crate::utils::markdown::get_image(root); + crate::utils::markdown::wrap_tables(root, &arena).unwrap(); // MkDocs syntax support, e.g. tabs, notes, alerts, etc. - crate::utils::markdown::mkdocs(&root, &arena).unwrap(); + crate::utils::markdown::mkdocs(root, &arena).unwrap(); // Style headings like we like them let mut plugins = ComrakPlugins::default(); @@ -255,7 +255,7 @@ impl Collection { .iter_mut() .map(|nav_link| { let mut nav_link = nav_link.clone(); - nav_link.should_open(&path); + nav_link.should_open(path); nav_link }) .collect(); @@ -273,11 +273,11 @@ impl Collection { let image_path = collection.url_root.join(".gitbook/assets").join(parts[1]); layout.image(config::asset_url(image_path.to_string_lossy()).as_ref()); } - if description.is_some() { - layout.description(&description.unwrap()); + if let Some(description) = &description { + layout.description(description); } - if user.is_some() { - layout.user(&user.unwrap()); + if let Some(user) = &user { + layout.user(user); } let layout = layout @@ -375,7 +375,7 @@ SELECT * FROM test; "#; let arena = Arena::new(); - let root = parse_document(&arena, &code, &options()); + let root = parse_document(&arena, code, &options()); // Style headings like we like them let mut plugins = ComrakPlugins::default(); @@ -404,11 +404,11 @@ This is the end of the markdown "#; let arena = Arena::new(); - let root = parse_document(&arena, &markdown, &options()); + let root = parse_document(&arena, markdown, &options()); let plugins = ComrakPlugins::default(); - crate::utils::markdown::wrap_tables(&root, &arena).unwrap(); + crate::utils::markdown::wrap_tables(root, &arena).unwrap(); let mut html = vec![]; format_html_with_plugins(root, &options(), &mut html, &plugins).unwrap(); @@ -436,11 +436,11 @@ This is the end of the markdown "#; let arena = Arena::new(); - let root = parse_document(&arena, &markdown, &options()); + let root = parse_document(&arena, markdown, &options()); let plugins = ComrakPlugins::default(); - crate::utils::markdown::wrap_tables(&root, &arena).unwrap(); + crate::utils::markdown::wrap_tables(root, &arena).unwrap(); let mut html = vec![]; format_html_with_plugins(root, &options(), &mut html, &plugins).unwrap(); diff --git a/pgml-dashboard/src/components/chatbot/mod.rs b/pgml-dashboard/src/components/chatbot/mod.rs index b237426bf..8bcf23fc4 100644 --- a/pgml-dashboard/src/components/chatbot/mod.rs +++ b/pgml-dashboard/src/components/chatbot/mod.rs @@ -41,7 +41,7 @@ const EXAMPLE_QUESTIONS: ExampleQuestions = [ ), ]; -const KNOWLEDGE_BASES: [&'static str; 0] = [ +const KNOWLEDGE_BASES: [&str; 0] = [ // "Knowledge Base 1", // "Knowledge Base 2", // "Knowledge Base 3", @@ -117,8 +117,8 @@ pub struct Chatbot { knowledge_bases_with_logo: &'static [KnowledgeBaseWithLogo; 4], } -impl Chatbot { - pub fn new() -> Chatbot { +impl Default for Chatbot { + fn default() -> Self { Chatbot { brains: &CHATBOT_BRAINS, example_questions: &EXAMPLE_QUESTIONS, @@ -128,4 +128,10 @@ impl Chatbot { } } +impl Chatbot { + pub fn new() -> Self { + Self::default() + } +} + component!(Chatbot); diff --git a/pgml-dashboard/src/components/inputs/range_group/mod.rs b/pgml-dashboard/src/components/inputs/range_group/mod.rs index a42493bc6..c7eb09db3 100644 --- a/pgml-dashboard/src/components/inputs/range_group/mod.rs +++ b/pgml-dashboard/src/components/inputs/range_group/mod.rs @@ -25,7 +25,7 @@ impl RangeGroup { pub fn new(title: &str) -> RangeGroup { RangeGroup { title: title.to_owned(), - identifier: title.replace(" ", "_").to_lowercase(), + identifier: title.replace(' ', "_").to_lowercase(), min: 0, max: 100, step: 1.0, @@ -42,7 +42,7 @@ impl RangeGroup { } pub fn identifier(mut self, identifier: &str) -> Self { - self.identifier = identifier.replace(" ", "_").to_owned(); + self.identifier = identifier.replace(' ', "_").to_owned(); self } diff --git a/pgml-dashboard/src/components/inputs/switch/mod.rs b/pgml-dashboard/src/components/inputs/switch/mod.rs index 7db04ae71..20d788baa 100644 --- a/pgml-dashboard/src/components/inputs/switch/mod.rs +++ b/pgml-dashboard/src/components/inputs/switch/mod.rs @@ -30,8 +30,8 @@ pub struct Switch { target: StimulusTarget, } -impl Switch { - pub fn new() -> Switch { +impl Default for Switch { + fn default() -> Self { Switch { left_value: String::from("left"), left_icon: String::from(""), @@ -42,6 +42,12 @@ impl Switch { target: StimulusTarget::new(), } } +} + +impl Switch { + pub fn new() -> Self { + Self::default() + } pub fn left(mut self, value: &str, icon: &str) -> Switch { self.left_value = value.into(); diff --git a/pgml-dashboard/src/components/inputs/text/editable_header/mod.rs b/pgml-dashboard/src/components/inputs/text/editable_header/mod.rs index 7999f334d..7af0051dd 100644 --- a/pgml-dashboard/src/components/inputs/text/editable_header/mod.rs +++ b/pgml-dashboard/src/components/inputs/text/editable_header/mod.rs @@ -35,9 +35,9 @@ pub struct EditableHeader { id: String, } -impl EditableHeader { - pub fn new() -> EditableHeader { - EditableHeader { +impl Default for EditableHeader { + fn default() -> Self { + Self { value: String::from("Title Goes Here"), header_type: Headers::H3, input_target: StimulusTarget::new(), @@ -45,6 +45,12 @@ impl EditableHeader { id: String::from(""), } } +} + +impl EditableHeader { + pub fn new() -> Self { + Self::default() + } pub fn header_type(mut self, header_type: Headers) -> Self { self.header_type = header_type; diff --git a/pgml-dashboard/src/components/navigation/tabs/mod.rs b/pgml-dashboard/src/components/navigation/tabs/mod.rs index 122d9b659..bdb089507 100644 --- a/pgml-dashboard/src/components/navigation/tabs/mod.rs +++ b/pgml-dashboard/src/components/navigation/tabs/mod.rs @@ -6,5 +6,6 @@ pub mod tab; pub use tab::Tab; // src/components/navigation/tabs/tabs +#[allow(clippy::module_inception)] pub mod tabs; pub use tabs::Tabs; diff --git a/pgml-dashboard/src/components/navigation/tabs/tab/mod.rs b/pgml-dashboard/src/components/navigation/tabs/tab/mod.rs index e8c5addb2..10459124c 100644 --- a/pgml-dashboard/src/components/navigation/tabs/tab/mod.rs +++ b/pgml-dashboard/src/components/navigation/tabs/tab/mod.rs @@ -37,7 +37,7 @@ impl Tab { } pub fn id(&self) -> String { - format!("tab-{}", self.name.to_lowercase().replace(" ", "-")) + format!("tab-{}", self.name.to_lowercase().replace(' ', "-")) } pub fn selected(&self) -> String { diff --git a/pgml-dashboard/src/components/profile_icon/mod.rs b/pgml-dashboard/src/components/profile_icon/mod.rs index fedfdec19..6049512c0 100644 --- a/pgml-dashboard/src/components/profile_icon/mod.rs +++ b/pgml-dashboard/src/components/profile_icon/mod.rs @@ -7,7 +7,7 @@ pub struct ProfileIcon; impl ProfileIcon { pub fn new() -> ProfileIcon { - ProfileIcon::default() + ProfileIcon } } diff --git a/pgml-dashboard/src/components/star/mod.rs b/pgml-dashboard/src/components/star/mod.rs index 9494cf1ab..3689d028f 100644 --- a/pgml-dashboard/src/components/star/mod.rs +++ b/pgml-dashboard/src/components/star/mod.rs @@ -12,7 +12,7 @@ pub struct Star { svg: &'static str, } -const SVGS: Lazy> = Lazy::new(|| { +static SVGS: Lazy> = Lazy::new(|| { let mut map = HashMap::new(); map.insert( "green", diff --git a/pgml-dashboard/src/components/stimulus/stimulus_action/mod.rs b/pgml-dashboard/src/components/stimulus/stimulus_action/mod.rs index f8b93407f..82dbd09eb 100644 --- a/pgml-dashboard/src/components/stimulus/stimulus_action/mod.rs +++ b/pgml-dashboard/src/components/stimulus/stimulus_action/mod.rs @@ -38,7 +38,7 @@ impl FromStr for StimulusEvents { } } -#[derive(Debug, Clone)] +#[derive(Debug, Default, Clone)] pub struct StimulusAction { pub controller: String, pub method: String, @@ -47,11 +47,7 @@ pub struct StimulusAction { impl StimulusAction { pub fn new() -> Self { - Self { - controller: String::new(), - method: String::new(), - action: None, - } + Self::default() } pub fn controller(mut self, controller: &str) -> Self { @@ -81,8 +77,8 @@ impl fmt::Display for StimulusAction { impl Render for StimulusAction { fn render(&self, b: &mut Buffer) -> Result<(), sailfish::RenderError> { - if self.controller.len() == 0 || self.method.len() == 0 { - return format!("").render(b); + if self.controller.is_empty() || self.method.is_empty() { + return String::new().render(b); } match &self.action { Some(action) => format!("{}->{}#{}", action, self.controller, self.method).render(b), @@ -95,12 +91,12 @@ impl FromStr for StimulusAction { type Err = (); fn from_str(input: &str) -> Result { - let cleaned = input.replace(" ", ""); + let cleaned = input.replace(' ', ""); let mut out: Vec<&str> = cleaned.split("->").collect(); match out.len() { 1 => { - let mut command: Vec<&str> = out.pop().unwrap().split("#").collect(); + let mut command: Vec<&str> = out.pop().unwrap().split('#').collect(); match command.len() { 2 => Ok(StimulusAction::new() .method(command.pop().unwrap()) @@ -110,7 +106,7 @@ impl FromStr for StimulusAction { } } 2 => { - let mut command: Vec<&str> = out.pop().unwrap().split("#").collect(); + let mut command: Vec<&str> = out.pop().unwrap().split('#').collect(); match command.len() { 2 => Ok(StimulusAction::new() .action(StimulusEvents::from_str(out.pop().unwrap()).unwrap()) diff --git a/pgml-dashboard/src/components/stimulus/stimulus_target/mod.rs b/pgml-dashboard/src/components/stimulus/stimulus_target/mod.rs index d012eb76d..7b751aee3 100644 --- a/pgml-dashboard/src/components/stimulus/stimulus_target/mod.rs +++ b/pgml-dashboard/src/components/stimulus/stimulus_target/mod.rs @@ -30,7 +30,7 @@ impl Render for StimulusTarget { (Some(controller), Some(name)) => { format!("data-{}-target=\"{}\"", controller, name).render(b) } - _ => format!("").render(b), + _ => String::new().render(b), } } } diff --git a/pgml-dashboard/src/fairings.rs b/pgml-dashboard/src/fairings.rs index cd95bf2d5..6107809db 100644 --- a/pgml-dashboard/src/fairings.rs +++ b/pgml-dashboard/src/fairings.rs @@ -9,11 +9,12 @@ use crate::utils::datadog::timing; /// Times requests and responses for reporting via datadog struct RequestMonitorStart(std::time::Instant); -pub struct RequestMonitor {} +#[derive(Default)] +pub struct RequestMonitor; impl RequestMonitor { pub fn new() -> RequestMonitor { - RequestMonitor {} + Self } } @@ -61,6 +62,6 @@ impl Fairing for RequestMonitor { ("path".to_string(), path.to_string()), ]); let metric = "http.request"; - timing(&metric, elapsed, Some(&tags)).await; + timing(metric, elapsed, Some(&tags)).await; } } diff --git a/pgml-dashboard/src/lib.rs b/pgml-dashboard/src/lib.rs index 7acb46f0d..0761cc5c4 100644 --- a/pgml-dashboard/src/lib.rs +++ b/pgml-dashboard/src/lib.rs @@ -80,7 +80,7 @@ pub async fn notebook_index( ) -> Result { Ok(ResponseOk( templates::Notebooks { - notebooks: models::Notebook::all(&cluster.pool()).await?, + notebooks: models::Notebook::all(cluster.pool()).await?, new: new.is_some(), } .render_once() @@ -148,7 +148,7 @@ pub async fn cell_create( .await?; if !cell.contents.is_empty() { - let _ = cell.render(cluster.pool()).await?; + cell.render(cluster.pool()).await?; } Ok(Redirect::to(format!( @@ -230,7 +230,7 @@ pub async fn cell_edit( cell.update( cluster.pool(), data.cell_type.parse::()?, - &data.contents, + data.contents, ) .await?; diff --git a/pgml-dashboard/src/main.rs b/pgml-dashboard/src/main.rs index df7efeed4..0988aaa78 100644 --- a/pgml-dashboard/src/main.rs +++ b/pgml-dashboard/src/main.rs @@ -19,9 +19,7 @@ async fn index() -> Redirect { pub async fn error() -> Result<(), BadRequest> { info!("This is additional information for the test"); error!("This is a test"); - let error: Option = None; - error.unwrap(); - Ok(()) + panic!(); } #[catch(403)] @@ -102,14 +100,14 @@ async fn main() { markdown::SearchIndex::build().await.unwrap(); - pgml_dashboard::migrate(&guards::Cluster::default(None).pool()) + pgml_dashboard::migrate(guards::Cluster::default(None).pool()) .await .unwrap(); let _ = rocket::build() .manage(markdown::SearchIndex::open().unwrap()) .mount("/", rocket::routes![index, error]) - .mount("/dashboard/static", FileServer::from(&config::static_dir())) + .mount("/dashboard/static", FileServer::from(config::static_dir())) .mount("/dashboard", pgml_dashboard::routes()) .mount("/", pgml_dashboard::api::routes()) .mount("/", rocket::routes![pgml_dashboard::playground]) @@ -147,7 +145,7 @@ mod test { rocket::build() .manage(markdown::SearchIndex::open().unwrap()) .mount("/", rocket::routes![index, error]) - .mount("/dashboard/static", FileServer::from(&config::static_dir())) + .mount("/dashboard/static", FileServer::from(config::static_dir())) .mount("/dashboard", pgml_dashboard::routes()) .mount("/", pgml_dashboard::api::cms::routes()) } diff --git a/pgml-dashboard/src/models.rs b/pgml-dashboard/src/models.rs index e67bcff5b..8896b9fae 100644 --- a/pgml-dashboard/src/models.rs +++ b/pgml-dashboard/src/models.rs @@ -381,18 +381,20 @@ impl Cell { } CellType::Markdown => { - let mut options = ComrakOptions::default(); - options.extension = ComrakExtensionOptions { - strikethrough: true, - tagfilter: true, - table: true, - autolink: true, - tasklist: true, - superscript: true, - header_ids: None, - footnotes: true, - description_lists: true, - front_matter_delimiter: None, + let options = ComrakOptions { + extension: ComrakExtensionOptions { + strikethrough: true, + tagfilter: true, + table: true, + autolink: true, + tasklist: true, + superscript: true, + header_ids: None, + footnotes: true, + description_lists: true, + front_matter_delimiter: None, + }, + ..Default::default() }; ( @@ -541,19 +543,19 @@ impl Model { .await?) } - pub fn metrics<'a>(&'a self) -> &'a serde_json::Map { + pub fn metrics(&self) -> &serde_json::Map { self.metrics.as_ref().unwrap().as_object().unwrap() } - pub fn hyperparams<'a>(&'a self) -> &'a serde_json::Map { + pub fn hyperparams(&self) -> &serde_json::Map { self.hyperparams.as_object().unwrap() } - pub fn search_params<'a>(&'a self) -> &'a serde_json::Map { + pub fn search_params(&self) -> &serde_json::Map { self.search_params.as_object().unwrap() } - pub fn search_results<'a>(&'a self) -> Option<&'a serde_json::Map> { + pub fn search_results(&self) -> Option<&serde_json::Map> { match self.metrics().get("search_results") { Some(value) => Some(value.as_object().unwrap()), None => None, @@ -676,10 +678,9 @@ impl Snapshot { pub fn rows(&self) -> Option { match self.analysis.as_ref() { - Some(analysis) => match analysis.get("samples") { - Some(samples) => Some(samples.as_f64().unwrap() as i64), - None => None, - }, + Some(analysis) => analysis + .get("samples") + .map(|samples| samples.as_f64().unwrap() as i64), None => None, } } @@ -716,23 +717,17 @@ impl Snapshot { } pub fn feature_size(&self) -> Option { - match self.features() { - Some(features) => Some(features.len()), - None => None, - } + self.features().map(|features| features.len()) } - pub fn columns<'a>(&'a self) -> Option>> { + pub fn columns(&self) -> Option>> { match self.columns.as_ref() { - Some(columns) => match columns.as_array() { - Some(columns) => Some( - columns - .iter() - .map(|column| column.as_object().unwrap()) - .collect(), - ), - None => None, - }, + Some(columns) => columns.as_array().map(|columns| { + columns + .iter() + .map(|column| column.as_object().unwrap()) + .collect() + }), None => None, } @@ -800,7 +795,7 @@ impl Snapshot { let columns = self.columns().unwrap(); let column = columns .iter() - .find(|column| &column["name"].as_str().unwrap() == &name); + .find(|column| column["name"].as_str().unwrap() == name); match column { Some(column) => column .get("statistics") @@ -884,7 +879,7 @@ impl Deployment { } pub fn human_readable_strategy(&self) -> String { - self.strategy.as_ref().unwrap().replace("_", " ") + self.strategy.as_ref().unwrap().replace('_', " ") } } diff --git a/pgml-dashboard/src/utils/config.rs b/pgml-dashboard/src/utils/config.rs index c6cc5ff6a..8977975f6 100644 --- a/pgml-dashboard/src/utils/config.rs +++ b/pgml-dashboard/src/utils/config.rs @@ -84,7 +84,7 @@ impl Config { } } -pub fn dev_mode<'a>() -> bool { +pub fn dev_mode() -> bool { CONFIG.dev_mode } @@ -109,7 +109,7 @@ pub fn cms_dir<'a>() -> &'a Path { pub fn search_index_dir<'a>() -> &'a Path { &CONFIG.search_index_dir } -pub fn render_errors<'a>() -> bool { +pub fn render_errors() -> bool { CONFIG.render_errors } @@ -119,7 +119,7 @@ pub fn deployment<'a>() -> &'a str { pub fn signup_url<'a>() -> &'a str { &CONFIG.signup_url } -pub fn standalone_dashboard<'a>() -> bool { +pub fn standalone_dashboard() -> bool { CONFIG.standalone_dashboard } @@ -147,18 +147,12 @@ pub fn asset_url(path: Cow) -> String { } fn env_is_set(name: &str) -> bool { - match var(name) { - Ok(_) => true, - Err(_) => false, - } + var(name).is_ok() } fn env_string_required(name: &str) -> String { var(name) - .expect(&format!( - "{} env variable is required for proper configuration", - name - )) + .unwrap_or_else(|_| panic!("{} env variable is required for proper configuration", name)) .to_string() } diff --git a/pgml-dashboard/src/utils/markdown.rs b/pgml-dashboard/src/utils/markdown.rs index 983a92567..3ac54104d 100644 --- a/pgml-dashboard/src/utils/markdown.rs +++ b/pgml-dashboard/src/utils/markdown.rs @@ -31,14 +31,20 @@ pub struct MarkdownHeadings { counter: Arc, } -impl MarkdownHeadings { - pub fn new() -> Self { +impl Default for MarkdownHeadings { + fn default() -> Self { Self { counter: Arc::new(AtomicUsize::new(0)), } } } +impl MarkdownHeadings { + pub fn new() -> Self { + Self::default() + } +} + impl HeadingAdapter for MarkdownHeadings { fn enter(&self, meta: &HeadingMeta) -> String { // let id = meta.content.to_case(convert_case::Case::Kebab); @@ -75,7 +81,7 @@ fn parser(utf8: &str, item: &str) -> Option { let (start, end) = match title_index { Some(index) => { let start = index + item.len(); - let title_length = utf8.to_string()[start..].find("\""); + let title_length = utf8.to_string()[start..].find('\"'); match title_length { Some(title_length) => (start, start + title_length), None => (0, 0), @@ -85,7 +91,7 @@ fn parser(utf8: &str, item: &str) -> Option { }; if end - start > 0 { - Some(format!("{}", &utf8[start..end])) + Some(utf8[start..end].to_string()) } else { None } @@ -163,15 +169,12 @@ impl HighlightLines { HighlightColors::OrangeSoft => "highlightOrangeSoft=\"", }; - match parser(options, parse_string) { - Some(lines) => { - let parts = lines.split(",").map(|s| s.to_string()); - for line in parts { - hash.insert(line, format!("{}", color)); - } + if let Some(lines) = parser(options, parse_string) { + let parts = lines.split(',').map(|s| s.to_string()); + for line in parts { + hash.insert(line, format!("{}", color)); } - None => (), - }; + } } } @@ -217,9 +220,9 @@ pub struct SyntaxHighlighter {} impl SyntaxHighlighterAdapter for SyntaxHighlighter { fn highlight(&self, options: Option<&str>, code: &str) -> String { - let code = if options.is_some() { + let code = if let Some(options) = options { let code = code.to_string(); - let options = CodeFence::from(options.unwrap()); + let options = CodeFence::from(options); let code = match options.lang { "postgresql" | "sql" | "postgresql-line-nums" => { @@ -417,8 +420,7 @@ impl SyntaxHighlighterAdapter for SyntaxHighlighter { // Add line numbers let code = if options.enumerate { - let mut code = code.split("\n") - .into_iter() + let mut code = code.split('\n') .enumerate() .map(|(index, code)| { format!(r#"{}{}"#, @@ -430,7 +432,7 @@ impl SyntaxHighlighterAdapter for SyntaxHighlighter { code.into_iter().join("\n") } else { let mut code = code - .split("\n") + .split('\n') .map(|code| format!("{}", code)) .collect::>(); code.pop(); @@ -439,7 +441,7 @@ impl SyntaxHighlighterAdapter for SyntaxHighlighter { // Add line highlighting let code = code - .split("\n") + .split('\n') .enumerate() .map(|(index, code)| { format!( @@ -458,10 +460,10 @@ impl SyntaxHighlighterAdapter for SyntaxHighlighter { code.to_string() }; - String::from(format!( + format!( "
{}
", code - )) + ) } fn build_pre_tag(&self, _attributes: &HashMap) -> String { @@ -480,8 +482,10 @@ impl SyntaxHighlighterAdapter for SyntaxHighlighter { pub fn options() -> ComrakOptions { let mut options = ComrakOptions::default(); - let mut render_options = ComrakRenderOptions::default(); - render_options.unsafe_ = true; + let render_options = ComrakRenderOptions { + unsafe_: true, + ..Default::default() + }; options.extension = ComrakExtensionOptions { strikethrough: true, @@ -521,13 +525,10 @@ where F: FnMut(&mut markdown::mdast::Node) -> Result<()>, { let _ = f(node); - match node.children_mut() { - Some(children) => { - for child in children { - let _ = iter_mut_all(child, f); - } + if let Some(children) = node.children_mut() { + for child in children { + let _ = iter_mut_all(child, f); } - _ => (), } Ok(()) @@ -535,8 +536,8 @@ where pub fn nest_relative_links(node: &mut markdown::mdast::Node, path: &PathBuf) { let _ = iter_mut_all(node, &mut |node| { - match node { - markdown::mdast::Node::Link(ref mut link) => match Url::parse(&link.url) { + if let markdown::mdast::Node::Link(ref mut link) = node { + match Url::parse(&link.url) { Ok(url) => { if !url.has_host() { let mut url_path = url.path().to_string(); @@ -558,9 +559,8 @@ pub fn nest_relative_links(node: &mut markdown::mdast::Node, path: &PathBuf) { Err(e) => { warn!("could not parse url in markdown: {}", e) } - }, - _ => (), - }; + } + } Ok(()) }); @@ -580,27 +580,21 @@ pub fn get_title<'a>(root: &'a AstNode<'a>) -> anyhow::Result { return Ok(false); } - match &node.data.borrow().value { - &NodeValue::Heading(ref header) => { - if header.level == 1 { - let content = match node.first_child() { - Some(child) => child, - None => { - warn!("markdown heading has no child"); - return Ok(false); - } - }; - match &content.data.borrow().value { - &NodeValue::Text(ref text) => { - title = Some(text.to_owned()); - return Ok(false); - } - _ => (), - }; + if let NodeValue::Heading(header) = &node.data.borrow().value { + if header.level == 1 { + let content = match node.first_child() { + Some(child) => child, + None => { + warn!("markdown heading has no child"); + return Ok(false); + } + }; + if let NodeValue::Text(text) = &content.data.borrow().value { + title = Some(text.to_owned()); + return Ok(false); } } - _ => (), - }; + } Ok(true) })?; @@ -622,7 +616,7 @@ pub fn get_image<'a>(root: &'a AstNode<'a>) -> Option { let re = regex::Regex::new(r#"([^ match re.captures(&html.literal) { + NodeValue::HtmlBlock(html) => match re.captures(&html.literal) { Some(c) => { if &c[2] != "Author" { image = Some(c[1].to_string()); @@ -636,25 +630,22 @@ pub fn get_image<'a>(root: &'a AstNode<'a>) -> Option { _ => Ok(true), }) .ok()?; - return image; + image } /// Wrap tables in container to allow for x-scroll on overflow. pub fn wrap_tables<'a>(root: &'a AstNode<'a>, arena: &'a Arena>) -> anyhow::Result<()> { - let _ = iter_nodes(root, &mut |node| { - match &node.data.borrow().value { - &NodeValue::Table(ref _table) => { - let open_tag = arena.alloc(Node::new(RefCell::new(Ast::new( - NodeValue::HtmlInline(r#"
"#.to_string()), - )))); - let close_tag = arena.alloc(Node::new(RefCell::new(Ast::new( - NodeValue::HtmlInline("
".to_string()), - )))); - node.insert_before(open_tag); - node.insert_after(close_tag); - } - _ => (), - }; + iter_nodes(root, &mut |node| { + if let NodeValue::Table(_) = &node.data.borrow().value { + let open_tag = arena.alloc(Node::new(RefCell::new(Ast::new(NodeValue::HtmlInline( + r#"
"#.to_string(), + ))))); + let close_tag = arena.alloc(Node::new(RefCell::new(Ast::new(NodeValue::HtmlInline( + "
".to_string(), + ))))); + node.insert_before(open_tag); + node.insert_after(close_tag); + } Ok(true) })?; @@ -673,28 +664,22 @@ pub fn get_toc<'a>(root: &'a AstNode<'a>) -> anyhow::Result> { let mut header_counter = 0; iter_nodes(root, &mut |node| { - match &node.data.borrow().value { - &NodeValue::Heading(ref header) => { - header_counter += 1; - if header.level != 1 { - let sibling = match node.first_child() { - Some(child) => child, - None => { - warn!("markdown heading has no child"); - return Ok(false); - } - }; - match &sibling.data.borrow().value { - &NodeValue::Text(ref text) => { - links.push(TocLink::new(text, header_counter - 1).level(header.level)); - return Ok(false); - } - _ => (), - }; + if let NodeValue::Heading(header) = &node.data.borrow().value { + header_counter += 1; + if header.level != 1 { + let sibling = match node.first_child() { + Some(child) => child, + None => { + warn!("markdown heading has no child"); + return Ok(false); + } + }; + if let NodeValue::Text(text) = &sibling.data.borrow().value { + links.push(TocLink::new(text, header_counter - 1).level(header.level)); + return Ok(false); } } - _ => (), - }; + } Ok(true) })?; @@ -712,7 +697,7 @@ pub fn get_text<'a>(root: &'a AstNode<'a>) -> anyhow::Result> { let mut texts = Vec::new(); iter_nodes(root, &mut |node| match &node.data.borrow().value { - &NodeValue::Text(ref text) => { + NodeValue::Text(text) => { // Skip markdown annotations if text.starts_with("!!!") || text.starts_with("===") { Ok(true) @@ -726,12 +711,12 @@ pub fn get_text<'a>(root: &'a AstNode<'a>) -> anyhow::Result> { &NodeValue::Image(_) => Ok(false), - &NodeValue::Code(ref node) => { + NodeValue::Code(node) => { texts.push(node.literal.to_owned()); Ok(true) } - &NodeValue::CodeBlock(ref _node) => { + NodeValue::CodeBlock(_node) => { // Not a good idea to index code yet I think, gets too messy. // texts.push(String::from_utf8_lossy(&node.literal).to_string()); Ok(false) @@ -859,8 +844,8 @@ struct CodeBlock { impl CodeBlock { fn html(&self, html_type: &str) -> Option { match html_type { - "time" => match &self.time { - Some(time) => Some(format!( + "time" => self.time.as_ref().map(|time| { + format!( r#"
timer @@ -868,9 +853,8 @@ impl CodeBlock {
"#, time - )), - None => None, - }, + ) + }), "code" => match &self.title { Some(title) => Some(format!( r#" @@ -881,11 +865,12 @@ impl CodeBlock { "#, title )), - None => Some(format!( + None => Some( r#"
"# - )), + .to_string(), + ), }, "results" => match &self.title { Some(title) => Some(format!( @@ -897,11 +882,12 @@ impl CodeBlock { "#, title )), - None => Some(format!( + None => Some( r#"
"# - )), + .to_string(), + ), }, _ => None, } @@ -940,7 +926,7 @@ pub fn mkdocs<'a>(root: &'a AstNode<'a>, arena: &'a Arena>) -> anyho } }; - let tab = Tab::new(text.replace("=== ", "").replace("\"", "")); + let tab = Tab::new(text.replace("=== ", "").replace('\"', "")); if tabs.is_empty() { let n = @@ -948,8 +934,7 @@ pub fn mkdocs<'a>(root: &'a AstNode<'a>, arena: &'a Arena>) -> anyho r#" ".to_string().into()), + NodeValue::HtmlInline("".to_string()), )))); parent.insert_after(n); @@ -987,10 +972,9 @@ pub fn mkdocs<'a>(root: &'a AstNode<'a>, arena: &'a Arena>) -> anyho parent = n; - let n = - arena.alloc(Node::new(RefCell::new(Ast::new(NodeValue::HtmlInline( - r#"
"#.to_string().into(), - ))))); + let n = arena.alloc(Node::new(RefCell::new(Ast::new( + NodeValue::HtmlInline(r#"
"#.to_string()), + )))); parent.insert_after(n); @@ -998,20 +982,17 @@ pub fn mkdocs<'a>(root: &'a AstNode<'a>, arena: &'a Arena>) -> anyho for tab in tabs.iter() { let r = arena.alloc(Node::new(RefCell::new(Ast::new( - NodeValue::HtmlInline( - format!( - r#" + NodeValue::HtmlInline(format!( + r#"
"#, - active = if tab.active { "show active" } else { "" }, - id = tab.id - ) - .into(), - ), + active = if tab.active { "show active" } else { "" }, + id = tab.id + )), )))); for child in tab.children.iter() { @@ -1022,7 +1003,7 @@ pub fn mkdocs<'a>(root: &'a AstNode<'a>, arena: &'a Arena>) -> anyho parent = r; let n = arena.alloc(Node::new(RefCell::new(Ast::new( - NodeValue::HtmlInline(r#"
"#.to_string().into()), + NodeValue::HtmlInline(r#"
"#.to_string()), )))); parent.insert_after(n); @@ -1030,7 +1011,7 @@ pub fn mkdocs<'a>(root: &'a AstNode<'a>, arena: &'a Arena>) -> anyho } parent.insert_after(arena.alloc(Node::new(RefCell::new(Ast::new( - NodeValue::HtmlInline(r#"
"#.to_string().into()), + NodeValue::HtmlInline(r#"
"#.to_string()), ))))); tabs.clear(); @@ -1055,8 +1036,7 @@ pub fn mkdocs<'a>(root: &'a AstNode<'a>, arena: &'a Arena>) -> anyho r#" ".to_string().into()), + NodeValue::HtmlInline("".to_string()), )))); parent.insert_after(n); @@ -1094,10 +1074,9 @@ pub fn mkdocs<'a>(root: &'a AstNode<'a>, arena: &'a Arena>) -> anyho parent = n; - let n = - arena.alloc(Node::new(RefCell::new(Ast::new(NodeValue::HtmlInline( - r#"
"#.to_string().into(), - ))))); + let n = arena.alloc(Node::new(RefCell::new(Ast::new( + NodeValue::HtmlInline(r#"
"#.to_string()), + )))); parent.insert_after(n); @@ -1105,20 +1084,17 @@ pub fn mkdocs<'a>(root: &'a AstNode<'a>, arena: &'a Arena>) -> anyho for tab in tabs.iter() { let r = arena.alloc(Node::new(RefCell::new(Ast::new( - NodeValue::HtmlInline( - format!( - r#" + NodeValue::HtmlInline(format!( + r#"
"#, - active = if tab.active { "show active" } else { "" }, - id = tab.id - ) - .into(), - ), + active = if tab.active { "show active" } else { "" }, + id = tab.id + )), )))); for child in tab.children.iter() { @@ -1129,7 +1105,7 @@ pub fn mkdocs<'a>(root: &'a AstNode<'a>, arena: &'a Arena>) -> anyho parent = r; let n = arena.alloc(Node::new(RefCell::new(Ast::new( - NodeValue::HtmlInline(r#"
"#.to_string().into()), + NodeValue::HtmlInline(r#"
"#.to_string()), )))); parent.insert_after(n); @@ -1137,7 +1113,7 @@ pub fn mkdocs<'a>(root: &'a AstNode<'a>, arena: &'a Arena>) -> anyho } parent.insert_after(arena.alloc(Node::new(RefCell::new(Ast::new( - NodeValue::HtmlInline(r#"
"#.to_string().into()), + NodeValue::HtmlInline(r#"
"#.to_string()), ))))); tabs.clear(); @@ -1162,7 +1138,7 @@ pub fn mkdocs<'a>(root: &'a AstNode<'a>, arena: &'a Arena>) -> anyho let admonition: Admonition = Admonition::from(text.as_ref()); let n = arena.alloc(Node::new(RefCell::new(Ast::new(NodeValue::HtmlInline( - admonition.html().into(), + admonition.html(), ))))); info_block_close_items.push(None); @@ -1175,15 +1151,12 @@ pub fn mkdocs<'a>(root: &'a AstNode<'a>, arena: &'a Arena>) -> anyho let time = parser(text.as_ref(), r#"time=""#); let code_block = CodeBlock { time, title }; - match code_block.html("code") { - Some(html) => { - let n = arena.alloc(Node::new(RefCell::new(Ast::new( - NodeValue::HtmlInline(html.into()), - )))); - parent.insert_after(n); - } - None => (), - }; + if let Some(html) = code_block.html("code") { + let n = arena.alloc(Node::new(RefCell::new(Ast::new( + NodeValue::HtmlInline(html), + )))); + parent.insert_after(n); + } // add time ot info block to be appended prior to closing info_block_close_items.push(code_block.html("time")); @@ -1194,61 +1167,54 @@ pub fn mkdocs<'a>(root: &'a AstNode<'a>, arena: &'a Arena>) -> anyho let title = parser(text.as_ref(), r#"title=""#); let code_block = CodeBlock { time: None, title }; - match code_block.html("results") { - Some(html) => { - let n = arena.alloc(Node::new(RefCell::new(Ast::new( - NodeValue::HtmlInline(html.into()), - )))); - parent.insert_after(n); - } - None => (), + if let Some(html) = code_block.html("results") { + let n = arena.alloc(Node::new(RefCell::new(Ast::new( + NodeValue::HtmlInline(html), + )))); + parent.insert_after(n); } info_block_close_items.push(None); parent.detach(); - } else if text.starts_with("!!!") { - if info_block_close_items.len() > 0 { - let parent = node.parent().unwrap(); - - match info_block_close_items.pop() { - Some(html) => match html { - Some(html) => { - let timing = arena.alloc(Node::new(RefCell::new(Ast::new( - NodeValue::HtmlInline(format!("{html} ").into()), - )))); - parent.insert_after(timing); - } - None => { - let n = arena.alloc(Node::new(RefCell::new(Ast::new( - NodeValue::HtmlInline( - r#" - - "# - .to_string() - .into(), - ), - )))); - - parent.insert_after(n); - } - }, + } else if text.starts_with("!!!") && !info_block_close_items.is_empty() { + let parent = node.parent().unwrap(); + + match info_block_close_items.pop() { + Some(html) => match html { + Some(html) => { + let timing = arena.alloc(Node::new(RefCell::new(Ast::new( + NodeValue::HtmlInline(format!("{html} ")), + )))); + parent.insert_after(timing); + } None => { let n = arena.alloc(Node::new(RefCell::new(Ast::new( NodeValue::HtmlInline( r#" - - "# - .to_string() - .into(), + + "# + .to_string(), ), )))); parent.insert_after(n); } - } + }, + None => { + let n = arena.alloc(Node::new(RefCell::new(Ast::new( + NodeValue::HtmlInline( + r#" + + "# + .to_string(), + ), + )))); - parent.detach(); + parent.insert_after(n); + } } + + parent.detach(); } // TODO montana @@ -1260,11 +1226,11 @@ pub fn mkdocs<'a>(root: &'a AstNode<'a>, arena: &'a Arena>) -> anyho _ => { if !tabs.is_empty() { let last_tab = tabs.last_mut().unwrap(); - let mut ancestors = node.ancestors(); + let ancestors = node.ancestors(); let mut pushed = false; // Check that we haven't pushed it's parent in yet. - while let Some(parent) = ancestors.next() { + for parent in ancestors { pushed = last_tab .children .iter() @@ -1354,7 +1320,7 @@ impl SearchIndex { std::fs::create_dir(Self::path()).unwrap(); let index = tokio::task::spawn_blocking(move || -> tantivy::Result { - Ok(Index::create_in_dir(&Self::path(), Self::schema())?) + Index::create_in_dir(Self::path(), Self::schema()) }) .await .unwrap()?; @@ -1371,8 +1337,8 @@ impl SearchIndex { let arena = Arena::new(); let root = parse_document(&arena, &text, &options()); - let title_text = get_title(&root).unwrap(); - let body_text = get_text(&root).unwrap().into_iter().join(" "); + let title_text = get_title(root).unwrap(); + let body_text = get_text(root).unwrap().into_iter().join(" "); let title_field = schema.get_field("title").unwrap(); let body_field = schema.get_field("body").unwrap(); @@ -1399,7 +1365,7 @@ impl SearchIndex { index_writer.add_document(doc)?; } - tokio::task::spawn_blocking(move || -> tantivy::Result { Ok(index_writer.commit()?) }) + tokio::task::spawn_blocking(move || -> tantivy::Result { index_writer.commit() }) .await .unwrap()?; @@ -1529,7 +1495,7 @@ impl SearchIndex { .to_string(); let snippet = if snippet.is_empty() { - body.split(" ").take(20).collect::>().join(" ") + " ..." + body.split(' ').take(20).collect::>().join(" ") + " ..." } else { "... ".to_string() + &snippet.to_html() + " ..." }; diff --git a/pgml-dashboard/src/utils/tabs.rs b/pgml-dashboard/src/utils/tabs.rs index 744e43dd9..7b271f00c 100644 --- a/pgml-dashboard/src/utils/tabs.rs +++ b/pgml-dashboard/src/utils/tabs.rs @@ -18,21 +18,20 @@ impl<'a> Tabs<'a> { active: Option<&'a str>, ) -> anyhow::Result { let default = match default { - Some(default) => default.clone(), + Some(default) => default, _ => tabs .get(0) .ok_or(anyhow!("There must be at least one tab."))? - .name - .clone(), + .name, }; let active = active .and_then(|name| { let found = tabs.iter().find(|tab| tab.name == name); - let just_name = found.map(|tab| tab.name); - just_name + + found.map(|tab| tab.name) }) - .unwrap_or(default.clone()); + .unwrap_or(default); Ok(Tabs { tabs, diff --git a/pgml-extension/src/api.rs b/pgml-extension/src/api.rs index bb97b31e8..ab132bc4c 100644 --- a/pgml-extension/src/api.rs +++ b/pgml-extension/src/api.rs @@ -292,15 +292,12 @@ fn train_joint( warning!("Not deploying newly trained model."); } - TableIterator::new( - vec![( - project.name, - project.task.to_string(), - model.algorithm.to_string(), - deploy, - )] - .into_iter(), - ) + TableIterator::new(vec![( + project.name, + project.task.to_string(), + model.algorithm.to_string(), + deploy, + )]) } #[pg_extern] @@ -383,9 +380,11 @@ fn deploy( let project = Project::find(project_id).unwrap(); project.deploy(model_id); - TableIterator::new( - vec![(project_name.to_string(), strategy.to_string(), algorithm)].into_iter(), - ) + TableIterator::new(vec![( + project_name.to_string(), + strategy.to_string(), + algorithm, + )]) } #[pg_extern(immutable, parallel_safe, strict, name = "predict")] @@ -433,9 +432,10 @@ fn predict_joint(project_name: &str, features: Vec) -> Vec { #[pg_extern(immutable, parallel_safe, strict, name = "predict_batch")] fn predict_batch(project_name: &str, features: Vec) -> SetOfIterator<'static, f32> { - SetOfIterator::new( - predict_model_batch(Project::get_deployed_model_id(project_name), features).into_iter(), - ) + SetOfIterator::new(predict_model_batch( + Project::get_deployed_model_id(project_name), + features, + )) } #[pg_extern(immutable, parallel_safe, strict, name = "predict")] @@ -503,7 +503,7 @@ fn snapshot( true, preprocess, ); - TableIterator::new(vec![(relation_name.to_string(), y_column_name.to_string())].into_iter()) + TableIterator::new(vec![(relation_name.to_string(), y_column_name.to_string())]) } #[pg_extern] @@ -533,7 +533,7 @@ fn load_dataset( } }; - TableIterator::new(vec![(name, rows)].into_iter()) + TableIterator::new(vec![(name, rows)]) } #[cfg(all(feature = "python", not(feature = "use_as_lib")))] @@ -598,7 +598,7 @@ pub fn chunk( .map(|(i, chunk)| (i as i64 + 1, chunk)) .collect::>(); - TableIterator::new(chunks.into_iter()) + TableIterator::new(chunks) } #[cfg(all(feature = "python", not(feature = "use_as_lib")))] @@ -833,15 +833,12 @@ fn tune( project.deploy(model.id); } - TableIterator::new( - vec![( - project.name, - project.task.to_string(), - model.algorithm.to_string(), - deploy, - )] - .into_iter(), - ) + TableIterator::new(vec![( + project.name, + project.task.to_string(), + model.algorithm.to_string(), + deploy, + )]) } #[cfg(feature = "python")] diff --git a/pgml-extension/src/bindings/transformers/mod.rs b/pgml-extension/src/bindings/transformers/mod.rs index 8871c8458..9a8528ddb 100644 --- a/pgml-extension/src/bindings/transformers/mod.rs +++ b/pgml-extension/src/bindings/transformers/mod.rs @@ -16,8 +16,8 @@ use super::TracebackError; pub mod whitelist; -mod transformers; -pub use transformers::*; +mod transform; +pub use transform::*; create_pymodule!("/src/bindings/transformers/transformers.py"); diff --git a/pgml-extension/src/bindings/transformers/transformers.rs b/pgml-extension/src/bindings/transformers/transform.rs similarity index 100% rename from pgml-extension/src/bindings/transformers/transformers.rs rename to pgml-extension/src/bindings/transformers/transform.rs diff --git a/pgml-sdks/pgml/Cargo.lock b/pgml-sdks/pgml/Cargo.lock index 4bf5718b2..c9bff6f4d 100644 --- a/pgml-sdks/pgml/Cargo.lock +++ b/pgml-sdks/pgml/Cargo.lock @@ -1233,7 +1233,7 @@ checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pgml" -version = "0.9.5" +version = "0.9.6" dependencies = [ "anyhow", "async-trait", diff --git a/pgml-sdks/pgml/src/collection.rs b/pgml-sdks/pgml/src/collection.rs index 52e755aa0..e893e64c5 100644 --- a/pgml-sdks/pgml/src/collection.rs +++ b/pgml-sdks/pgml/src/collection.rs @@ -611,7 +611,7 @@ impl Collection { let mut document_ids = Vec::new(); for chunk in documents?.chunks(10) { // Need to make it a vec to partition it and must include explicit typing here - let mut chunk: Vec<&(uuid::Uuid, Option, Json)> = chunk.into_iter().collect(); + let mut chunk: Vec<&(uuid::Uuid, Option, Json)> = chunk.iter().collect(); // Split the chunk into two groups, one with text, and one with just metadata let split_index = itertools::partition(&mut chunk, |(_, text, _)| text.is_some()); @@ -623,7 +623,7 @@ impl Collection { if !metadata_chunk.is_empty() { // Update the metadata // Merge the metadata if the user has specified to do so otherwise replace it - if args["metadata"]["merge"].as_bool().unwrap_or(false) == true { + if args["metadata"]["merge"].as_bool().unwrap_or(false) { sqlx::query(query_builder!( "UPDATE %s d SET metadata = d.metadata || v.metadata FROM (SELECT UNNEST($1) source_uuid, UNNEST($2) metadata) v WHERE d.source_uuid = v.source_uuid", self.documents_table_name @@ -1245,7 +1245,7 @@ impl Collection { let file_types: Vec<&str> = args["file_types"] .as_array() .context("file_types must be an array of valid file types. E.G. ['md', 'txt']")? - .into_iter() + .iter() .map(|v| { let v = v.as_str().with_context(|| { format!("file_types must be an array of valid file types. E.G. ['md', 'txt']. Found: {}", v) @@ -1265,10 +1265,10 @@ impl Collection { args["ignore_paths"] .as_array() .map_or(Ok(Vec::new()), |v| { - v.into_iter() + v.iter() .map(|v| { let v = v.as_str().with_context(|| { - format!("ignore_paths must be an array of valid regexes") + "ignore_paths must be an array of valid regexes".to_string() })?; Regex::new(v).with_context(|| format!("Invalid regex: {}", v)) }) @@ -1291,7 +1291,7 @@ impl Collection { continue; } - let contents = utils::get_file_contents(&entry.path())?; + let contents = utils::get_file_contents(entry.path())?; documents.push( json!({ "id": nice_path, @@ -1306,7 +1306,7 @@ impl Collection { } } } - if documents.len() > 0 { + if !documents.is_empty() { self.upsert_documents(documents, None).await?; } Ok(()) @@ -1315,7 +1315,7 @@ impl Collection { pub async fn upsert_file(&mut self, path: &str) -> anyhow::Result<()> { self.verify_in_database(false).await?; let path = Path::new(path); - let contents = utils::get_file_contents(&path)?; + let contents = utils::get_file_contents(path)?; let document = json!({ "id": path, "text": contents diff --git a/pgml-sdks/pgml/src/filter_builder.rs b/pgml-sdks/pgml/src/filter_builder.rs index 4c33be1a9..32b9f4126 100644 --- a/pgml-sdks/pgml/src/filter_builder.rs +++ b/pgml-sdks/pgml/src/filter_builder.rs @@ -287,7 +287,7 @@ mod tests { .to_valid_sql_query(); assert_eq!( sql, - r##"SELECT "id" FROM "test_table" WHERE "test_table"."metadata" @> E'{\"id\":1}' AND "test_table"."metadata" @> E'{\"id2\":{\"id3\":\"test\"}}' AND "test_table"."metadata" @> E'{\"id4\":{\"id5\":{\"id6\":true}}}' AND "test_table"."metadata" @> E'{\"id7\":{\"id8\":{\"id9\":{\"id10\":[1,2,3]}}}}'"## + r#"SELECT "id" FROM "test_table" WHERE "test_table"."metadata" @> E'{\"id\":1}' AND "test_table"."metadata" @> E'{\"id2\":{\"id3\":\"test\"}}' AND "test_table"."metadata" @> E'{\"id4\":{\"id5\":{\"id6\":true}}}' AND "test_table"."metadata" @> E'{\"id7\":{\"id8\":{\"id9\":{\"id10\":[1,2,3]}}}}'"# ); } @@ -303,7 +303,7 @@ mod tests { .to_valid_sql_query(); assert_eq!( sql, - r##"SELECT "id" FROM "test_table" WHERE NOT "test_table"."metadata" @> E'{\"id\":1}' AND NOT "test_table"."metadata" @> E'{\"id2\":{\"id3\":\"test\"}}' AND NOT "test_table"."metadata" @> E'{\"id4\":{\"id5\":{\"id6\":true}}}' AND NOT "test_table"."metadata" @> E'{\"id7\":{\"id8\":{\"id9\":{\"id10\":[1,2,3]}}}}'"## + r#"SELECT "id" FROM "test_table" WHERE NOT "test_table"."metadata" @> E'{\"id\":1}' AND NOT "test_table"."metadata" @> E'{\"id2\":{\"id3\":\"test\"}}' AND NOT "test_table"."metadata" @> E'{\"id4\":{\"id5\":{\"id6\":true}}}' AND NOT "test_table"."metadata" @> E'{\"id7\":{\"id8\":{\"id9\":{\"id10\":[1,2,3]}}}}'"# ); } @@ -367,7 +367,7 @@ mod tests { .to_valid_sql_query(); assert_eq!( sql, - r##"SELECT "id" FROM "test_table" WHERE "test_table"."metadata" @> E'{\"id\":1}' AND "test_table"."metadata" @> E'{\"id2\":{\"id3\":1}}'"## + r#"SELECT "id" FROM "test_table" WHERE "test_table"."metadata" @> E'{\"id\":1}' AND "test_table"."metadata" @> E'{\"id2\":{\"id3\":1}}'"# ); } @@ -383,7 +383,7 @@ mod tests { .to_valid_sql_query(); assert_eq!( sql, - r##"SELECT "id" FROM "test_table" WHERE "test_table"."metadata" @> E'{\"id\":1}' OR "test_table"."metadata" @> E'{\"id2\":{\"id3\":1}}'"## + r#"SELECT "id" FROM "test_table" WHERE "test_table"."metadata" @> E'{\"id\":1}' OR "test_table"."metadata" @> E'{\"id2\":{\"id3\":1}}'"# ); } @@ -399,7 +399,7 @@ mod tests { .to_valid_sql_query(); assert_eq!( sql, - r##"SELECT "id" FROM "test_table" WHERE NOT ("test_table"."metadata" @> E'{\"id\":1}' AND "test_table"."metadata" @> E'{\"id2\":{\"id3\":1}}')"## + r#"SELECT "id" FROM "test_table" WHERE NOT ("test_table"."metadata" @> E'{\"id\":1}' AND "test_table"."metadata" @> E'{\"id2\":{\"id3\":1}}')"# ); } @@ -419,7 +419,7 @@ mod tests { .to_valid_sql_query(); assert_eq!( sql, - r##"SELECT "id" FROM "test_table" WHERE ("test_table"."metadata" @> E'{\"id\":1}' OR "test_table"."metadata" @> E'{\"id2\":{\"id3\":1}}') AND "test_table"."metadata" @> E'{\"id4\":1}'"## + r#"SELECT "id" FROM "test_table" WHERE ("test_table"."metadata" @> E'{\"id\":1}' OR "test_table"."metadata" @> E'{\"id2\":{\"id3\":1}}') AND "test_table"."metadata" @> E'{\"id4\":1}'"# ); let sql = construct_filter_builder_with_json(json!({ "$or": [ @@ -435,7 +435,7 @@ mod tests { .to_valid_sql_query(); assert_eq!( sql, - r##"SELECT "id" FROM "test_table" WHERE ("test_table"."metadata" @> E'{\"id\":1}' AND "test_table"."metadata" @> E'{\"id2\":{\"id3\":1}}') OR "test_table"."metadata" @> E'{\"id4\":1}'"## + r#"SELECT "id" FROM "test_table" WHERE ("test_table"."metadata" @> E'{\"id\":1}' AND "test_table"."metadata" @> E'{\"id2\":{\"id3\":1}}') OR "test_table"."metadata" @> E'{\"id4\":1}'"# ); let sql = construct_filter_builder_with_json(json!({ "metadata": {"$or": [ @@ -447,7 +447,7 @@ mod tests { .to_valid_sql_query(); assert_eq!( sql, - r##"SELECT "id" FROM "test_table" WHERE "test_table"."metadata" @> E'{\"metadata\":{\"uuid\":\"1\"}}' OR "test_table"."metadata" @> E'{\"metadata\":{\"uuid2\":\"2\"}}'"## + r#"SELECT "id" FROM "test_table" WHERE "test_table"."metadata" @> E'{\"metadata\":{\"uuid\":\"1\"}}' OR "test_table"."metadata" @> E'{\"metadata\":{\"uuid2\":\"2\"}}'"# ); } } diff --git a/pgml-sdks/pgml/src/lib.rs b/pgml-sdks/pgml/src/lib.rs index 8eebf2f0f..cd0eaaeef 100644 --- a/pgml-sdks/pgml/src/lib.rs +++ b/pgml-sdks/pgml/src/lib.rs @@ -320,7 +320,7 @@ mod tests { let mut collection = Collection::new(collection_name, None); collection.add_pipeline(&mut pipeline).await?; let full_embeddings_table_name = pipeline.create_or_get_embeddings_table().await?; - let embeddings_table_name = full_embeddings_table_name.split(".").collect::>()[1]; + let embeddings_table_name = full_embeddings_table_name.split('.').collect::>()[1]; let pool = get_or_initialize_pool(&None).await?; let results: Vec<(String, String)> = sqlx::query_as(&query_builder!( "select indexname, indexdef from pg_indexes where tablename = '%d' and schemaname = '%d'", @@ -346,10 +346,10 @@ mod tests { collection.add_pipeline(&mut pipeline).await?; let queried_pipeline = &collection.get_pipelines().await?[0]; assert_eq!(pipeline.name, queried_pipeline.name); - collection.disable_pipeline(&mut pipeline).await?; + collection.disable_pipeline(&pipeline).await?; let queried_pipelines = &collection.get_pipelines().await?; assert!(queried_pipelines.is_empty()); - collection.enable_pipeline(&mut pipeline).await?; + collection.enable_pipeline(&pipeline).await?; let queried_pipeline = &collection.get_pipelines().await?[0]; assert_eq!(pipeline.name, queried_pipeline.name); collection.archive().await?; @@ -510,13 +510,13 @@ mod tests { collection.add_pipeline(&mut pipeline).await?; // Recreate the pipeline to replicate a more accurate example - let mut pipeline = Pipeline::new("test_r_p_cvswqb_1", None, None, None); + let pipeline = Pipeline::new("test_r_p_cvswqb_1", None, None, None); collection .upsert_documents(generate_dummy_documents(4), None) .await?; let results = collection .query() - .vector_recall("Here is some query", &mut pipeline, None) + .vector_recall("Here is some query", &pipeline, None) .limit(3) .fetch_all() .await?; @@ -553,7 +553,7 @@ mod tests { collection.add_pipeline(&mut pipeline).await?; // Recreate the pipeline to replicate a more accurate example - let mut pipeline = Pipeline::new("test_r_p_cvswqbapmpis_1", None, None, None); + let pipeline = Pipeline::new("test_r_p_cvswqbapmpis_1", None, None, None); collection .upsert_documents(generate_dummy_documents(3), None) .await?; @@ -561,7 +561,7 @@ mod tests { .query() .vector_recall( "Here is some query", - &mut pipeline, + &pipeline, Some( json!({ "instruction": "Represent the Wikipedia document for retrieval: " @@ -604,13 +604,13 @@ mod tests { collection.add_pipeline(&mut pipeline).await?; // Recreate the pipeline to replicate a more accurate example - let mut pipeline = Pipeline::new("test_r_p_cvswqbwre_1", None, None, None); + let pipeline = Pipeline::new("test_r_p_cvswqbwre_1", None, None, None); collection .upsert_documents(generate_dummy_documents(4), None) .await?; let results = collection .query() - .vector_recall("Here is some query", &mut pipeline, None) + .vector_recall("Here is some query", &pipeline, None) .limit(3) .fetch_all() .await?; @@ -631,7 +631,7 @@ mod tests { collection.add_pipeline(&mut pipeline).await?; // Recreate the pipeline to replicate a more accurate example - let mut pipeline = Pipeline::new("test_r_p_cvswqbachesv_1", None, None, None); + let pipeline = Pipeline::new("test_r_p_cvswqbachesv_1", None, None, None); collection .upsert_documents(generate_dummy_documents(3), None) .await?; @@ -639,7 +639,7 @@ mod tests { .query() .vector_recall( "Here is some query", - &mut pipeline, + &pipeline, Some( json!({ "hnsw": { @@ -676,7 +676,7 @@ mod tests { collection.add_pipeline(&mut pipeline).await?; // Recreate the pipeline to replicate a more accurate example - let mut pipeline = Pipeline::new("test_r_p_cvswqbachesvare_2", None, None, None); + let pipeline = Pipeline::new("test_r_p_cvswqbachesvare_2", None, None, None); collection .upsert_documents(generate_dummy_documents(3), None) .await?; @@ -684,7 +684,7 @@ mod tests { .query() .vector_recall( "Here is some query", - &mut pipeline, + &pipeline, Some( json!({ "hnsw": { @@ -754,7 +754,7 @@ mod tests { for (expected_result_count, filter) in filters { let results = collection .query() - .vector_recall("Here is some query", &mut pipeline, None) + .vector_recall("Here is some query", &pipeline, None) .filter(filter) .fetch_all() .await?; diff --git a/pgml-sdks/pgml/src/migrations/pgml--0.9.1--0.9.2.rs b/pgml-sdks/pgml/src/migrations/pgml--0.9.1--0.9.2.rs index 85c5165bb..32176d91c 100644 --- a/pgml-sdks/pgml/src/migrations/pgml--0.9.1--0.9.2.rs +++ b/pgml-sdks/pgml/src/migrations/pgml--0.9.1--0.9.2.rs @@ -10,7 +10,7 @@ pub async fn migrate(pool: PgPool, _: Vec) -> anyhow::Result { sqlx::query_scalar("SELECT extversion FROM pg_extension WHERE extname = 'vector'") .fetch_one(&pool) .await?; - let value = version.split(".").collect::>()[1].parse::()?; + let value = version.split('.').collect::>()[1].parse::()?; anyhow::ensure!( value >= 5, "Vector extension must be at least version 0.5.0" diff --git a/pgml-sdks/pgml/src/transformer_pipeline.rs b/pgml-sdks/pgml/src/transformer_pipeline.rs index f7b5f417f..70fd3f925 100644 --- a/pgml-sdks/pgml/src/transformer_pipeline.rs +++ b/pgml-sdks/pgml/src/transformer_pipeline.rs @@ -20,6 +20,7 @@ use crate::{get_or_initialize_pool, types::Json}; #[cfg(feature = "python")] use crate::types::JsonPython; +#[allow(clippy::type_complexity)] #[derive(alias_manual)] pub struct TransformerStream { transaction: Option>, @@ -61,7 +62,7 @@ impl Stream for TransformerStream { ) -> Poll> { if self.done { if let Some(c) = self.commit.as_mut() { - if let Poll::Ready(_) = c.as_mut().poll(cx) { + if c.as_mut().poll(cx).is_ready() { self.commit = None; } } diff --git a/pgml-sdks/pgml/src/utils.rs b/pgml-sdks/pgml/src/utils.rs index 4b6c5960f..c8a2f8039 100644 --- a/pgml-sdks/pgml/src/utils.rs +++ b/pgml-sdks/pgml/src/utils.rs @@ -49,10 +49,8 @@ pub fn get_file_contents(path: &Path) -> anyhow::Result { "pdf" => { let doc = Document::load(path) .with_context(|| format!("Error reading PDF file: {}", path.display()))?; - doc.get_pages() - .into_iter() - .map(|(page_number, _)| { - doc.extract_text(&vec![page_number]).with_context(|| { + doc.get_pages().into_keys().map(|page_number| { + doc.extract_text(&[page_number]).with_context(|| { format!("Error extracting content from PDF file: {}", path.display()) }) }) diff --git a/pgml-sdks/rust-bridge/rust-bridge-macros/src/javascript.rs b/pgml-sdks/rust-bridge/rust-bridge-macros/src/javascript.rs index b38fe2dfc..6aa5cf667 100644 --- a/pgml-sdks/rust-bridge/rust-bridge-macros/src/javascript.rs +++ b/pgml-sdks/rust-bridge/rust-bridge-macros/src/javascript.rs @@ -427,7 +427,7 @@ fn convert_method_wrapper_arguments( ) } _ => { - let argument_type_js = get_neon_type(&ty); + let argument_type_js = get_neon_type(ty); let t = ty.to_type(None).expect( "Could not parse type in convert_method_wrapper_arguments in javascript.rs", ); diff --git a/pgml-sdks/rust-bridge/rust-bridge-macros/src/python.rs b/pgml-sdks/rust-bridge/rust-bridge-macros/src/python.rs index b0df89c51..cf4f04316 100644 --- a/pgml-sdks/rust-bridge/rust-bridge-macros/src/python.rs +++ b/pgml-sdks/rust-bridge/rust-bridge-macros/src/python.rs @@ -219,12 +219,10 @@ pub fn generate_python_methods( let some_wrapper_type = match method.receiver.as_ref() { Some(r) => { let st = r.to_string(); - Some(if st.contains("&") { + Some(if st.contains('&') { let st = st.replace("self", &wrapped_type_ident.to_string()); - let s = syn::parse_str::(&st).expect(&format!( - "Error converting self type to necessary syn type: {:?}", - r - )); + let s = syn::parse_str::(&st).unwrap_or_else(|_| panic!("Error converting self type to necessary syn type: {:?}", + r)); s.to_token_stream() } else { quote! { #wrapped_type_ident }