aboutsummaryrefslogtreecommitdiff
path: root/mingling_cli/src/linter/registry.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-08-06 17:23:34 +0800
committer魏曹先生 <1992414357@qq.com>2026-08-09 02:56:28 +0800
commitf191aeb3b7e783c781a6d9256a8d5609aea69e7f (patch)
treec7bb78f59ed488582b41049f2b6ccffaac52a8f2 /mingling_cli/src/linter/registry.rs
parent5d741c3e32edf7c2667efbbc20d64fed8f4804f3 (diff)
feat(linter): refactor lint registry into program resource
Extract lint registry loading from cmd_explain into a shared program-level resource initialized via setup.
Diffstat (limited to 'mingling_cli/src/linter/registry.rs')
-rw-r--r--mingling_cli/src/linter/registry.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/mingling_cli/src/linter/registry.rs b/mingling_cli/src/linter/registry.rs
new file mode 100644
index 0000000..5241c29
--- /dev/null
+++ b/mingling_cli/src/linter/registry.rs
@@ -0,0 +1,33 @@
+use mingling::{LazyInit, Program, macros::program_setup};
+use serde::Deserialize;
+
+use crate::ThisProgram;
+
+#[derive(Debug, Default, Clone, Deserialize)]
+pub struct LintRegistry {
+ pub lints: Vec<LintEntry>,
+}
+
+#[derive(Debug, Clone, Deserialize)]
+pub struct LintEntry {
+ pub name: String,
+ pub title: String,
+ pub summary: String,
+ pub metadata: LintMetadata,
+}
+
+#[derive(Debug, Clone, Deserialize)]
+pub struct LintMetadata {
+ pub active_on: String,
+ pub author: String,
+ pub default: String,
+}
+
+#[program_setup]
+pub fn lint_registry_setup(p: &mut Program<ThisProgram>) {
+ p.with_resource(LintRegistry::lazy_init(|| {
+ let registry: LintRegistry = serde_json::from_str(include_str!("../../registry.json"))
+ .expect("failed to parse embedded registry.json");
+ registry
+ }));
+}