bump the rust toolchain to 1.83.0 (#15148)

# Description

This PR bumps the rust toolchain to 1.83.0 and fixes a clippy lint. We
do this because Rust 1.85.0 was released today, and we try and stay 2
versions behind.

# User-Facing Changes
<!-- List of all changes that impact the user experience here. This
helps us keep track of breaking changes. -->

# Tests + Formatting
<!--
Don't forget to add tests that cover your changes.

Make sure you've run and fixed any issues with these commands:

- `cargo fmt --all -- --check` to check standard code formatting (`cargo
fmt --all` applies these changes)
- `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used` to
check that you're using the standard code style
- `cargo test --workspace` to check that all tests pass (on Windows make
sure to [enable developer
mode](https://learn.microsoft.com/en-us/windows/apps/get-started/developer-mode-features-and-debugging))
- `cargo run -- -c "use toolkit.nu; toolkit test stdlib"` to run the
tests for the standard library

> **Note**
> from `nushell` you can also use the `toolkit` as follows
> ```bash
> use toolkit.nu # or use an `env_change` hook to activate it
automatically
> toolkit check pr
> ```
-->

# After Submitting
<!-- If your PR had any user-facing changes, update [the
documentation](https://github.com/nushell/nushell.github.io) after the
PR is merged, if necessary. This will help us keep the docs up to date.
-->
This commit is contained in:
Darren Schroeder 2025-02-20 16:34:09 -06:00 committed by GitHub
parent 4a967d19a9
commit 2f6b4c5e9b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 22 additions and 26 deletions

View File

@ -10,7 +10,7 @@ homepage = "https://www.nushell.sh"
license = "MIT"
name = "nu"
repository = "https://github.com/nushell/nushell"
rust-version = "1.82.0"
rust-version = "1.83.0"
version = "0.102.1"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

View File

@ -77,7 +77,9 @@ impl Command for Cd {
if let Ok(path) = nu_path::canonicalize_with(path_no_whitespace, &cwd) {
if !path.is_dir() {
return Err(shell_error::io::IoError::new(
shell_error::io::ErrorKind::NotADirectory,
shell_error::io::ErrorKind::Std(
std::io::ErrorKind::NotADirectory,
),
v.span,
None,
)
@ -104,7 +106,7 @@ impl Command for Cd {
};
if !path.is_dir() {
return Err(shell_error::io::IoError::new(
shell_error::io::ErrorKind::NotADirectory,
shell_error::io::ErrorKind::Std(std::io::ErrorKind::NotADirectory),
v.span,
path,
)

View File

@ -151,7 +151,7 @@ impl Command for Open {
// At least under windows this check ensures that we don't get a
// permission denied error on directories
return Err(ShellError::Io(IoError::new(
shell_error::io::ErrorKind::IsADirectory,
shell_error::io::ErrorKind::Std(std::io::ErrorKind::IsADirectory),
arg_span,
PathBuf::from(path),
)));

View File

@ -424,7 +424,9 @@ fn open_file(path: &Path, span: Span, append: bool) -> Result<File, ShellError>
// A TOCTOU problem exists here, which may cause wrong error message to be shown
#[cfg(target_os = "windows")]
if path.is_dir() {
Err(nu_protocol::shell_error::io::ErrorKind::IsADirectory)
Err(nu_protocol::shell_error::io::ErrorKind::Std(
std::io::ErrorKind::IsADirectory,
))
} else {
std::fs::File::create(path).map_err(|err| err.kind().into())
}

View File

@ -405,7 +405,7 @@ impl From<TestRow> for Value {
}
}
impl<'r> TryFrom<&rusqlite::Row<'r>> for TestRow {
impl TryFrom<&rusqlite::Row<'_>> for TestRow {
type Error = rusqlite::Error;
fn try_from(row: &rusqlite::Row) -> Result<Self, Self::Error> {

View File

@ -419,7 +419,7 @@ fn set_dir_read_only(directory: &AbsolutePath, read_only: bool) {
}
#[cfg(not(windows))]
impl<'a> Drop for Cleanup<'a> {
impl Drop for Cleanup<'_> {
/// Restores write permissions to the given directory so that the Playground can be successfully
/// cleaned up.
fn drop(&mut self) {

View File

@ -87,7 +87,7 @@ impl StatefulWidget for TableWidget<'_> {
}
// todo: refactoring these to methods as they have quite a bit in common.
impl<'a> TableWidget<'a> {
impl TableWidget<'_> {
// header at the top; header is always 1 line
fn render_table_horizontal(self, area: Rect, buf: &mut Buffer, state: &mut TableWidgetState) {
let padding_l = self.config.column_padding_left as u16;

View File

@ -132,11 +132,7 @@ pub struct IoError {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Diagnostic)]
pub enum ErrorKind {
Std(std::io::ErrorKind),
// TODO: in Rust 1.83 this can be std::io::ErrorKind::NotADirectory
NotADirectory,
NotAFile,
// TODO: in Rust 1.83 this can be std::io::ErrorKind::IsADirectory
IsADirectory,
}
#[derive(Debug, Clone, PartialEq, Eq, Error, Diagnostic)]
@ -321,9 +317,7 @@ impl Display for ErrorKind {
let (first, rest) = msg.split_at(1);
write!(f, "{}{}", first.to_uppercase(), rest)
}
ErrorKind::NotADirectory => write!(f, "Not a directory"),
ErrorKind::NotAFile => write!(f, "Not a file"),
ErrorKind::IsADirectory => write!(f, "Is a directory"),
}
}
}
@ -357,9 +351,7 @@ impl Diagnostic for IoError {
std::io::ErrorKind::Other => code.push_str("other"),
kind => code.push_str(&kind.to_string().to_lowercase().replace(" ", "_")),
},
ErrorKind::NotADirectory => code.push_str("not_a_directory"),
ErrorKind::NotAFile => code.push_str("not_a_file"),
ErrorKind::IsADirectory => code.push_str("is_a_directory"),
}
Some(Box::new(code))

View File

@ -302,7 +302,7 @@ impl<'a> MapSerializer<'a> {
}
}
impl<'a> serde::ser::SerializeStruct for MapSerializer<'a> {
impl serde::ser::SerializeStruct for MapSerializer<'_> {
type Ok = Value;
type Error = Error;
@ -320,7 +320,7 @@ impl<'a> serde::ser::SerializeStruct for MapSerializer<'a> {
}
}
impl<'a> serde::ser::SerializeMap for MapSerializer<'a> {
impl serde::ser::SerializeMap for MapSerializer<'_> {
type Ok = Value;
type Error = Error;
@ -351,7 +351,7 @@ impl<'a> serde::ser::SerializeMap for MapSerializer<'a> {
}
}
impl<'a> serde::ser::SerializeStructVariant for MapSerializer<'a> {
impl serde::ser::SerializeStructVariant for MapSerializer<'_> {
type Ok = Value;
type Error = Error;
@ -385,7 +385,7 @@ impl<'a> SeqSerializer<'a> {
}
}
impl<'a> serde::ser::SerializeSeq for SeqSerializer<'a> {
impl serde::ser::SerializeSeq for SeqSerializer<'_> {
type Ok = Value;
type Error = Error;
@ -402,7 +402,7 @@ impl<'a> serde::ser::SerializeSeq for SeqSerializer<'a> {
}
}
impl<'a> serde::ser::SerializeTuple for SeqSerializer<'a> {
impl serde::ser::SerializeTuple for SeqSerializer<'_> {
type Ok = Value;
type Error = Error;
@ -419,7 +419,7 @@ impl<'a> serde::ser::SerializeTuple for SeqSerializer<'a> {
}
}
impl<'a> serde::ser::SerializeTupleStruct for SeqSerializer<'a> {
impl serde::ser::SerializeTupleStruct for SeqSerializer<'_> {
type Ok = Value;
type Error = Error;
@ -436,7 +436,7 @@ impl<'a> serde::ser::SerializeTupleStruct for SeqSerializer<'a> {
}
}
impl<'a> serde::ser::SerializeTupleVariant for SeqSerializer<'a> {
impl serde::ser::SerializeTupleVariant for SeqSerializer<'_> {
type Ok = Value;
type Error = Error;

View File

@ -16,4 +16,4 @@ profile = "default"
# use in nushell, we may opt to use the bleeding edge stable version of rust.
# I believe rust is on a 6 week release cycle and nushell is on a 4 week release cycle.
# So, every two nushell releases, this version number should be bumped by one.
channel = "1.82.0"
channel = "1.83.0"

View File

@ -78,9 +78,9 @@ fn run_interactive_stderr(xdg_config_home: impl AsRef<Path>) -> String {
.output()
.expect("Should have outputted");
return String::from_utf8_lossy(&child_output.stderr)
String::from_utf8_lossy(&child_output.stderr)
.trim()
.to_string();
.to_string()
}
fn test_config_path_helper(