aboutsummaryrefslogtreecommitdiff
path: root/mingling_cli/src/linter/registry.rs
diff options
context:
space:
mode:
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..79f3225
--- /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 ResLintRegistry {
+ 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(ResLintRegistry::lazy_init(|| {
+ let registry: ResLintRegistry = serde_json::from_str(include_str!("../../registry.json"))
+ .expect("failed to parse embedded registry.json");
+ registry
+ }));
+}