diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-07-21 15:10:38 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-07-21 15:12:52 +0800 |
| commit | 9976b31a56bcc3ed37ac878b351bd8d097dc67cc (patch) | |
| tree | e7b092aee5e82f5d4c1f50332a17f1d2176ae51b /mingling_cli/tmpls/lints.tmpl | |
| parent | ee01756279ef17487d19659adedc0639547bbd25 (diff) | |
feat(mling): add linter framework with async support and registry
generation
Diffstat (limited to 'mingling_cli/tmpls/lints.tmpl')
| -rw-r--r-- | mingling_cli/tmpls/lints.tmpl | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/mingling_cli/tmpls/lints.tmpl b/mingling_cli/tmpls/lints.tmpl new file mode 100644 index 0000000..7507f98 --- /dev/null +++ b/mingling_cli/tmpls/lints.tmpl @@ -0,0 +1,56 @@ +#![allow(unused)] +use crate::linter::mlint_report::{MlintLevel, MlintReport}; + +>>>>>>>>>> impls; + +/// Run all registered lints on a parsed file with its source text. +pub fn run_all_lints(file: &syn::File, source: &str) -> Vec<MlintReport> { + use crate::linter::mlint_attr::{get_mlint_override, MlintLevelOverride}; + let mut reports = vec![]; + for item in &file.items { + if let syn::Item::Fn(f) = item { +>>>>>>>>>> calls; + +@@@ >>> calls + // Check item-level #[mlint(allow/warn/deny(<<<name>>>))] + let skip = get_mlint_override(&f.attrs, "<<<name>>>") == Some(MlintLevelOverride::Allow); + if !skip { + let mut rs = <<<name>>>::linter(f.clone(), source); + // Apply deny override at item level + if get_mlint_override(&f.attrs, "<<<name>>>") == Some(MlintLevelOverride::Deny) { + for r in &mut rs { r.level = MlintLevel::Error; } + } + reports.extend(rs); + } +@@@ <<< + } + } + // Apply file-level #![mlint(allow/warn/deny(...))] overrides + for r in &mut reports { + let name = &r.lint_code; + if let Some(override_level) = get_mlint_override(&file.attrs, name) { + match override_level { + MlintLevelOverride::Allow => { + // remove by marking; filtered below + r.level = MlintLevel::Help; // sentinel: filtered out + } + MlintLevelOverride::Deny => { + r.level = MlintLevel::Error; + } + MlintLevelOverride::Warn => { + if r.level != MlintLevel::Error { + r.level = MlintLevel::Warning; + } + } + } + } + } + // Remove allowed reports (sentinel = Help) + reports.retain(|r| r.level != MlintLevel::Help); + reports +} + +@@@ >>> impls +mod <<<mod_name>>>; +pub use <<<mod_name>>>::linter as <<<mod_name>>>; +@@@ <<< |
