Skip to main content

cairo_lint/
plugin.rs

1use cairo_lang_defs::ids::ModuleId;
2use cairo_lang_defs::plugin::PluginDiagnostic;
3use cairo_lang_semantic::plugin::{AnalyzerPlugin, PluginSuite};
4use salsa::Database;
5
6use crate::context::get_unique_allowed_names;
7
8pub fn cairo_lint_allow_plugin_suite() -> PluginSuite {
9    let mut suite = PluginSuite::default();
10    suite.add_analyzer_plugin::<CairoLintAllow>();
11    suite
12}
13
14/// Plugin with `declared_allows` that does not emit diagnostics.
15/// Add it to avoid compiler warnings on unsupported `allow` attribute arguments.
16#[derive(Debug, Default)]
17pub struct CairoLintAllow;
18
19impl AnalyzerPlugin for CairoLintAllow {
20    fn diagnostics<'db>(
21        &self,
22        _db: &'db dyn Database,
23        _module_id: ModuleId<'db>,
24    ) -> Vec<PluginDiagnostic<'db>> {
25        Vec::new()
26    }
27
28    fn declared_allows(&self) -> Vec<String> {
29        get_unique_allowed_names()
30            .iter()
31            .map(ToString::to_string)
32            .collect()
33    }
34}