mirror of
https://github.com/l0ng-ai/openidea.git
synced 2026-11-07 00:07:29 +00:00
37 lines
1.4 KiB
Rust
37 lines
1.4 KiB
Rust
//! Project-wide analyses over syntax trees.
|
|
//!
|
|
//! * [`duplicates`]: Locate Duplicates — token-based clone detection in the
|
|
//! style of PMD's CPD (tree-sitter leaves as tokens, optional anonymisation
|
|
//! of identifiers and literals, rolling hashes over token windows).
|
|
//! * [`structural`]: Search / Replace Structurally — code patterns with
|
|
//! `$VAR$` placeholders matched against syntax trees (ast-grep's matcher on
|
|
//! the bundled grammars).
|
|
//!
|
|
//! Both work on whole files supplied by the caller (unsaved buffers first),
|
|
//! run on rayon and honour a [`CancellationToken`]: call them from a blocking
|
|
//! thread. Positions are 0-based lines and UTF-16 columns.
|
|
|
|
pub mod duplicates;
|
|
mod lines;
|
|
pub mod structural;
|
|
|
|
pub use duplicates::{DuplicateGroup, DuplicateOptions, DuplicatesReport, Fragment, find_duplicates};
|
|
pub use structural::{
|
|
StructuralFile, StructuralMatch, StructuralQuery, StructuralSummary, normalize_placeholders, search_structurally,
|
|
validate_structural,
|
|
};
|
|
|
|
use ide_core::LanguageId;
|
|
use std::path::{Path, PathBuf};
|
|
|
|
/// A file to analyse: its project-relative path and a way to read it.
|
|
#[derive(Clone, Debug)]
|
|
pub struct SourceFile {
|
|
pub path: PathBuf,
|
|
pub rel_path: String,
|
|
}
|
|
|
|
/// Reads a file for analysis: its language and current text (the unsaved
|
|
/// buffer when open). `None` skips the file (binary, unreadable, too large).
|
|
pub type Loader<'a> = &'a (dyn Fn(&Path) -> Option<(LanguageId, String)> + Sync);
|