mirror of
https://github.com/danbulant/oxc
synced 2026-05-25 12:51:57 +00:00
60 lines
1.8 KiB
Rust
60 lines
1.8 KiB
Rust
use syn::parse_macro_input;
|
|
|
|
mod declare_all_lint_rules;
|
|
mod declare_oxc_lint;
|
|
|
|
/// Macro used to declare an oxc lint rule
|
|
///
|
|
/// Every lint declaration consists of 2 parts:
|
|
///
|
|
/// 1. The documentation
|
|
/// 2. The lint's struct
|
|
///
|
|
/// # Example
|
|
///
|
|
/// ```
|
|
/// use oxc_macros::declare_oxc_lint;
|
|
///
|
|
/// declare_oxc_lint! {
|
|
/// /// ### What it does
|
|
/// /// Checks for usage of the `debugger` statement
|
|
/// ///
|
|
/// /// ### Why is this bad?
|
|
/// /// `debugger` statements do not affect functionality when a debugger isn't attached.
|
|
/// /// They're most commonly an accidental debugging leftover.
|
|
/// ///
|
|
/// ///
|
|
/// /// ### Example
|
|
/// /// ```javascript
|
|
/// /// const data = await getData();
|
|
/// /// const result = complexCalculation(data);
|
|
/// /// debugger;
|
|
/// /// ```
|
|
/// ///
|
|
/// /// ```
|
|
/// pub struct NoDebugger
|
|
/// }
|
|
/// ```
|
|
#[proc_macro]
|
|
pub fn declare_oxc_lint(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
|
|
let metadata = parse_macro_input!(input as declare_oxc_lint::LintRuleMeta);
|
|
|
|
declare_oxc_lint::declare_oxc_lint(metadata).into()
|
|
}
|
|
|
|
/// Same as `declare_oxc_lint`, but doesn't do imports.
|
|
/// Enables multiple usages in a single file.
|
|
#[proc_macro]
|
|
pub fn declare_oxc_lint_test(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
|
|
let mut metadata = parse_macro_input!(input as declare_oxc_lint::LintRuleMeta);
|
|
metadata.used_in_test = true;
|
|
|
|
declare_oxc_lint::declare_oxc_lint(metadata).into()
|
|
}
|
|
|
|
#[proc_macro]
|
|
pub fn declare_all_lint_rules(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
|
|
let metadata = parse_macro_input!(input as declare_all_lint_rules::AllLintRulesMeta);
|
|
|
|
declare_all_lint_rules::declare_all_lint_rules(metadata).into()
|
|
}
|