Skip to main content

perl_lsp_diagnostics/
lib.rs

1//! LSP diagnostics provider for Perl
2//!
3//! This crate provides diagnostic generation and linting functionality for Perl code.
4//!
5//! ## Features
6//!
7//! - Diagnostic generation from AST
8//! - Linting for common mistakes
9//! - Deprecated feature detection
10//! - Strict warnings
11//! - Security anti-pattern detection
12//!
13//! ## Usage
14//!
15//! ```rust,ignore
16//! use perl_lsp_diagnostics::DiagnosticsProvider;
17//!
18//! let provider = DiagnosticsProvider::new();
19//! let diagnostics = provider.generate_diagnostics(&ast, source, Some(&workspace_index))?;
20//! ```
21
22#![deny(unsafe_code)]
23#![warn(rust_2018_idioms)]
24#![warn(missing_docs)]
25#![warn(clippy::all)]
26
27/// Dead code detection
28#[cfg(not(target_arch = "wasm32"))]
29mod dead_code;
30/// Diagnostic deduplication utilities
31mod dedup;
32/// Core diagnostics provider
33mod diagnostics;
34/// ERROR node classification and reporting
35mod error_nodes;
36/// Heredoc anti-pattern detection
37mod heredoc_antipatterns;
38/// Lint checks (common mistakes, deprecations, strict warnings, security)
39mod lints;
40/// Parse error to diagnostic conversion
41mod parse_errors;
42/// Scope analysis integration
43mod scope;
44/// AST walker utilities
45mod walker;
46
47pub use diagnostics::DiagnosticsProvider;
48pub use heredoc_antipatterns::detect_heredoc_antipatterns;
49pub use perl_lsp_diagnostic_types::{
50    Diagnostic, DiagnosticSeverity, DiagnosticTag, RelatedInformation,
51};
52
53// Re-export lint checks from the lints module
54pub use lints::common_mistakes;
55pub use lints::deprecated;
56pub use lints::missing_module;
57pub use lints::package_subroutine;
58pub use lints::security;
59pub use lints::strict_warnings;
60pub use lints::unreachable_code;
61pub use lints::unused_imports;
62pub use lints::version_compat;
63
64// Re-export dead code detection (when not targeting WASM)
65#[cfg(not(target_arch = "wasm32"))]
66pub use dead_code::detect_dead_code;