From c0f040a1b3c5f865374e3027102048483ec0c0b2 Mon Sep 17 00:00:00 2001 From: clover caruso Date: Mon, 16 Feb 2026 00:27:14 -0800 Subject: [PATCH] chore: warns --- Cargo.toml | 3 --- src/component_transforms.rs | 20 ++++++++++---------- src/lib.rs | 18 +++++------------- src/marko.rs | 27 +++++++++------------------ src/marko_ast.rs | 16 +++++----------- src/outline.rs | 14 +++++++------- src/plugin/frontmatter.rs | 4 ++-- src/plugin/mod.rs | 2 +- src/plugin/tags.rs | 4 +--- src/typescript.rs | 8 ++++---- src/wasm.rs | 2 +- 11 files changed, 45 insertions(+), 73 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 365df17455cc634c6381c290c1e3319831dde74a..6a203d9cfecbc935f083b67426f99817c0ac4e71 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,6 +19,3 @@ serde_json = "1.0" serde_yml = "0.0.12" wasm-bindgen = { version = "0.2" } serde-wasm-bindgen = "0.6.5" - -[rust-analyzer.cargo] -features = ["wasm"] diff --git a/src/component_transforms.rs b/src/component_transforms.rs index 799638c52d978e7193e82ac442ae5b698d0171d3..e9e669587eac7ba7b6a25f309612e2388fd0c437 100644 --- a/src/component_transforms.rs +++ b/src/component_transforms.rs @@ -14,27 +14,27 @@ const SUFFIX: &str = "__markodown__"; /// Heading component name fn heading_component() -> String { - format!("HeadingComponent{}", SUFFIX) + format!("HeadingComponent{SUFFIX}") } /// Code block component name fn code_block_component() -> String { - format!("CodeBlockComponent{}", SUFFIX) + format!("CodeBlockComponent{SUFFIX}") } /// Link component name fn link_component() -> String { - format!("LinkComponent{}", SUFFIX) + format!("LinkComponent{SUFFIX}") } /// Image component name fn image_component() -> String { - format!("ImageComponent{}", SUFFIX) + format!("ImageComponent{SUFFIX}") } /// Blockquote component name fn blockquote_component() -> String { - format!("BlockquoteComponent{}", SUFFIX) + format!("BlockquoteComponent{SUFFIX}") } /// Generate import statements for all configured component imports @@ -199,7 +199,7 @@ fn transform_heading(node: &mut Node) { // Create a new MarkoBlockComplete to replace this node let mut open = OpenOwned::from_tag_name(&heading_component()); - open.insert_attr(&format!("level={}", level)); + open.insert_attr(&format!("level={level}")); // We need to take ownership of children let children = std::mem::take(&mut node.children); @@ -222,7 +222,7 @@ fn transform_heading(node: &mut Node) { let level = heading.level; let mut open = OpenOwned::from_tag_name(&heading_component()); - open.insert_attr(&format!("level={}", level)); + open.insert_attr(&format!("level={level}")); let children = std::mem::take(&mut node.children); @@ -241,7 +241,7 @@ fn transform_heading(node: &mut Node) { if let Some(marko_open) = node.cast_mut::() { if let Some(level) = parse_heading_level(marko_open.open.as_ref().tag_name()) { marko_open.open.replace_tag_name(&heading_component()); - marko_open.open.insert_attr(&format!("level={}", level)); + marko_open.open.insert_attr(&format!("level={level}")); } return; } @@ -250,7 +250,7 @@ fn transform_heading(node: &mut Node) { if let Some(marko_open) = node.cast_mut::() { if let Some(level) = parse_heading_level(marko_open.open.as_ref().tag_name()) { marko_open.open.replace_tag_name(&heading_component()); - marko_open.open.insert_attr(&format!("level={}", level)); + marko_open.open.insert_attr(&format!("level={level}")); } return; } @@ -259,7 +259,7 @@ fn transform_heading(node: &mut Node) { if let Some(marko_block) = node.cast_mut::() { if let Some(level) = parse_heading_level(marko_block.open.as_ref().tag_name()) { marko_block.open.replace_tag_name(&heading_component()); - marko_block.open.insert_attr(&format!("level={}", level)); + marko_block.open.insert_attr(&format!("level={level}")); // Also update close tag to generic marko_block.close_tag = "".to_string(); } diff --git a/src/lib.rs b/src/lib.rs index b098780017c7fc74fe87c146b48fc5a4b2e14915..4c044cd353b220c4debfe73c12808531759163c7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -156,18 +156,11 @@ pub fn transform( if let Some(self_path) = self_import { text = format!( - "import Layout__markodown__ from \"{}\";import * as self__markodown__ from \"{}\";\n{}\n{}", - layout_path, - self_path, - hoisted, - text + "import Layout__markodown__ from \"{layout_path}\";import * as self__markodown__ from \"{self_path}\";\n{hoisted}\n{text}" ); } else { text = format!( - "import Layout__markodown__ from \"{}\";\n{}\n{}", - layout_path, - hoisted, - text + "import Layout__markodown__ from \"{layout_path}\";\n{hoisted}\n{text}" ); } } else { @@ -245,7 +238,7 @@ fn has_marko_features(node: &markdown_it::Node) -> bool { || node.cast::().is_some() || node.cast::().is_some() || node.cast::().is_some() - || node.children.iter().any(|child| has_marko_features(child)) + || node.children.iter().any(has_marko_features) } /// Validate that Marko open/close tags are properly matched @@ -299,8 +292,7 @@ fn validate_marko_tags( // Mismatched: expected , got errors.push( OxcDiagnostic::error(format!( - "Mismatched closing tag: expected , found ", - top_name, name + "Mismatched closing tag: expected , found " )) .with_labels(vec![ top_span.label("opened here"), @@ -337,7 +329,7 @@ fn validate_marko_tags( // Check for unclosed tags for (name, span) in stack { - errors.push(OxcDiagnostic::error(format!("Unclosed tag <{}>", name)).with_label(span)); + errors.push(OxcDiagnostic::error(format!("Unclosed tag <{name}>")).with_label(span)); } } diff --git a/src/marko.rs b/src/marko.rs index c6cbfce2a2df80a84b0910d1d15c43295b6e2d16..f7b93ea3435681cc452ea522b8dbe808776af08f 100644 --- a/src/marko.rs +++ b/src/marko.rs @@ -1,6 +1,5 @@ use oxc_diagnostics::OxcDiagnostic; use oxc_span::Span; -use serde_yml::libyml::tag; use crate::{ err, @@ -201,12 +200,10 @@ pub fn parse_open(src: &str) -> Result { } } } + } else if l.expect("/>").is_ok() { + self_closing = true; } else { - if l.expect("/>").is_ok() { - self_closing = true; - } else { - l.expect(">")?; - } + l.expect(">")?; } Ok(Open::new( @@ -245,13 +242,10 @@ fn parse_tag_name<'a>(l: &mut LexState<'a>) -> Result<&'a str, OxcDiagnostic> { return Ok(""); } let start = l.offset; - loop { - match l.peek_byte() { - Some(b'a'..=b'z' | b'A'..=b'Z' | b'_' | b'-' | b'$' | b'@' | b'0'..=b'9') => { - l.offset += 1 - } - _ => break, - } + while let Some(b'a'..=b'z' | b'A'..=b'Z' | b'_' | b'-' | b'$' | b'@' | b'0'..=b'9') = + l.peek_byte() + { + l.offset += 1 } let tag_name = &l.src[start as usize..l.offset as usize]; if !tag_name.is_empty() { @@ -263,11 +257,8 @@ fn parse_tag_name<'a>(l: &mut LexState<'a>) -> Result<&'a str, OxcDiagnostic> { fn parse_attr_name<'a>(l: &mut LexState<'a>) -> Result<&'a str, OxcDiagnostic> { let start = l.offset; - loop { - match l.peek_byte() { - Some(b'a'..=b'z' | b'A'..=b'Z' | b'_' | b'-' | b':') => l.offset += 1, - _ => break, - } + while let Some(b'a'..=b'z' | b'A'..=b'Z' | b'_' | b'-' | b':') = l.peek_byte() { + l.offset += 1; } let tag_name = &l.src[start as usize..l.offset as usize]; if !tag_name.is_empty() { diff --git a/src/marko_ast.rs b/src/marko_ast.rs index 7b54554fdfebe0afa5d18c004734b8e72902a178..7aafa5c7f24fa9ca92d2e72e2c5aee6a93a83728 100644 --- a/src/marko_ast.rs +++ b/src/marko_ast.rs @@ -53,7 +53,7 @@ impl<'a> Open<'a> { let mut l = LexState::new(self.src); l.advance(3); parse_expr(&mut l).expect("validated text should pass"); - Span::new(3, l.offset() as u32) + Span::new(3, l.offset()) } } @@ -180,7 +180,7 @@ impl OpenOwned { /// For example: `` with `level=3` → `` pub fn insert_attr(&mut self, attr: &str) { let insert_pos = self.shorthand_end as usize; - let insert_str = format!(" {}", attr); + let insert_str = format!(" {attr}"); let delta = insert_str.len(); // Build new source @@ -208,7 +208,7 @@ impl OpenOwned { /// Create a new OpenOwned from a tag name (for synthesizing tags). /// Creates a simple `` with no attributes. pub fn from_tag_name(tag_name: &str) -> Self { - let src = format!("<{}>", tag_name); + let src = format!("<{tag_name}>"); let tag_name_span = Span::new(1, 1 + tag_name.len() as u32); OpenOwned { src, @@ -293,14 +293,8 @@ impl<'a> LexState<'a> { } pub fn skip_whitespace(&mut self) { - loop { - match self.peek_byte() { - Some(byte) => match byte { - b' ' | b'\n' | b'\t' | b'\r' => self.offset += 1, - _ => break, - }, - None => break, - } + while let Some(b' ' | b'\n' | b'\t' | b'\r') = self.peek_byte() { + self.offset += 1; } } } diff --git a/src/outline.rs b/src/outline.rs index fe5bd14affc82eb5671489669157c09c91107380..a50ceaf4d9a7d9eb98df214f4afd17db3a126cf5 100644 --- a/src/outline.rs +++ b/src/outline.rs @@ -76,7 +76,7 @@ pub fn generate_slug(text: &str, existing_ids: &mut HashSet) -> String { let mut counter = 1; loop { - let new_slug = format!("{}-{}", slug, counter); + let new_slug = format!("{slug}-{counter}"); if !existing_ids.contains(&new_slug) { existing_ids.insert(new_slug.clone()); return new_slug; @@ -140,7 +140,7 @@ fn collect_recursive( // Generate component name *heading_counter += 1; - let component_name = format!("Heading_{}__markodown__", heading_counter); + let component_name = format!("Heading_{heading_counter}__markodown__"); // Render children before replacing them let rendered_content = render_children(node); @@ -176,7 +176,7 @@ fn collect_recursive( let id = generate_slug(&text, existing_ids); *heading_counter += 1; - let component_name = format!("Heading_{}__markodown__", heading_counter); + let component_name = format!("Heading_{heading_counter}__markodown__"); let rendered_content = render_children(node); @@ -208,7 +208,7 @@ fn collect_recursive( let id = generate_slug(&text, existing_ids); *heading_counter += 1; - let component_name = format!("Heading_{}__markodown__", heading_counter); + let component_name = format!("Heading_{heading_counter}__markodown__"); let rendered_content = render_children(node); @@ -288,7 +288,7 @@ fn collect_recursive( }; *heading_counter += 1; - let component_name = format!("Heading_{}__markodown__", heading_counter); + let component_name = format!("Heading_{heading_counter}__markodown__"); let rendered_content = render_children(node); @@ -367,7 +367,7 @@ fn collect_recursive( }; *heading_counter += 1; - let component_name = format!("Heading_{}__markodown__", heading_counter); + let component_name = format!("Heading_{heading_counter}__markodown__"); let rendered_content = render_children(node); @@ -446,7 +446,7 @@ fn collect_recursive( }; *heading_counter += 1; - let component_name = format!("Heading_{}__markodown__", heading_counter); + let component_name = format!("Heading_{heading_counter}__markodown__"); let rendered_content = render_children(node); diff --git a/src/plugin/frontmatter.rs b/src/plugin/frontmatter.rs index 5e4788b5de0ee35ddf8dbd794e8440fe8b30f128..039d749906c4964735858aebd740eecf8979416d 100644 --- a/src/plugin/frontmatter.rs +++ b/src/plugin/frontmatter.rs @@ -147,8 +147,8 @@ pub fn extract_preamble_and_frontmatter( // Calculate bytes consumed (including the trailing newline after closing ---) let mut bytes_consumed = 0; - for i in 0..end_line { - bytes_consumed += lines[i].len() + 1; // +1 for newline + for line in lines.iter().take(end_line) { + bytes_consumed += line.len() + 1; // +1 for newline } // Consume one trailing blank line for separation if present diff --git a/src/plugin/mod.rs b/src/plugin/mod.rs index 7494368208e4b2034fdcad1ea3326899ecff1c92..a0bddf632d5ebb8f3704b89e8928337460dfa20d 100644 --- a/src/plugin/mod.rs +++ b/src/plugin/mod.rs @@ -34,7 +34,7 @@ pub(crate) struct ErrorBlock { } impl NodeValue for ErrorBlock { - fn render(&self, _: &Node, r: &mut dyn Renderer) { + fn render(&self, _: &Node, _: &mut dyn Renderer) { panic!("cannot render ErrorBlock"); } } diff --git a/src/plugin/tags.rs b/src/plugin/tags.rs index 8084d006892dba24977240d7ddb88fa581c5f5e3..6776720b69d3e2fabf45dac4f1834e17ca1dafd7 100644 --- a/src/plugin/tags.rs +++ b/src/plugin/tags.rs @@ -165,9 +165,7 @@ fn find_same_line_close<'a>(content: &'a str, tag_name: &str) -> Option<(&'a str } pos = lt_pos + close.length as usize; } else { - if close.tag_name.is_none() { - stack.pop(); - } else if stack.last() == close.tag_name.as_ref() { + if close.tag_name.is_none() || stack.last() == close.tag_name.as_ref() { stack.pop(); } pos = lt_pos + close.length as usize; diff --git a/src/typescript.rs b/src/typescript.rs index 61b9aa61450e15b463be287e02de06355febb61f..36ad7ef126f3e12578b26ebe2db15c30b6936f5d 100644 --- a/src/typescript.rs +++ b/src/typescript.rs @@ -3,7 +3,7 @@ use crate::{adjust_err, err, marko_ast::LexState}; use oxc_allocator::Allocator; use oxc_ast::ast::{Expression, Statement}; -use oxc_diagnostics::{LabeledSpan, OxcDiagnostic}; +use oxc_diagnostics::OxcDiagnostic; use oxc_span::{GetSpan, SourceType}; pub fn scan_first_statement_forbid_trailing(source: &str) -> Result { @@ -13,7 +13,7 @@ pub fn scan_first_statement_forbid_trailing(source: &str) -> Result 0 { + if !trailing.trim().is_empty() { return Err(err( "Trailing content not allowed here", span.end + (trailing.len() - trailing.trim_start().len()) as u32, @@ -42,7 +42,7 @@ fn parse_stmt_extra<'alloc, 'src: 'alloc>( .with_typescript(true); let mut result = oxc_parser::Parser::new(allocator, source, source_type).parse(); - if !result.errors.is_empty() && result.program.body.len() == 0 { + if !result.errors.is_empty() && result.program.body.is_empty() { let first_err = result .errors .into_iter() @@ -69,7 +69,7 @@ fn parse_stmt_extra<'alloc, 'src: 'alloc>( return Err(adjust_err(first_err, offset)); } result = oxc_parser::Parser::new(allocator, candidate, source_type).parse(); - if (!result.errors.is_empty() || result.panicked) && result.program.body.len() == 0 { + if (!result.errors.is_empty() || result.panicked) && result.program.body.is_empty() { let before_trim = &candidate[..candidate.len() - 1]; let after_trim = before_trim.trim_end(); if after_trim.len() < before_trim.len() { diff --git a/src/wasm.rs b/src/wasm.rs index 66de423d8fb7f9d8db1e26b153ad0d2d1ffa241e..ce4edd250a13b0458863ef1d9404e30dc605a14e 100644 --- a/src/wasm.rs +++ b/src/wasm.rs @@ -49,7 +49,7 @@ fn offset_to_line_col(src: &str, offset: usize) -> (u32, u32) { /// - Takes the first label and absorbs its position into the root error. /// - If there are multiple labels or labels with text, forward them. fn convert_diagnostic(src: &str, diag: &OxcDiagnostic) -> WasmDiagnostic { - let labels = diag.labels.as_ref().map(|l| l.as_slice()).unwrap_or(&[]); + let labels = diag.labels.as_deref().unwrap_or(&[]); // Determine root line/column from first label, or default to 1:1 let (line, column) = if let Some(first) = labels.first() { -- 2.54.0