From ff720555587eca6358fda7154760dc6c2072e653 Mon Sep 17 00:00:00 2001 From: Micha Reiser Date: Fri, 18 Oct 2024 14:08:15 +0200 Subject: [PATCH] Upgrade to Rust 1.82 toolchain (#13808) --- .github/workflows/ci.yaml | 2 +- .github/workflows/publish-playground.yml | 2 +- .github/workflows/publish-wasm.yml | 2 +- crates/red_knot_server/src/server.rs | 2 + .../rules/printf_string_formatting.rs | 53 +++++++++---------- crates/ruff_macros/src/cache_key.rs | 11 ++-- crates/ruff_macros/src/map_codes.rs | 14 ++--- crates/ruff_macros/src/rule_code_prefix.rs | 7 +-- .../src/pattern/pattern_match_star.rs | 7 +-- crates/ruff_server/src/server.rs | 2 + rust-toolchain.toml | 2 +- 11 files changed, 54 insertions(+), 50 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1b44b470a6..a7d5797065 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -193,7 +193,7 @@ jobs: run: rustup target add wasm32-unknown-unknown - uses: actions/setup-node@v4 with: - node-version: 18 + node-version: 20 cache: "npm" cache-dependency-path: playground/package-lock.json - uses: jetli/wasm-pack-action@v0.4.0 diff --git a/.github/workflows/publish-playground.yml b/.github/workflows/publish-playground.yml index 67d18688ad..3c251b419b 100644 --- a/.github/workflows/publish-playground.yml +++ b/.github/workflows/publish-playground.yml @@ -29,7 +29,7 @@ jobs: run: rustup target add wasm32-unknown-unknown - uses: actions/setup-node@v4 with: - node-version: 18 + node-version: 20 cache: "npm" cache-dependency-path: playground/package-lock.json - uses: jetli/wasm-pack-action@v0.4.0 diff --git a/.github/workflows/publish-wasm.yml b/.github/workflows/publish-wasm.yml index 2cab1a873c..c33406f118 100644 --- a/.github/workflows/publish-wasm.yml +++ b/.github/workflows/publish-wasm.yml @@ -43,7 +43,7 @@ jobs: - run: cp LICENSE crates/ruff_wasm/pkg # wasm-pack does not put the LICENSE file in the pkg - uses: actions/setup-node@v4 with: - node-version: 18 + node-version: 20 registry-url: "https://registry.npmjs.org" - name: "Publish (dry-run)" if: ${{ inputs.plan == '' || fromJson(inputs.plan).announcement_tag_is_implicit }} diff --git a/crates/red_knot_server/src/server.rs b/crates/red_knot_server/src/server.rs index 5f198cbb42..eca1eedfd0 100644 --- a/crates/red_knot_server/src/server.rs +++ b/crates/red_knot_server/src/server.rs @@ -1,6 +1,7 @@ //! Scheduling, I/O, and API endpoints. use std::num::NonZeroUsize; +#[allow(deprecated)] use std::panic::PanicInfo; use lsp_server::Message; @@ -119,6 +120,7 @@ impl Server { } pub(crate) fn run(self) -> crate::Result<()> { + #[allow(deprecated)] type PanicHook = Box) + 'static + Sync + Send>; struct RestorePanicHook { hook: Option, diff --git a/crates/ruff_linter/src/rules/pyupgrade/rules/printf_string_formatting.rs b/crates/ruff_linter/src/rules/pyupgrade/rules/printf_string_formatting.rs index 48e6a85aae..2c66fd26f1 100644 --- a/crates/ruff_linter/src/rules/pyupgrade/rules/printf_string_formatting.rs +++ b/crates/ruff_linter/src/rules/pyupgrade/rules/printf_string_formatting.rs @@ -235,38 +235,35 @@ fn clean_params_dictionary(right: &Expr, locator: &Locator, stylist: &Stylist) - let mut seen: Vec<&str> = vec![]; let mut indent = None; for ast::DictItem { key, value } in items { - match key { - Some(key) => { - if let Expr::StringLiteral(ast::ExprStringLiteral { - value: key_string, .. - }) = key - { - // If the dictionary key is not a valid variable name, abort. - if !is_identifier(key_string.to_str()) { - return None; - } - // If there are multiple entries of the same key, abort. - if seen.contains(&key_string.to_str()) { - return None; - } - seen.push(key_string.to_str()); - if is_multi_line { - if indent.is_none() { - indent = indentation(locator, key); - } - } - - let value_string = locator.slice(value); - arguments.push(format!("{key_string}={value_string}")); - } else { - // If there are any non-string keys, abort. + if let Some(key) = key { + if let Expr::StringLiteral(ast::ExprStringLiteral { + value: key_string, .. + }) = key + { + // If the dictionary key is not a valid variable name, abort. + if !is_identifier(key_string.to_str()) { return None; } - } - None => { + // If there are multiple entries of the same key, abort. + if seen.contains(&key_string.to_str()) { + return None; + } + seen.push(key_string.to_str()); + if is_multi_line { + if indent.is_none() { + indent = indentation(locator, key); + } + } + let value_string = locator.slice(value); - arguments.push(format!("**{value_string}")); + arguments.push(format!("{key_string}={value_string}")); + } else { + // If there are any non-string keys, abort. + return None; } + } else { + let value_string = locator.slice(value); + arguments.push(format!("**{value_string}")); } } // If we couldn't parse out key values, abort. diff --git a/crates/ruff_macros/src/cache_key.rs b/crates/ruff_macros/src/cache_key.rs index 6519982950..65418ac4aa 100644 --- a/crates/ruff_macros/src/cache_key.rs +++ b/crates/ruff_macros/src/cache_key.rs @@ -75,12 +75,11 @@ pub(crate) fn derive_cache_key(item: &DeriveInput) -> syn::Result { } } - let field_attr = match &field.ident { - Some(ident) => quote!(self.#ident), - None => { - let index = syn::Index::from(i); - quote!(self.#index) - } + let field_attr = if let Some(ident) = &field.ident { + quote!(self.#ident) + } else { + let index = syn::Index::from(i); + quote!(self.#index) }; fields.push(quote!(#field_attr.cache_key(key);)); diff --git a/crates/ruff_macros/src/map_codes.rs b/crates/ruff_macros/src/map_codes.rs index b1534a4bcb..49cdf56069 100644 --- a/crates/ruff_macros/src/map_codes.rs +++ b/crates/ruff_macros/src/map_codes.rs @@ -143,9 +143,10 @@ pub(crate) fn map_codes(func: &ItemFn) -> syn::Result { for (prefix, rules) in &rules_by_prefix { let prefix_ident = get_prefix_ident(prefix); let attrs = intersection_all(rules.iter().map(|(.., attrs)| attrs.as_slice())); - let attrs = match attrs.as_slice() { - [] => quote!(), - [..] => quote!(#(#attrs)*), + let attrs = if attrs.is_empty() { + quote!() + } else { + quote!(#(#attrs)*) }; all_codes.push(quote! { #attrs Self::#linter(#linter::#prefix_ident) @@ -161,9 +162,10 @@ pub(crate) fn map_codes(func: &ItemFn) -> syn::Result { }); let prefix_ident = get_prefix_ident(&prefix); let attrs = intersection_all(rules.iter().map(|(.., attrs)| attrs.as_slice())); - let attrs = match attrs.as_slice() { - [] => quote!(), - [..] => quote!(#(#attrs)*), + let attrs = if attrs.is_empty() { + quote!() + } else { + quote!(#(#attrs)*) }; prefix_into_iter_match_arms.extend(quote! { #attrs #linter::#prefix_ident => vec![#(#rule_paths,)*].into_iter(), diff --git a/crates/ruff_macros/src/rule_code_prefix.rs b/crates/ruff_macros/src/rule_code_prefix.rs index 04d9f9b1fa..489718cd68 100644 --- a/crates/ruff_macros/src/rule_code_prefix.rs +++ b/crates/ruff_macros/src/rule_code_prefix.rs @@ -90,9 +90,10 @@ fn attributes_for_prefix( attributes: &BTreeMap, ) -> proc_macro2::TokenStream { let attrs = intersection_all(codes.iter().map(|code| attributes[code])); - match attrs.as_slice() { - [] => quote!(), - [..] => quote!(#(#attrs)*), + if attrs.is_empty() { + quote!() + } else { + quote!(#(#attrs)*) } } diff --git a/crates/ruff_python_formatter/src/pattern/pattern_match_star.rs b/crates/ruff_python_formatter/src/pattern/pattern_match_star.rs index 515f6b60ca..ba06c45057 100644 --- a/crates/ruff_python_formatter/src/pattern/pattern_match_star.rs +++ b/crates/ruff_python_formatter/src/pattern/pattern_match_star.rs @@ -18,9 +18,10 @@ impl FormatNodeRule for FormatPatternMatchStar { write!(f, [token("*"), dangling_comments(dangling)])?; - match name { - Some(name) => write!(f, [name.format()]), - None => write!(f, [token("_")]), + if let Some(name) = name { + write!(f, [name.format()]) + } else { + write!(f, [token("_")]) } } } diff --git a/crates/ruff_server/src/server.rs b/crates/ruff_server/src/server.rs index 2674e76a04..67d049ccae 100644 --- a/crates/ruff_server/src/server.rs +++ b/crates/ruff_server/src/server.rs @@ -6,6 +6,7 @@ use lsp_types::InitializeParams; use lsp_types::WorkspaceFolder; use std::num::NonZeroUsize; use std::ops::Deref; +#[allow(deprecated)] use std::panic::PanicInfo; use std::str::FromStr; use thiserror::Error; @@ -125,6 +126,7 @@ impl Server { } pub fn run(self) -> crate::Result<()> { + #[allow(deprecated)] type PanicHook = Box) + 'static + Sync + Send>; struct RestorePanicHook { hook: Option, diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 4cef0b738f..76fcadb5b3 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.81" +channel = "1.82"