diff --git a/defs.bzl b/defs.bzl index 329ac8f50..fc26bc0bf 100644 --- a/defs.bzl +++ b/defs.bzl @@ -20,7 +20,7 @@ def setup_deps(): rust_repositories( edition = "2021", include_rustc_srcs = False, - version = "1.58.1", + version = "1.64.0", ) raze_fetch_remote_crates() diff --git a/late_deps.bzl b/late_deps.bzl index 65f217930..c3a954f9a 100644 --- a/late_deps.bzl +++ b/late_deps.bzl @@ -1,10 +1,8 @@ """Repo setup that can't happen until after defs.bzl:setup_deps() is run.""" load("@py_deps//:requirements.bzl", "install_deps") -load("@rules_rust//tools/rust_analyzer/raze:crates.bzl", "rules_rust_tools_rust_analyzer_fetch_remote_crates") load("@build_bazel_rules_nodejs//toolchains/esbuild:esbuild_repositories.bzl", "esbuild_repositories") def setup_late_deps(): install_deps() - rules_rust_tools_rust_analyzer_fetch_remote_crates() esbuild_repositories() diff --git a/pylib/rsbridge/lib.rs b/pylib/rsbridge/lib.rs index 258b168c2..b9920da36 100644 --- a/pylib/rsbridge/lib.rs +++ b/pylib/rsbridge/lib.rs @@ -1,6 +1,9 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +// Can remove after update to pyo3 0.17 +#![allow(clippy::borrow_deref_ref)] + use anki::backend::{init_backend, Backend as RustBackend}; use anki::log::default_logger; use pyo3::exceptions::PyException; diff --git a/repos.bzl b/repos.bzl index 0d30557f7..0289837f6 100644 --- a/repos.bzl +++ b/repos.bzl @@ -33,11 +33,11 @@ def register_repos(): maybe( http_archive, name = "rules_rust", - strip_prefix = "rules_rust-adf2790f3ff063d909acd70aacdd2832756113a5", + strip_prefix = "rules_rust-f0cdcedc2a68ffdb3048a8510b380e64eb9a1d72", urls = [ - "https://github.com/bazelbuild/rules_rust/archive/adf2790f3ff063d909acd70aacdd2832756113a5.zip", + "https://github.com/bazelbuild/rules_rust/archive/f0cdcedc2a68ffdb3048a8510b380e64eb9a1d72.zip", ], - sha256 = "7277e9e58ec157c233fa571e27f684402c1c0711370ef8bf379af63bd31cbe8b", + sha256 = "cc14a14ca5df2dd52f7d8b1a545f11cb42e9fae7861b4d5b83e883a8cc0f96bd", ) # maybe( diff --git a/rslib/i18n_helpers/src/garbage_collection.rs b/rslib/i18n_helpers/src/garbage_collection.rs index f20646bcc..bc7125ddb 100644 --- a/rslib/i18n_helpers/src/garbage_collection.rs +++ b/rslib/i18n_helpers/src/garbage_collection.rs @@ -81,15 +81,11 @@ fn strip_unused_ftl_messages_and_terms(ftl_root: &str, used_ftls: &HashSet used_ftls.contains(msg.id.name), - ast::Entry::Term(term) => used_ftls.contains(term.id.name), - _ => true, - }) - .collect(); + ast.body.retain(|entry| match entry { + ast::Entry::Message(msg) => used_ftls.contains(msg.id.name), + ast::Entry::Term(term) => used_ftls.contains(term.id.name), + _ => true, + }); if ast.body.len() < num_entries { fs::write(entry.path(), serialize::serialize(&ast)).expect("failed to write file"); diff --git a/rslib/i18n_helpers/src/serialize.rs b/rslib/i18n_helpers/src/serialize.rs index 9a6bd0ea6..f05479a4e 100644 --- a/rslib/i18n_helpers/src/serialize.rs +++ b/rslib/i18n_helpers/src/serialize.rs @@ -377,13 +377,13 @@ fn is_select_expr<'s, S: Slice<'s>>(expr: &Expression) -> bool { match expr { Expression::Select { .. } => true, Expression::Inline(InlineExpression::Placeable { expression }) => { - is_select_expr(&*expression) + is_select_expr(expression) } Expression::Inline(_) => false, } } -#[derive(Debug, Default, Copy, Clone, PartialEq)] +#[derive(Debug, Default, Copy, Clone, PartialEq, Eq)] pub struct Options { pub with_junk: bool, } diff --git a/rslib/src/backend/collection.rs b/rslib/src/backend/collection.rs index e1f12c350..201714e4d 100644 --- a/rslib/src/backend/collection.rs +++ b/rslib/src/backend/collection.rs @@ -133,7 +133,7 @@ impl Backend { let guard = self.col.lock().unwrap(); guard .is_some() - .then(|| guard) + .then_some(guard) .ok_or(AnkiError::CollectionNotOpen) } @@ -141,7 +141,7 @@ impl Backend { let guard = self.col.lock().unwrap(); guard .is_none() - .then(|| guard) + .then_some(guard) .ok_or(AnkiError::CollectionAlreadyOpen) } diff --git a/rslib/src/browser_table.rs b/rslib/src/browser_table.rs index 531a7d424..5362d6cb8 100644 --- a/rslib/src/browser_table.rs +++ b/rslib/src/browser_table.rs @@ -17,7 +17,7 @@ use crate::{ text::html_to_text_line, }; -#[derive(Debug, PartialEq, Clone, Copy, Display, EnumIter, EnumString)] +#[derive(Debug, PartialEq, Eq, Clone, Copy, Display, EnumIter, EnumString)] #[strum(serialize_all = "camelCase")] pub enum Column { #[strum(serialize = "")] diff --git a/rslib/src/card/mod.rs b/rslib/src/card/mod.rs index 6fd1a4bda..dfd5c9fa1 100644 --- a/rslib/src/card/mod.rs +++ b/rslib/src/card/mod.rs @@ -30,7 +30,7 @@ impl CardId { } } -#[derive(Serialize_repr, Deserialize_repr, Debug, PartialEq, TryFromPrimitive, Clone, Copy)] +#[derive(Serialize_repr, Deserialize_repr, Debug, PartialEq, Eq, TryFromPrimitive, Clone, Copy)] #[repr(u8)] pub enum CardType { New = 0, @@ -39,7 +39,7 @@ pub enum CardType { Relearn = 3, } -#[derive(Serialize_repr, Deserialize_repr, Debug, PartialEq, TryFromPrimitive, Clone, Copy)] +#[derive(Serialize_repr, Deserialize_repr, Debug, PartialEq, Eq, TryFromPrimitive, Clone, Copy)] #[repr(i8)] pub enum CardQueue { /// due is the order cards are shown in @@ -58,7 +58,7 @@ pub enum CardQueue { UserBuried = -3, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub struct Card { pub(crate) id: CardId, pub(crate) note_id: NoteId, @@ -177,7 +177,7 @@ impl Card { .unwrap_or(new_steps.len()) // (re)learning card must have at least 1 step remaining .max(1) as u32; - (remaining != new_remaining).then(|| new_remaining) + (remaining != new_remaining).then_some(new_remaining) } } diff --git a/rslib/src/card_rendering/mod.rs b/rslib/src/card_rendering/mod.rs index 628ea7d17..831ff8862 100644 --- a/rslib/src/card_rendering/mod.rs +++ b/rslib/src/card_rendering/mod.rs @@ -75,7 +75,7 @@ struct TtsDirective<'a> { options: HashMap<&'a str, &'a str>, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] struct OtherDirective<'a> { name: &'a str, content: &'a str, diff --git a/rslib/src/collection/backup.rs b/rslib/src/collection/backup.rs index 5ec1b148f..71379222b 100644 --- a/rslib/src/collection/backup.rs +++ b/rslib/src/collection/backup.rs @@ -119,7 +119,7 @@ fn datetime_from_file_name(file_name: &str) -> Option> { .and_then(|datetime| Local.from_local_datetime(&datetime).latest()) } -#[derive(Debug, PartialEq, Clone)] +#[derive(Debug, PartialEq, Eq, Clone)] struct Backup { path: PathBuf, datetime: DateTime, @@ -167,7 +167,7 @@ struct BackupFilter { obsolete: Vec, } -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] enum BackupStage { Daily, Weekly, diff --git a/rslib/src/config/mod.rs b/rslib/src/config/mod.rs index 137437615..5b69ff8a0 100644 --- a/rslib/src/config/mod.rs +++ b/rslib/src/config/mod.rs @@ -67,7 +67,7 @@ pub(crate) enum ConfigKey { SchedulerVersion, } -#[derive(PartialEq, Serialize_repr, Deserialize_repr, Clone, Copy, Debug)] +#[derive(PartialEq, Eq, Serialize_repr, Deserialize_repr, Clone, Copy, Debug)] #[repr(u8)] pub enum SchedulerVersion { V1 = 1, @@ -298,7 +298,7 @@ impl Default for NewReviewMix { } } -#[derive(PartialEq, Serialize_repr, Deserialize_repr, Clone, Copy)] +#[derive(PartialEq, Eq, Serialize_repr, Deserialize_repr, Clone, Copy)] #[repr(u8)] pub(crate) enum Weekday { Sunday = 0, diff --git a/rslib/src/config/number.rs b/rslib/src/config/number.rs index 446ff421b..7769b5449 100644 --- a/rslib/src/config/number.rs +++ b/rslib/src/config/number.rs @@ -14,7 +14,7 @@ pub enum I32ConfigKey { impl Collection { pub fn get_config_i32(&self, key: I32ConfigKey) -> i32 { #[allow(clippy::match_single_binding)] - self.get_config_optional(key).unwrap_or_else(|| match key { + self.get_config_optional(key).unwrap_or(match key { _other => 0, }) } diff --git a/rslib/src/dbcheck.rs b/rslib/src/dbcheck.rs index e97814b1a..0c15a1eda 100644 --- a/rslib/src/dbcheck.rs +++ b/rslib/src/dbcheck.rs @@ -19,7 +19,7 @@ use crate::{ timestamp::{TimestampMillis, TimestampSecs}, }; -#[derive(Debug, Default, PartialEq)] +#[derive(Debug, Default, PartialEq, Eq)] pub struct CheckDatabaseOutput { card_properties_invalid: usize, card_position_too_high: usize, diff --git a/rslib/src/deckconfig/schema11.rs b/rslib/src/deckconfig/schema11.rs index 6ff748c16..d8d0af9a9 100644 --- a/rslib/src/deckconfig/schema11.rs +++ b/rslib/src/deckconfig/schema11.rs @@ -80,7 +80,7 @@ pub struct NewConfSchema11 { other: HashMap, } -#[derive(Serialize_tuple, Debug, PartialEq, Clone)] +#[derive(Serialize_tuple, Debug, PartialEq, Eq, Clone)] pub struct NewCardIntervals { good: u16, easy: u16, @@ -120,7 +120,7 @@ where .unwrap_or_default()) } -#[derive(Serialize_repr, Deserialize_repr, Debug, PartialEq, Clone)] +#[derive(Serialize_repr, Deserialize_repr, Debug, PartialEq, Eq, Clone)] #[repr(u8)] pub enum NewCardOrderSchema11 { Random = 0, @@ -154,7 +154,7 @@ pub struct RevConfSchema11 { other: HashMap, } -#[derive(Serialize_repr, Deserialize_repr, Debug, PartialEq, Clone)] +#[derive(Serialize_repr, Deserialize_repr, Debug, PartialEq, Eq, Clone)] #[repr(u8)] pub enum LeechAction { Suspend = 0, diff --git a/rslib/src/decks/limits.rs b/rslib/src/decks/limits.rs index 3356cb2e9..64f6565e4 100644 --- a/rslib/src/decks/limits.rs +++ b/rslib/src/decks/limits.rs @@ -38,11 +38,11 @@ impl NormalDeck { impl DayLimit { pub fn limit(&self, today: u32) -> Option { - (self.today == today).then(|| self.limit) + (self.today == today).then_some(self.limit) } } -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] pub(crate) struct RemainingLimits { pub review: u32, pub new: u32, diff --git a/rslib/src/decks/name.rs b/rslib/src/decks/name.rs index 1b3058982..d4445b69a 100644 --- a/rslib/src/decks/name.rs +++ b/rslib/src/decks/name.rs @@ -6,7 +6,7 @@ use itertools::Itertools; use crate::{prelude::*, text::normalize_to_nfc}; -#[derive(Debug, Clone, Default, PartialEq)] +#[derive(Debug, Clone, Default, PartialEq, Eq)] pub struct NativeDeckName(String); impl NativeDeckName { @@ -242,7 +242,7 @@ mod test { fn drag_drop() { // use custom separator to make the tests easier to read fn n(s: &str) -> NativeDeckName { - NativeDeckName(s.replace(":", "\x1f")) + NativeDeckName(s.replace(':', "\x1f")) } #[allow(clippy::unnecessary_wraps)] diff --git a/rslib/src/decks/schema11.rs b/rslib/src/decks/schema11.rs index d9ad494cc..a3a763918 100644 --- a/rslib/src/decks/schema11.rs +++ b/rslib/src/decks/schema11.rs @@ -77,7 +77,7 @@ fn is_false(b: &bool) -> bool { !b } -#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)] +#[derive(Serialize, Deserialize, PartialEq, Eq, Debug, Clone)] pub struct DeckCommonSchema11 { #[serde(deserialize_with = "deserialize_number_from_string")] pub(crate) id: DeckId, @@ -105,7 +105,7 @@ pub struct DeckCommonSchema11 { other: HashMap, } -#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)] +#[derive(Serialize, Deserialize, PartialEq, Eq, Debug, Clone)] #[serde(rename_all = "camelCase")] pub struct NormalDeckSchema11 { #[serde(flatten)] @@ -149,7 +149,7 @@ pub struct FilteredDeckSchema11 { #[serde(default)] preview_delay: u32, } -#[derive(Serialize, Deserialize, Debug, PartialEq, Default, Clone)] +#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Default, Clone)] pub struct DeckTodaySchema11 { #[serde(rename = "lrnToday")] pub(crate) lrn: TodayAmountSchema11, @@ -161,7 +161,7 @@ pub struct DeckTodaySchema11 { pub(crate) time: TodayAmountSchema11, } -#[derive(Serialize_tuple, Deserialize, Debug, PartialEq, Default, Clone)] +#[derive(Serialize_tuple, Deserialize, Debug, PartialEq, Eq, Default, Clone)] #[serde(from = "Vec")] pub struct TodayAmountSchema11 { day: i32, @@ -178,7 +178,7 @@ impl From> for TodayAmountSchema11 { } } } -#[derive(Serialize_tuple, Deserialize, Debug, PartialEq, Clone)] +#[derive(Serialize_tuple, Deserialize, Debug, PartialEq, Eq, Clone)] pub struct FilteredSearchTermSchema11 { search: String, #[serde(deserialize_with = "deserialize_number_from_string")] diff --git a/rslib/src/error/db.rs b/rslib/src/error/db.rs index ab75cb192..f233c8076 100644 --- a/rslib/src/error/db.rs +++ b/rslib/src/error/db.rs @@ -8,13 +8,13 @@ use rusqlite::{types::FromSqlError, Error}; use super::AnkiError; -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub struct DbError { pub info: String, pub kind: DbErrorKind, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum DbErrorKind { FileTooNew, FileTooOld, diff --git a/rslib/src/error/filtered.rs b/rslib/src/error/filtered.rs index e5856b474..39bb86127 100644 --- a/rslib/src/error/filtered.rs +++ b/rslib/src/error/filtered.rs @@ -5,7 +5,7 @@ use anki_i18n::I18n; use super::AnkiError; -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum FilteredDeckError { MustBeLeafNode, CanNotMoveCardsInto, @@ -33,7 +33,7 @@ impl From for AnkiError { } } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum CustomStudyError { NoMatchingCards, ExistingDeck, diff --git a/rslib/src/error/mod.rs b/rslib/src/error/mod.rs index 32c6f9afa..83a462d4f 100644 --- a/rslib/src/error/mod.rs +++ b/rslib/src/error/mod.rs @@ -18,7 +18,7 @@ use crate::{i18n::I18n, links::HelpPage}; pub type Result = std::result::Result; -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum AnkiError { InvalidInput(String), TemplateError(String), @@ -138,7 +138,7 @@ impl AnkiError { } } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum TemplateError { NoClosingBrackets(String), ConditionalNotClosed(String), @@ -195,14 +195,14 @@ impl From for AnkiError { } } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub struct CardTypeError { pub notetype: String, pub ordinal: usize, pub details: CardTypeErrorDetails, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum CardTypeErrorDetails { TemplateError, Duplicate(usize), @@ -212,7 +212,7 @@ pub enum CardTypeErrorDetails { ExtraneousCloze, } -#[derive(Debug, PartialEq, Clone)] +#[derive(Debug, PartialEq, Eq, Clone)] pub enum ImportError { Corrupt, TooNew, @@ -232,7 +232,7 @@ impl ImportError { } } -#[derive(Debug, PartialEq, Clone)] +#[derive(Debug, PartialEq, Eq, Clone)] pub struct FileIoError { pub path: String, diff --git a/rslib/src/error/network.rs b/rslib/src/error/network.rs index 3a2177811..e856a1003 100644 --- a/rslib/src/error/network.rs +++ b/rslib/src/error/network.rs @@ -6,13 +6,13 @@ use reqwest::StatusCode; use super::AnkiError; -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub struct NetworkError { pub info: String, pub kind: NetworkErrorKind, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum NetworkErrorKind { Offline, Timeout, @@ -20,13 +20,13 @@ pub enum NetworkErrorKind { Other, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub struct SyncError { pub info: String, pub kind: SyncErrorKind, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum SyncErrorKind { Conflict, ServerError, diff --git a/rslib/src/error/search.rs b/rslib/src/error/search.rs index 11a670976..4c623cab9 100644 --- a/rslib/src/error/search.rs +++ b/rslib/src/error/search.rs @@ -8,13 +8,13 @@ use nom::error::{ErrorKind as NomErrorKind, ParseError as NomParseError}; use super::AnkiError; -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum ParseError<'a> { Anki(&'a str, SearchErrorKind), Nom(&'a str, NomErrorKind), } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum SearchErrorKind { MisplacedAnd, MisplacedOr, diff --git a/rslib/src/import_export/gather.rs b/rslib/src/import_export/gather.rs index 15025440f..1662f3c4a 100644 --- a/rslib/src/import_export/gather.rs +++ b/rslib/src/import_export/gather.rs @@ -124,14 +124,18 @@ impl ExchangeData { fn check_ids(&self) -> Result<()> { let now = TimestampMillis::now().0; - self.cards + if self + .cards .iter() .map(|card| card.id.0) .chain(self.notes.iter().map(|note| note.id.0)) .chain(self.revlog.iter().map(|entry| entry.id.0)) .any(|timestamp| timestamp > now) - .then(|| Err(AnkiError::InvalidId)) - .unwrap_or(Ok(())) + { + Err(AnkiError::InvalidId) + } else { + Ok(()) + } } } diff --git a/rslib/src/import_export/mod.rs b/rslib/src/import_export/mod.rs index 1a80f9c46..5047936e5 100644 --- a/rslib/src/import_export/mod.rs +++ b/rslib/src/import_export/mod.rs @@ -17,7 +17,7 @@ use crate::{ }, }; -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum ImportProgress { File, Extracting, @@ -27,7 +27,7 @@ pub enum ImportProgress { Notes(usize), } -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum ExportProgress { File, Gathering, diff --git a/rslib/src/import_export/package/apkg/import/notes.rs b/rslib/src/import_export/package/apkg/import/notes.rs index a260a5a5d..eb5410eb7 100644 --- a/rslib/src/import_export/package/apkg/import/notes.rs +++ b/rslib/src/import_export/package/apkg/import/notes.rs @@ -263,7 +263,7 @@ impl<'n> NoteContext<'n> { Ok(()) } - fn replace_media_refs(&mut self, field: &mut String) -> Option { + fn replace_media_refs(&mut self, field: &mut str) -> Option { replace_media_refs(field, |name| { if let Ok(normalized) = safe_normalized_file_name(name) { if let Some(entry) = self.media_map.use_entry(&normalized) { diff --git a/rslib/src/import_export/package/colpkg/import.rs b/rslib/src/import_export/package/colpkg/import.rs index 0cc38f791..3e3c16439 100644 --- a/rslib/src/import_export/package/colpkg/import.rs +++ b/rslib/src/import_export/package/colpkg/import.rs @@ -71,7 +71,7 @@ fn check_collection_and_mod_schema(col_path: &Path) -> Result<()> { .pragma_query_value(None, "integrity_check", |row| row.get::<_, String>(0)) .ok() }) - .and_then(|s| (s == "ok").then(|| ())) + .and_then(|s| (s == "ok").then_some(())) .ok_or(AnkiError::ImportError(ImportError::Corrupt)) } diff --git a/rslib/src/import_export/text/csv/export.rs b/rslib/src/import_export/text/csv/export.rs index 3003b768f..f4811f024 100644 --- a/rslib/src/import_export/text/csv/export.rs +++ b/rslib/src/import_export/text/csv/export.rs @@ -211,7 +211,7 @@ impl NoteContext { } fn guid_column(&self) -> Option { - self.with_guid.then(|| 1) + self.with_guid.then_some(1) } fn notetype_column(&self) -> Option { diff --git a/rslib/src/import_export/text/csv/import.rs b/rslib/src/import_export/text/csv/import.rs index d6385e706..f3148a67e 100644 --- a/rslib/src/import_export/text/csv/import.rs +++ b/rslib/src/import_export/text/csv/import.rs @@ -61,7 +61,7 @@ impl CsvMetadata { CsvNotetype::GlobalNotetype(global) => global .field_columns .iter() - .map(|&i| (i > 0).then(|| i as usize)) + .map(|&i| (i > 0).then_some(i as usize)) .collect(), CsvNotetype::NotetypeColumn(_) => { let meta_columns = self.meta_columns(); @@ -124,8 +124,8 @@ struct ColumnContext { impl ColumnContext { fn new(metadata: &CsvMetadata) -> Result { Ok(Self { - tags_column: (metadata.tags_column > 0).then(|| metadata.tags_column as usize), - guid_column: (metadata.guid_column > 0).then(|| metadata.guid_column as usize), + tags_column: (metadata.tags_column > 0).then_some(metadata.tags_column as usize), + guid_column: (metadata.guid_column > 0).then_some(metadata.guid_column as usize), deck_column: metadata.deck()?.column(), notetype_column: metadata.notetype()?.column(), field_source_columns: metadata.field_source_columns()?, diff --git a/rslib/src/import_export/text/csv/metadata.rs b/rslib/src/import_export/text/csv/metadata.rs index 44eaacc72..233abf030 100644 --- a/rslib/src/import_export/text/csv/metadata.rs +++ b/rslib/src/import_export/text/csv/metadata.rs @@ -404,12 +404,9 @@ fn maybe_set_tags_column(metadata: &mut CsvMetadata, meta_columns: &HashSet Option { let normed = value.to_ascii_lowercase(); - for delimiter in Delimiter::iter() { - if normed.trim() == delimiter.name() || normed.as_bytes() == [delimiter.byte()] { - return Some(delimiter); - } - } - None + Delimiter::iter().find(|&delimiter| { + normed.trim() == delimiter.name() || normed.as_bytes() == [delimiter.byte()] + }) } fn delimiter_from_reader(mut reader: impl Read) -> Result { diff --git a/rslib/src/import_export/text/mod.rs b/rslib/src/import_export/text/mod.rs index e976dca5a..d84450a44 100644 --- a/rslib/src/import_export/text/mod.rs +++ b/rslib/src/import_export/text/mod.rs @@ -22,7 +22,7 @@ pub struct ForeignData { updated_tags: Vec, } -#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] #[serde(default)] pub struct ForeignNote { guid: String, @@ -43,7 +43,7 @@ pub struct ForeignCard { pub lapses: u32, } -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct ForeignNotetype { name: String, fields: Vec, @@ -52,7 +52,7 @@ pub struct ForeignNotetype { is_cloze: bool, } -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct ForeignTemplate { name: String, qfmt: String, diff --git a/rslib/src/latex.rs b/rslib/src/latex.rs index 8f467c262..f64276c10 100644 --- a/rslib/src/latex.rs +++ b/rslib/src/latex.rs @@ -33,7 +33,7 @@ pub(crate) fn contains_latex(text: &str) -> bool { LATEX.is_match(text) } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub struct ExtractedLatex { pub fname: String, pub latex: String, diff --git a/rslib/src/media/check.rs b/rslib/src/media/check.rs index 0ee928c47..2e67393e0 100644 --- a/rslib/src/media/check.rs +++ b/rslib/src/media/check.rs @@ -27,7 +27,7 @@ use crate::{ text::{extract_media_refs, normalize_to_nfc, MediaRef, REMOTE_FILENAME}, }; -#[derive(Debug, PartialEq, Clone)] +#[derive(Debug, PartialEq, Eq, Clone)] pub struct MediaCheckOutput { pub unused: Vec, pub missing: Vec, @@ -38,7 +38,7 @@ pub struct MediaCheckOutput { pub trash_bytes: u64, } -#[derive(Debug, PartialEq, Default)] +#[derive(Debug, PartialEq, Eq, Default)] struct MediaFolderCheck { files: Vec, renamed: HashMap, diff --git a/rslib/src/media/database.rs b/rslib/src/media/database.rs index 66b9cf147..ab49d7d86 100644 --- a/rslib/src/media/database.rs +++ b/rslib/src/media/database.rs @@ -43,7 +43,7 @@ fn initial_db_setup(db: &mut Connection) -> Result<()> { Ok(()) } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub struct MediaEntry { pub fname: String, /// If None, file has been deleted @@ -54,7 +54,7 @@ pub struct MediaEntry { pub sync_required: bool, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub struct MediaDatabaseMetadata { /// The syncing code no longer uses this; files are scanned for /// indiscriminately. After this has been in production for a while diff --git a/rslib/src/media/sync.rs b/rslib/src/media/sync.rs index da50eda88..853b4efd3 100644 --- a/rslib/src/media/sync.rs +++ b/rslib/src/media/sync.rs @@ -79,7 +79,7 @@ enum LocalState { InDbAndPending, } -#[derive(PartialEq, Debug)] +#[derive(PartialEq, Eq, Debug)] enum RequiredChange { // none also covers the case where we'll later upload None, diff --git a/rslib/src/notes/mod.rs b/rslib/src/notes/mod.rs index ae198d5ac..f6dba082a 100644 --- a/rslib/src/notes/mod.rs +++ b/rslib/src/notes/mod.rs @@ -37,7 +37,7 @@ pub(crate) struct TransformNoteOutput { pub update_tags: bool, } -#[derive(Debug, PartialEq, Clone)] +#[derive(Debug, PartialEq, Eq, Clone)] pub struct Note { pub id: NoteId, pub guid: String, @@ -108,7 +108,7 @@ impl Collection { /// Information required for updating tags while leaving note content alone. /// Tags are stored in their DB form, separated by spaces. -#[derive(Debug, PartialEq, Clone)] +#[derive(Debug, PartialEq, Eq, Clone)] pub(crate) struct NoteTags { pub id: NoteId, pub mtime: TimestampSecs, @@ -747,7 +747,7 @@ mod test { col.storage.db_scalar::("select count() from graves")?, 0 ); - assert!(!col.get_next_card()?.is_some()); + assert!(col.get_next_card()?.is_none()); Ok(()) }; @@ -786,7 +786,7 @@ mod test { col.storage.db_scalar::("select count() from graves")?, 3 ); - assert!(!col.get_next_card()?.is_some()); + assert!(col.get_next_card()?.is_none()); Ok(()) }; diff --git a/rslib/src/notetype/cardgen.rs b/rslib/src/notetype/cardgen.rs index 75dba064d..3c7ee9843 100644 --- a/rslib/src/notetype/cardgen.rs +++ b/rslib/src/notetype/cardgen.rs @@ -16,7 +16,7 @@ use crate::{ }; /// Info about an existing card required when generating new cards -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub(crate) struct AlreadyGeneratedCardInfo { pub id: CardId, pub nid: NoteId, @@ -178,7 +178,7 @@ pub(super) fn group_generated_cards_by_note( out } -#[derive(Debug, PartialEq, Default)] +#[derive(Debug, PartialEq, Eq, Default)] pub(crate) struct ExtractedCardInfo { // if set, the due position new cards should be given pub due: Option, diff --git a/rslib/src/notetype/checks.rs b/rslib/src/notetype/checks.rs index 91ae1af5a..eaa2cdb58 100644 --- a/rslib/src/notetype/checks.rs +++ b/rslib/src/notetype/checks.rs @@ -14,7 +14,7 @@ use crate::{ text::{HTML_MEDIA_TAGS, SOUND_TAG}, }; -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] struct Template<'a> { notetype: &'a str, card_type: &'a str, diff --git a/rslib/src/notetype/notetypechange.rs b/rslib/src/notetype/notetypechange.rs index 1a97a8dab..661ca41e5 100644 --- a/rslib/src/notetype/notetypechange.rs +++ b/rslib/src/notetype/notetypechange.rs @@ -33,7 +33,7 @@ pub struct NotetypeChangeInfo { pub new_template_names: Vec, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub struct TemplateMap { pub removed: Vec, pub remapped: HashMap, diff --git a/rslib/src/notetype/schema11.rs b/rslib/src/notetype/schema11.rs index c3c24dafa..5a0efa75d 100644 --- a/rslib/src/notetype/schema11.rs +++ b/rslib/src/notetype/schema11.rs @@ -20,7 +20,7 @@ use crate::{ types::Usn, }; -#[derive(Serialize_repr, Deserialize_repr, PartialEq, Debug, Clone)] +#[derive(Serialize_repr, Deserialize_repr, PartialEq, Eq, Debug, Clone)] #[repr(u8)] pub enum NotetypeKind { Standard = 0, diff --git a/rslib/src/notetype/schemachange.rs b/rslib/src/notetype/schemachange.rs index f4916b8f4..67d2c5141 100644 --- a/rslib/src/notetype/schemachange.rs +++ b/rslib/src/notetype/schemachange.rs @@ -20,7 +20,7 @@ fn ords_changed(ords: &[Option], previous_len: usize) -> bool { .any(|(idx, &ord)| ord != Some(idx as u32)) } -#[derive(Default, PartialEq, Debug)] +#[derive(Default, PartialEq, Eq, Debug)] struct TemplateOrdChanges { added: Vec, removed: Vec, diff --git a/rslib/src/ops.rs b/rslib/src/ops.rs index c3d8f4a28..4aadac3a8 100644 --- a/rslib/src/ops.rs +++ b/rslib/src/ops.rs @@ -3,7 +3,7 @@ use crate::prelude::*; -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub enum Op { Custom(String), AddDeck, @@ -95,7 +95,7 @@ impl Op { } } -#[derive(Debug, PartialEq, Default, Clone, Copy)] +#[derive(Debug, PartialEq, Eq, Default, Clone, Copy)] pub struct StateChanges { pub card: bool, pub note: bool, @@ -107,13 +107,13 @@ pub struct StateChanges { pub mtime: bool, } -#[derive(Debug, PartialEq, Clone)] +#[derive(Debug, PartialEq, Eq, Clone)] pub struct OpChanges { pub op: Op, pub changes: StateChanges, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub struct OpOutput { pub output: T, pub changes: OpChanges, diff --git a/rslib/src/pb.rs b/rslib/src/pb.rs index f3b6eff71..4bed294d0 100644 --- a/rslib/src/pb.rs +++ b/rslib/src/pb.rs @@ -4,6 +4,7 @@ macro_rules! protobuf { ($ident:ident) => { pub mod $ident { + #![allow(clippy::derive_partial_eq_without_eq)] include!(concat!( env!("OUT_DIR"), concat!("/anki.", stringify!($ident), ".rs") diff --git a/rslib/src/revlog/mod.rs b/rslib/src/revlog/mod.rs index f00aa3137..ded0083d1 100644 --- a/rslib/src/revlog/mod.rs +++ b/rslib/src/revlog/mod.rs @@ -32,7 +32,7 @@ impl From for RevlogId { } } -#[derive(Serialize_tuple, Deserialize, Debug, Default, PartialEq)] +#[derive(Serialize_tuple, Deserialize, Debug, Default, PartialEq, Eq)] pub struct RevlogEntry { pub id: RevlogId, pub cid: CardId, @@ -57,7 +57,7 @@ pub struct RevlogEntry { pub review_kind: RevlogReviewKind, } -#[derive(Serialize_repr, Deserialize_repr, Debug, PartialEq, TryFromPrimitive, Clone, Copy)] +#[derive(Serialize_repr, Deserialize_repr, Debug, PartialEq, Eq, TryFromPrimitive, Clone, Copy)] #[repr(u8)] pub enum RevlogReviewKind { Learning = 0, diff --git a/rslib/src/scheduler/new.rs b/rslib/src/scheduler/new.rs index 961debdc2..1f2a9952d 100644 --- a/rslib/src/scheduler/new.rs +++ b/rslib/src/scheduler/new.rs @@ -19,9 +19,11 @@ use crate::{ impl Card { pub(crate) fn original_or_current_due(&self) -> i32 { - self.is_filtered() - .then(|| self.original_due) - .unwrap_or(self.due) + if self.is_filtered() { + self.original_due + } else { + self.due + } } pub(crate) fn last_position(&self) -> Option { @@ -77,7 +79,7 @@ pub(crate) struct NewCardSorter { position: HashMap, } -#[derive(PartialEq)] +#[derive(PartialEq, Eq)] pub enum NewCardDueOrder { NoteId, Random, diff --git a/rslib/src/scheduler/queue/entry.rs b/rslib/src/scheduler/queue/entry.rs index 201616625..7c4111b6e 100644 --- a/rslib/src/scheduler/queue/entry.rs +++ b/rslib/src/scheduler/queue/entry.rs @@ -4,7 +4,7 @@ use super::{LearningQueueEntry, MainQueueEntry, MainQueueEntryKind}; use crate::{card::CardQueue, prelude::*}; -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] pub(crate) enum QueueEntry { IntradayLearning(LearningQueueEntry), Main(MainQueueEntry), @@ -37,7 +37,7 @@ impl QueueEntry { } } -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum QueueEntryKind { New, Learning, diff --git a/rslib/src/scheduler/queue/main.rs b/rslib/src/scheduler/queue/main.rs index 6dc35f000..da8b30330 100644 --- a/rslib/src/scheduler/queue/main.rs +++ b/rslib/src/scheduler/queue/main.rs @@ -4,14 +4,14 @@ use super::CardQueues; use crate::prelude::*; -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] pub(crate) struct MainQueueEntry { pub id: CardId, pub mtime: TimestampSecs, pub kind: MainQueueEntryKind, } -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] pub(crate) enum MainQueueEntryKind { New, Review, diff --git a/rslib/src/scheduler/queue/undo.rs b/rslib/src/scheduler/queue/undo.rs index f268e6a52..748a29110 100644 --- a/rslib/src/scheduler/queue/undo.rs +++ b/rslib/src/scheduler/queue/undo.rs @@ -146,7 +146,7 @@ mod test { let deck = col.get_deck(DeckId(1))?.unwrap(); assert_eq!(deck.common.review_studied, 1); - assert!(!col.get_next_card()?.is_some()); + assert!(col.get_next_card()?.is_none()); Ok(()) }; diff --git a/rslib/src/scheduler/reviews.rs b/rslib/src/scheduler/reviews.rs index 40b7f268e..b5bf36839 100644 --- a/rslib/src/scheduler/reviews.rs +++ b/rslib/src/scheduler/reviews.rs @@ -55,7 +55,7 @@ impl Card { } } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub struct DueDateSpecifier { min: u32, max: u32, diff --git a/rslib/src/scheduler/states/interval_kind.rs b/rslib/src/scheduler/states/interval_kind.rs index b37bf966b..5272f2367 100644 --- a/rslib/src/scheduler/states/interval_kind.rs +++ b/rslib/src/scheduler/states/interval_kind.rs @@ -1,7 +1,7 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub(crate) enum IntervalKind { InSecs(u32), InDays(u32), diff --git a/rslib/src/scheduler/states/learning.rs b/rslib/src/scheduler/states/learning.rs index 7215a931e..02988b25a 100644 --- a/rslib/src/scheduler/states/learning.rs +++ b/rslib/src/scheduler/states/learning.rs @@ -4,7 +4,7 @@ use super::{interval_kind::IntervalKind, CardState, ReviewState, SchedulingStates, StateContext}; use crate::revlog::RevlogReviewKind; -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct LearnState { pub remaining_steps: u32, pub scheduled_secs: u32, diff --git a/rslib/src/scheduler/states/new.rs b/rslib/src/scheduler/states/new.rs index e4d043885..cfb69c6ca 100644 --- a/rslib/src/scheduler/states/new.rs +++ b/rslib/src/scheduler/states/new.rs @@ -4,7 +4,7 @@ use super::interval_kind::IntervalKind; use crate::revlog::RevlogReviewKind; -#[derive(Debug, Clone, Copy, PartialEq, Default)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] pub struct NewState { pub position: u32, } diff --git a/rslib/src/scheduler/states/preview_filter.rs b/rslib/src/scheduler/states/preview_filter.rs index 6303f8f0e..c60ac8957 100644 --- a/rslib/src/scheduler/states/preview_filter.rs +++ b/rslib/src/scheduler/states/preview_filter.rs @@ -4,7 +4,7 @@ use super::{IntervalKind, SchedulingStates, StateContext}; use crate::revlog::RevlogReviewKind; -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct PreviewState { pub scheduled_secs: u32, pub finished: bool, diff --git a/rslib/src/scheduler/timing.rs b/rslib/src/scheduler/timing.rs index 2e02fa845..caffbe711 100644 --- a/rslib/src/scheduler/timing.rs +++ b/rslib/src/scheduler/timing.rs @@ -5,7 +5,7 @@ use chrono::{Date, Duration, FixedOffset, Local, TimeZone, Timelike}; use crate::prelude::*; -#[derive(Debug, PartialEq, Clone, Copy)] +#[derive(Debug, PartialEq, Eq, Clone, Copy)] pub struct SchedTimingToday { pub now: TimestampSecs, /// The number of days that have passed since the collection was created. diff --git a/rslib/src/search/mod.rs b/rslib/src/search/mod.rs index f7212c8ed..48f05909d 100644 --- a/rslib/src/search/mod.rs +++ b/rslib/src/search/mod.rs @@ -25,13 +25,13 @@ use crate::{ prelude::AnkiError, }; -#[derive(Debug, PartialEq, Clone, Copy)] +#[derive(Debug, PartialEq, Eq, Clone, Copy)] pub enum ReturnItemType { Cards, Notes, } -#[derive(Debug, PartialEq, Clone)] +#[derive(Debug, PartialEq, Eq, Clone)] pub enum SortMode { NoOrder, Builtin { column: Column, reverse: bool }, diff --git a/rslib/src/search/parser.rs b/rslib/src/search/parser.rs index 195b23ec8..eb9110c08 100644 --- a/rslib/src/search/parser.rs +++ b/rslib/src/search/parser.rs @@ -97,7 +97,7 @@ pub enum PropertyKind { Rated(i32, RatingKind), } -#[derive(Debug, PartialEq, Clone)] +#[derive(Debug, PartialEq, Eq, Clone)] pub enum StateKind { New, Review, @@ -109,13 +109,13 @@ pub enum StateKind { Suspended, } -#[derive(Debug, PartialEq, Clone)] +#[derive(Debug, PartialEq, Eq, Clone)] pub enum TemplateKind { Ordinal(u16), Name(String), } -#[derive(Debug, PartialEq, Clone)] +#[derive(Debug, PartialEq, Eq, Clone)] pub enum RatingKind { AnswerButton(u8), AnyAnswerButton, diff --git a/rslib/src/search/sqlwriter.rs b/rslib/src/search/sqlwriter.rs index e9ca1eeee..20bd5286a 100644 --- a/rslib/src/search/sqlwriter.rs +++ b/rslib/src/search/sqlwriter.rs @@ -612,7 +612,7 @@ impl SqlWriter<'_> { } } -#[derive(Debug, PartialEq, Clone, Copy)] +#[derive(Debug, PartialEq, Eq, Clone, Copy)] pub enum RequiredTable { Notes, Cards, diff --git a/rslib/src/serde.rs b/rslib/src/serde.rs index 0d1623eb7..48fa78f98 100644 --- a/rslib/src/serde.rs +++ b/rslib/src/serde.rs @@ -73,7 +73,7 @@ mod test { use super::*; - #[derive(Deserialize, Debug, PartialEq)] + #[derive(Deserialize, Debug, PartialEq, Eq)] struct MaybeInvalid { #[serde(deserialize_with = "default_on_invalid", default)] field: Option, diff --git a/rslib/src/stats/today.rs b/rslib/src/stats/today.rs index 594b68bf9..e705a4191 100644 --- a/rslib/src/stats/today.rs +++ b/rslib/src/stats/today.rs @@ -34,7 +34,7 @@ mod test { // temporary test of fluent term handling let tr = I18n::template_only(); assert_eq!( - &studied_today(3, 13.0, &tr).replace("\n", " "), + &studied_today(3, 13.0, &tr).replace('\n', " "), "Studied 3 cards in 13 seconds today (4.33s/card)" ); } diff --git a/rslib/src/storage/card/data.rs b/rslib/src/storage/card/data.rs index 4c303c70a..39d64280b 100644 --- a/rslib/src/storage/card/data.rs +++ b/rslib/src/storage/card/data.rs @@ -13,7 +13,7 @@ use serde_json::Value; use crate::{prelude::*, serde::default_on_invalid}; /// Helper for serdeing the card data column. -#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] #[serde(default)] pub(crate) struct CardData { #[serde( diff --git a/rslib/src/storage/mod.rs b/rslib/src/storage/mod.rs index 5ab5aa42d..781729327 100644 --- a/rslib/src/storage/mod.rs +++ b/rslib/src/storage/mod.rs @@ -21,7 +21,7 @@ use std::fmt::Write; pub(crate) use sqlite::SqliteStorage; pub(crate) use sync::open_and_check_sqlite_file; -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub(crate) enum SchemaVersion { V11, V18, diff --git a/rslib/src/sync/mod.rs b/rslib/src/sync/mod.rs index 3f60686a4..23debee32 100644 --- a/rslib/src/sync/mod.rs +++ b/rslib/src/sync/mod.rs @@ -46,7 +46,7 @@ pub struct NormalSyncProgress { pub remote_remove: usize, } -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum SyncStage { Connecting, Syncing, @@ -176,14 +176,14 @@ pub struct SanityCheckResponse { pub server: Option, } -#[derive(Serialize, Deserialize, Debug, PartialEq)] +#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)] #[serde(rename_all = "lowercase")] pub enum SanityCheckStatus { Ok, Bad, } -#[derive(Serialize_tuple, Deserialize, Debug, PartialEq)] +#[derive(Serialize_tuple, Deserialize, Debug, PartialEq, Eq)] pub struct SanityCheckCounts { pub counts: SanityCheckDueCounts, pub cards: u32, @@ -196,7 +196,7 @@ pub struct SanityCheckCounts { pub deck_config: u32, } -#[derive(Serialize_tuple, Deserialize, Debug, Default, PartialEq)] +#[derive(Serialize_tuple, Deserialize, Debug, Default, PartialEq, Eq)] pub struct SanityCheckDueCounts { pub new: u32, pub learn: u32, @@ -209,7 +209,7 @@ pub struct FullSyncProgress { pub total_bytes: usize, } -#[derive(PartialEq, Debug, Clone, Copy)] +#[derive(PartialEq, Eq, Debug, Clone, Copy)] pub enum SyncActionRequired { NoChanges, FullSyncRequired { upload_ok: bool, download_ok: bool }, diff --git a/rslib/src/tags/mod.rs b/rslib/src/tags/mod.rs index e9ef57b34..04f876ad3 100644 --- a/rslib/src/tags/mod.rs +++ b/rslib/src/tags/mod.rs @@ -17,7 +17,7 @@ use unicase::UniCase; use crate::prelude::*; -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub struct Tag { pub name: String, pub usn: Usn, diff --git a/rslib/src/template.rs b/rslib/src/template.rs index 41ef81b00..49f5cfb32 100644 --- a/rslib/src/template.rs +++ b/rslib/src/template.rs @@ -175,7 +175,7 @@ fn legacy_tokens(mut data: &str) -> impl Iterator> // Parsing //---------------------------------------- -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] enum ParsedNode { Text(String), Replacement { @@ -371,7 +371,7 @@ fn template_is_empty( // Rendering //---------------------------------------- -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum RenderedNode { Text { text: String, @@ -632,7 +632,7 @@ fn cloze_is_empty(field_map: &HashMap<&str, Cow>, card_ord: u16) -> bool { // Field requirements //---------------------------------------- -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub enum FieldRequirements { Any(HashSet), All(HashSet), diff --git a/rslib/src/typeanswer.rs b/rslib/src/typeanswer.rs index 5c91e9d41..d1657ad6f 100644 --- a/rslib/src/typeanswer.rs +++ b/rslib/src/typeanswer.rs @@ -115,20 +115,20 @@ fn prepare_provided(provided: &str) -> String { normalize_to_nfc(provided).into() } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] enum DiffTokenKind { Good, Bad, Missing, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] struct DiffToken<'a> { kind: DiffTokenKind, text: Cow<'a, str>, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] struct DiffOutput<'a> { provided: Vec>, expected: Vec>, diff --git a/rslib/src/undo/mod.rs b/rslib/src/undo/mod.rs index 42961734d..86a1a0354 100644 --- a/rslib/src/undo/mod.rs +++ b/rslib/src/undo/mod.rs @@ -30,7 +30,7 @@ impl UndoableOp { } } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] enum UndoMode { NormalOp, Undoing,