Skip to content

Commit

Permalink
feat: duplicated bevy version lint
Browse files Browse the repository at this point in the history
  • Loading branch information
DaAlbrecht committed Nov 28, 2024
1 parent 458e416 commit 8d8b851
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 0 deletions.
38 changes: 38 additions & 0 deletions bevy_lint/src/lints/duplicate_bevy_dependencies.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
//! Checks for multiple versions of `bevy` in the dependencies.
//!
//! # Motivation
//!
//! When different third party crates use incompatible versions of Bevy, it can lead to confusing
//! errors and type incompatibilities.
use crate::declare_bevy_lint;
use clippy_utils::{diagnostics::span_lint, find_crates};
use rustc_lint::{LateContext, LateLintPass};
use rustc_session::declare_lint_pass;
use rustc_span::Symbol;

declare_bevy_lint! {
pub DUPLICATE_BEVY_DEPENDENCIES,
CORRECTNESS,
"duplicate bevy dependencies",
}

declare_lint_pass! {
DuplicateBevyDependencies => [DUPLICATE_BEVY_DEPENDENCIES.lint]
}

impl<'tcx> LateLintPass<'tcx> for DuplicateBevyDependencies {
fn check_crate(&mut self, cx: &LateContext<'tcx>) {
let bevy_crates = find_crates(cx.tcx, Symbol::intern("bevy"));

if bevy_crates.len() > 1 {
let span = cx.tcx.def_span(bevy_crates[1].def_id());
span_lint(
cx,
DUPLICATE_BEVY_DEPENDENCIES.lint,
span,
"Multiple versions of `bevy` found",
);
}
}
}
3 changes: 3 additions & 0 deletions bevy_lint/src/lints/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use crate::lint::BevyLint;
use rustc_lint::{Lint, LintStore};

pub mod duplicate_bevy_dependencies;
pub mod insert_event_resource;
pub mod main_return_without_appexit;
pub mod missing_reflect;
Expand All @@ -22,6 +23,7 @@ pub(crate) static LINTS: &[&BevyLint] = &[
panicking_methods::PANICKING_WORLD_METHODS,
plugin_not_ending_in_plugin::PLUGIN_NOT_ENDING_IN_PLUGIN,
zst_query::ZST_QUERY,
duplicate_bevy_dependencies::DUPLICATE_BEVY_DEPENDENCIES,
];

pub(crate) fn register_lints(store: &mut LintStore) {
Expand All @@ -36,4 +38,5 @@ pub(crate) fn register_passes(store: &mut LintStore) {
store.register_late_pass(|_| Box::new(panicking_methods::PanickingMethods));
store.register_late_pass(|_| Box::new(plugin_not_ending_in_plugin::PluginNotEndingInPlugin));
store.register_late_pass(|_| Box::new(zst_query::ZstQuery));
store.register_late_pass(|_| Box::new(duplicate_bevy_dependencies::DuplicateBevyDependencies));
}

0 comments on commit 8d8b851

Please sign in to comment.