aboutsummaryrefslogtreecommitdiff
path: root/mingling_cli/tmpls/lints.tmpl
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-07-21 15:10:38 +0800
committer魏曹先生 <1992414357@qq.com>2026-07-21 15:12:52 +0800
commit9976b31a56bcc3ed37ac878b351bd8d097dc67cc (patch)
treee7b092aee5e82f5d4c1f50332a17f1d2176ae51b /mingling_cli/tmpls/lints.tmpl
parentee01756279ef17487d19659adedc0639547bbd25 (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.tmpl56
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>>>;
+@@@ <<<