F401 use BTreeMap instead of FxHashMap (#11621)

* Potentially resolves #11619 (nondeterministic hashmap order across
different architectures) in F401 by replacing a hashmap with
nondeterministic traversal order with an ordered mapping.

I'm not sure how to test this with our CI/CD. I don't have an s390x
machine at home. Should I try it in Qemu?
This commit is contained in:
plredmond 2024-05-30 10:54:46 -07:00 committed by GitHub
parent 3aa7e35a4c
commit dcabd04caf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 4 additions and 4 deletions

View file

@ -2,7 +2,7 @@ use std::borrow::Cow;
use std::iter; use std::iter;
use anyhow::{anyhow, bail, Result}; use anyhow::{anyhow, bail, Result};
use rustc_hash::FxHashMap; use std::collections::BTreeMap;
use ruff_diagnostics::{Applicability, Diagnostic, Fix, FixAvailability, Violation}; use ruff_diagnostics::{Applicability, Diagnostic, Fix, FixAvailability, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
@ -220,8 +220,8 @@ fn find_dunder_all_exprs<'a>(semantic: &'a SemanticModel) -> Vec<&'a ast::Expr>
/// ///
pub(crate) fn unused_import(checker: &Checker, scope: &Scope, diagnostics: &mut Vec<Diagnostic>) { pub(crate) fn unused_import(checker: &Checker, scope: &Scope, diagnostics: &mut Vec<Diagnostic>) {
// Collect all unused imports by statement. // Collect all unused imports by statement.
let mut unused: FxHashMap<(NodeId, Exceptions), Vec<ImportBinding>> = FxHashMap::default(); let mut unused: BTreeMap<(NodeId, Exceptions), Vec<ImportBinding>> = BTreeMap::default();
let mut ignored: FxHashMap<(NodeId, Exceptions), Vec<ImportBinding>> = FxHashMap::default(); let mut ignored: BTreeMap<(NodeId, Exceptions), Vec<ImportBinding>> = BTreeMap::default();
for binding_id in scope.binding_ids() { for binding_id in scope.binding_ids() {
let binding = checker.semantic().binding(binding_id); let binding = checker.semantic().binding(binding_id);

View file

@ -565,7 +565,7 @@ pub enum BindingKind<'a> {
} }
bitflags! { bitflags! {
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] #[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub struct Exceptions: u8 { pub struct Exceptions: u8 {
const NAME_ERROR = 0b0000_0001; const NAME_ERROR = 0b0000_0001;
const MODULE_NOT_FOUND_ERROR = 0b0000_0010; const MODULE_NOT_FOUND_ERROR = 0b0000_0010;