Description: Update Rust crate rustc-hash to v2 (#12001)
Index: ruff/Cargo.toml
===================================================================
--- ruff.orig/Cargo.toml
+++ ruff/Cargo.toml
@@ -34,7 +34,7 @@ path-absolutize = { version = "3.1.1" }
 proc-macro2 = { version = "1.0" }
 quote = { version = "1.0.23" }
 regex = { version = "1.7" }
-rustc-hash = { version = "1.1.0" }
+rustc-hash = { version = "2.0.0" }
 schemars = { version = "0.8" }
 serde = { version = "1.0.152", features = ["derive"] }
 serde_json = { version = "1" }
Index: ruff/crates/ruff_linter/src/rules/flake8_pytest_style/rules/parametrize.rs
===================================================================
--- ruff.orig/crates/ruff_linter/src/rules/flake8_pytest_style/rules/parametrize.rs
+++ ruff/crates/ruff_linter/src/rules/flake8_pytest_style/rules/parametrize.rs
@@ -1,6 +1,4 @@
-use std::hash::BuildHasherDefault;
-
-use rustc_hash::FxHashMap;
+use rustc_hash::{FxBuildHasher, FxHashMap};
 
 use ruff_diagnostics::{AutofixKind, Diagnostic, Edit, Fix, Violation};
 use ruff_macros::{derive_message_formats, violation};
@@ -575,7 +573,7 @@ fn check_duplicates(checker: &mut Checke
     };
 
     let mut seen: FxHashMap<ComparableExpr, usize> =
-        FxHashMap::with_capacity_and_hasher(elts.len(), BuildHasherDefault::default());
+        FxHashMap::with_capacity_and_hasher(elts.len(), FxBuildHasher);
     let mut prev = None;
     for (index, element) in elts.iter().enumerate() {
         let expr = ComparableExpr::from(element);
Index: ruff/crates/ruff_linter/src/rules/flake8_pytest_style/rules/unittest_assert.rs
===================================================================
--- ruff.orig/crates/ruff_linter/src/rules/flake8_pytest_style/rules/unittest_assert.rs
+++ ruff/crates/ruff_linter/src/rules/flake8_pytest_style/rules/unittest_assert.rs
@@ -1,11 +1,9 @@
-use std::hash::BuildHasherDefault;
-
 use anyhow::{anyhow, bail, Result};
 use ruff_python_ast::{
     self as ast, Arguments, CmpOp, Constant, Expr, ExprContext, Identifier, Keyword, Stmt, UnaryOp,
 };
 use ruff_text_size::TextRange;
-use rustc_hash::FxHashMap;
+use rustc_hash::{FxBuildHasher, FxHashMap};
 
 /// An enum to represent the different types of assertions present in the
 /// `unittest` module. Note: any variants that can't be replaced with plain
@@ -251,7 +249,7 @@ impl UnittestAssert {
         // Generate a map from argument name to value.
         let mut args_map: FxHashMap<&str, &Expr> = FxHashMap::with_capacity_and_hasher(
             args.len() + keywords.len(),
-            BuildHasherDefault::default(),
+            FxBuildHasher,
         );
 
         // Process positional arguments.
Index: ruff/crates/ruff_linter/src/rules/isort/categorize.rs
===================================================================
--- ruff.orig/crates/ruff_linter/src/rules/isort/categorize.rs
+++ ruff/crates/ruff_linter/src/rules/isort/categorize.rs
@@ -1,10 +1,9 @@
 use std::collections::BTreeMap;
-use std::hash::BuildHasherDefault;
 use std::path::{Path, PathBuf};
 use std::{fs, iter};
 
 use log::debug;
-use rustc_hash::{FxHashMap, FxHashSet};
+use rustc_hash::{FxBuildHasher, FxHashMap, FxHashSet};
 use serde::{Deserialize, Serialize};
 use strum_macros::EnumIter;
 
@@ -261,7 +260,7 @@ impl KnownModules {
 
         // Warn in the case of duplicate modules.
         let mut seen =
-            FxHashSet::with_capacity_and_hasher(known.len(), BuildHasherDefault::default());
+            FxHashSet::with_capacity_and_hasher(known.len(), FxBuildHasher);
         for (module, _) in &known {
             if !seen.insert(module) {
                 warn_user_once!("One or more modules are part of multiple import sections, including: `{module}`");
Index: ruff/crates/ruff_linter/src/rules/pyflakes/rules/repeated_keys.rs
===================================================================
--- ruff.orig/crates/ruff_linter/src/rules/pyflakes/rules/repeated_keys.rs
+++ ruff/crates/ruff_linter/src/rules/pyflakes/rules/repeated_keys.rs
@@ -1,6 +1,4 @@
-use std::hash::BuildHasherDefault;
-
-use rustc_hash::{FxHashMap, FxHashSet};
+use rustc_hash::{FxBuildHasher, FxHashMap, FxHashSet};
 
 use ruff_diagnostics::{AutofixKind, Diagnostic, Edit, Fix, Violation};
 use ruff_macros::{derive_message_formats, violation};
@@ -132,7 +130,7 @@ impl Violation for MultiValueRepeatedKey
 pub(crate) fn repeated_keys(checker: &mut Checker, dict: &ast::ExprDict) {
     // Generate a map from key to (index, value).
     let mut seen: FxHashMap<ComparableExpr, FxHashSet<ComparableExpr>> =
-        FxHashMap::with_capacity_and_hasher(dict.keys.len(), BuildHasherDefault::default());
+        FxHashMap::with_capacity_and_hasher(dict.keys.len(), FxBuildHasher);
 
     // Detect duplicate keys.
     for (i, (key, value)) in dict.keys.iter().zip(dict.values.iter()).enumerate() {
Index: ruff/crates/ruff_linter/src/rules/pylint/rules/duplicate_bases.rs
===================================================================
--- ruff.orig/crates/ruff_linter/src/rules/pylint/rules/duplicate_bases.rs
+++ ruff/crates/ruff_linter/src/rules/pylint/rules/duplicate_bases.rs
@@ -1,7 +1,5 @@
-use std::hash::BuildHasherDefault;
-
 use ruff_python_ast::{self as ast, Arguments, Expr};
-use rustc_hash::FxHashSet;
+use rustc_hash::{FxBuildHasher, FxHashSet};
 
 use ruff_diagnostics::{Diagnostic, Violation};
 use ruff_macros::{derive_message_formats, violation};
@@ -58,7 +56,7 @@ pub(crate) fn duplicate_bases(checker: &
     };
 
     let mut seen: FxHashSet<&str> =
-        FxHashSet::with_capacity_and_hasher(bases.len(), BuildHasherDefault::default());
+        FxHashSet::with_capacity_and_hasher(bases.len(), FxBuildHasher);
     for base in bases {
         if let Expr::Name(ast::ExprName { id, .. }) = base {
             if !seen.insert(id) {
Index: ruff/crates/ruff_linter/src/rules/pylint/rules/repeated_equality_comparison.rs
===================================================================
--- ruff.orig/crates/ruff_linter/src/rules/pylint/rules/repeated_equality_comparison.rs
+++ ruff/crates/ruff_linter/src/rules/pylint/rules/repeated_equality_comparison.rs
@@ -1,8 +1,7 @@
-use std::hash::BuildHasherDefault;
 use std::ops::Deref;
 
 use itertools::{any, Itertools};
-use rustc_hash::FxHashMap;
+use rustc_hash::{FxBuildHasher, FxHashMap};
 
 use ruff_diagnostics::{Diagnostic, Violation};
 use ruff_macros::{derive_message_formats, violation};
@@ -78,7 +77,7 @@ pub(crate) fn repeated_equality_comparis
     let mut value_to_comparators: FxHashMap<HashableExpr, (TextSize, Vec<&Expr>)> =
         FxHashMap::with_capacity_and_hasher(
             bool_op.values.len() * 2,
-            BuildHasherDefault::default(),
+            FxBuildHasher,
         );
 
     for value in &bool_op.values {
Index: ruff/crates/ruff_python_parser/src/function.rs
===================================================================
--- ruff.orig/crates/ruff_python_parser/src/function.rs
+++ ruff/crates/ruff_python_parser/src/function.rs
@@ -1,10 +1,9 @@
-use std::hash::BuildHasherDefault;
 // Contains functions that perform validation and parsing of arguments and parameters.
 // Checks apply both to functions and to lambdas.
 use crate::lexer::{LexicalError, LexicalErrorType};
 use ruff_python_ast::{self as ast};
 use ruff_text_size::{Ranged, TextRange, TextSize};
-use rustc_hash::FxHashSet;
+use rustc_hash::{FxBuildHasher, FxHashSet};
 
 pub(crate) struct ArgumentList {
     pub(crate) args: Vec<ast::Expr>,
@@ -19,7 +18,7 @@ pub(crate) fn validate_arguments(argumen
             + usize::from(arguments.vararg.is_some())
             + arguments.kwonlyargs.len()
             + usize::from(arguments.kwarg.is_some()),
-        BuildHasherDefault::default(),
+        FxBuildHasher,
     );
 
     let posonlyargs = arguments.posonlyargs.iter();
@@ -86,7 +85,7 @@ pub(crate) fn parse_arguments(
 
     let mut keyword_names = FxHashSet::with_capacity_and_hasher(
         function_arguments.len(),
-        BuildHasherDefault::default(),
+        FxBuildHasher,
     );
     let mut double_starred = false;
     for (name, value) in function_arguments {
Index: ruff/crates/ruff_workspace/src/options.rs
===================================================================
--- ruff.orig/crates/ruff_workspace/src/options.rs
+++ ruff/crates/ruff_workspace/src/options.rs
@@ -1,9 +1,8 @@
 use std::collections::BTreeSet;
-use std::hash::BuildHasherDefault;
 
 use regex::Regex;
 use ruff_formatter::IndentStyle;
-use rustc_hash::{FxHashMap, FxHashSet};
+use rustc_hash::{FxBuildHasher, FxHashMap, FxHashSet};
 use serde::{Deserialize, Serialize};
 use strum::IntoEnumIterator;
 
@@ -1930,7 +1929,7 @@ impl IsortOptions {
 
         // Verify that `section_order` doesn't contain any duplicates.
         let mut seen =
-            FxHashSet::with_capacity_and_hasher(section_order.len(), BuildHasherDefault::default());
+            FxHashSet::with_capacity_and_hasher(section_order.len(), FxBuildHasher);
         for section in &section_order {
             if !seen.insert(section) {
                 warn_user_once!(
