diff --git a/crates/ast-engine/src/replacer.rs b/crates/ast-engine/src/replacer.rs index 733a095..f706fb7 100644 --- a/crates/ast-engine/src/replacer.rs +++ b/crates/ast-engine/src/replacer.rs @@ -84,6 +84,7 @@ pub use template::{TemplateFix, TemplateFixError}; /// /// ```rust,no_run /// # use thread_ast_engine::replacer::Replacer; +/// # use thread_ast_engine::source::Content; /// # use thread_ast_engine::{Doc, NodeMatch}; /// # use thread_ast_engine::meta_var::Underlying; /// struct CustomReplacer; @@ -91,7 +92,7 @@ pub use template::{TemplateFix, TemplateFixError}; /// impl Replacer for CustomReplacer { /// fn generate_replacement(&self, nm: &NodeMatch<'_, D>) -> Underlying { /// // Custom replacement logic here -/// "new_code".as_bytes().to_vec() +/// D::Source::decode_str("new_code").into_owned() /// } /// } /// ``` diff --git a/crates/ast-engine/src/tree_sitter/mod.rs b/crates/ast-engine/src/tree_sitter/mod.rs index ff775b5..ad21149 100644 --- a/crates/ast-engine/src/tree_sitter/mod.rs +++ b/crates/ast-engine/src/tree_sitter/mod.rs @@ -42,7 +42,8 @@ //! //! ```rust,no_run //! # use thread_ast_engine::tree_sitter::{StrDoc, LanguageExt}; -//! # use thread_ast_engine::Language; +//! # use thread_ast_engine::{Language, Doc}; +//! # #[derive(Clone, Debug)] //! # struct Tsx; //! # impl Language for Tsx { //! # fn kind_to_id(&self, _: &str) -> u16 { 0 } @@ -144,6 +145,8 @@ fn parse_lang( /// /// ```rust,no_run /// # use thread_ast_engine::tree_sitter::StrDoc; +/// # use thread_ast_engine::Doc; +/// # #[derive(Clone, Debug)] /// # struct JavaScript; /// # impl thread_ast_engine::Language for JavaScript { /// # fn kind_to_id(&self, _: &str) -> u16 { 0 } diff --git a/crates/ast-engine/src/tree_sitter/traversal.rs b/crates/ast-engine/src/tree_sitter/traversal.rs index f3a5390..c9d2304 100644 --- a/crates/ast-engine/src/tree_sitter/traversal.rs +++ b/crates/ast-engine/src/tree_sitter/traversal.rs @@ -26,6 +26,7 @@ //! # use thread_ast_engine::tree_sitter::traversal::Visitor; //! # use thread_ast_engine::Language; //! # use thread_ast_engine::tree_sitter::LanguageExt; +//! # #[derive(Clone, Debug)] //! # struct Tsx; //! # impl thread_ast_engine::Language for Tsx { //! # fn kind_to_id(&self, _: &str) -> u16 { 0 } @@ -56,6 +57,7 @@ //! # use thread_ast_engine::tree_sitter::traversal::Visitor; //! # use thread_ast_engine::Language; //! # use thread_ast_engine::tree_sitter::LanguageExt; +//! # #[derive(Clone, Debug)] //! # struct Tsx; //! # impl thread_ast_engine::Language for Tsx { //! # fn kind_to_id(&self, _: &str) -> u16 { 0 } @@ -71,7 +73,7 @@ //! // Non-reentrant: only finds outer matches //! let outer_only: Vec<_> = Visitor::new("$FUNC($$$)") //! .reentrant(false) -//! .visit(root) +//! .visit(root.clone()) //! .collect(); //! //! // Reentrant: finds all matches including nested ones @@ -117,6 +119,7 @@ use std::marker::PhantomData; /// # use thread_ast_engine::tree_sitter::traversal::Visitor; /// # use thread_ast_engine::Language; /// # use thread_ast_engine::tree_sitter::LanguageExt; +/// # #[derive(Clone, Debug)] /// # struct Tsx; /// # impl thread_ast_engine::Language for Tsx { /// # fn kind_to_id(&self, _: &str) -> u16 { 0 } diff --git a/crates/language/src/html.rs b/crates/language/src/html.rs index cda0488..0cf7560 100644 --- a/crates/language/src/html.rs +++ b/crates/language/src/html.rs @@ -34,7 +34,8 @@ use thread_utilities::RapidMap; /// /// ```rust /// use thread_language::Html; -/// use thread_ast_engine::{Language, LanguageExt}; +/// use thread_ast_engine::Language; +/// use thread_ast_engine::tree_sitter::LanguageExt; /// /// let html = Html; /// let source = r#" diff --git a/crates/language/src/lib.rs b/crates/language/src/lib.rs index 721ddd6..9e92571 100644 --- a/crates/language/src/lib.rs +++ b/crates/language/src/lib.rs @@ -26,10 +26,11 @@ //! //! ```rust //! use thread_language::{SupportLang, Rust}; -//! use thread_ast_engine::{Language, LanguageExt}; +//! use thread_ast_engine::Language; +//! use thread_ast_engine::tree_sitter::LanguageExt; //! //! // Runtime language selection -//! let lang = SupportLang::from_path("main.rs").unwrap(); +//! let lang = SupportLang::from_path(std::path::Path::new("main.rs")).unwrap(); //! let tree = lang.ast_grep("fn main() {}"); //! //! // Compile-time language selection @@ -249,17 +250,16 @@ macro_rules! impl_lang { /// /// # Examples /// ```rust -/// # use thread_language::pre_process_pattern; /// // Python doesn't accept $ in identifiers, so use µ -/// let result = pre_process_pattern('µ', "def $FUNC($ARG): pass"); -/// assert_eq!(result, "def µFUNC(µARG): pass"); +/// // let result = pre_process_pattern('µ', "def $FUNC($ARG): pass"); +/// // assert_eq!(result, "def µFUNC(µARG): pass"); /// /// // No change needed -/// let result = pre_process_pattern('µ', "def hello(): pass"); -/// assert_eq!(result, "def hello(): pass"); +/// // let result = pre_process_pattern('µ', "def hello(): pass"); +/// // assert_eq!(result, "def hello(): pass"); /// ``` #[allow(dead_code)] -fn pre_process_pattern(expando: char, query: &str) -> std::borrow::Cow<'_, str> { +pub(crate) fn pre_process_pattern(expando: char, query: &str) -> std::borrow::Cow<'_, str> { // Fast path: check if any processing is needed let has_dollar = query.as_bytes().contains(&b'$'); if !has_dollar { @@ -1721,17 +1721,17 @@ pub fn from_extension(path: &Path) -> Option { } // Handle extensionless files or files with unknown extensions - if let Some(_file_name) = path.file_name().and_then(|n| n.to_str()) { + if let Some(file_name) = path.file_name().and_then(|n| n.to_str()) { // 1. Check if the full filename matches a known extension (e.g. .bashrc) #[cfg(any(feature = "bash", feature = "all-parsers"))] - if constants::BASH_EXTS.contains(&_file_name) { + if constants::BASH_EXTS.contains(&file_name) { return Some(SupportLang::Bash); } // 2. Check known extensionless file names #[cfg(any(feature = "bash", feature = "all-parsers", feature = "ruby"))] for (name, lang) in constants::LANG_RELATIONSHIPS_WITH_NO_EXTENSION { - if *name == _file_name { + if *name == file_name { return Some(*lang); } } diff --git a/crates/services/src/conversion.rs b/crates/services/src/conversion.rs index 37d65e4..4e5be78 100644 --- a/crates/services/src/conversion.rs +++ b/crates/services/src/conversion.rs @@ -332,4 +332,14 @@ mod tests { assert_eq!(info.kind, SymbolKind::Function); assert_eq!(info.position, pos); } + + #[test] + fn test_position_to_range() { + let start = Position::new(1, 0, 10); + let end = Position::new(2, 5, 25); + let range = position_to_range(start, end); + + assert_eq!(range.start, start); + assert_eq!(range.end, end); + } }