diff --git a/crates/encodings/Cargo.toml b/crates/encodings/Cargo.toml index 50b932ab8649f2fb03d4d34c82c6144068bff4a0..0e900d576012e592f952332b0262acc69ef7ef40 100644 --- a/crates/encodings/Cargo.toml +++ b/crates/encodings/Cargo.toml @@ -5,8 +5,8 @@ publish.workspace = true edition.workspace = true [dependencies] -encoding_rs.workspace = true anyhow.workspace = true +encoding_rs.workspace = true [lints] workspace = true diff --git a/crates/encodings_ui/src/selectors.rs b/crates/encodings_ui/src/selectors.rs index 879cadba19de10315280d86a9032741858d0de57..fc5a6793a96f2a53e048143e666deaef89fb9018 100644 --- a/crates/encodings_ui/src/selectors.rs +++ b/crates/encodings_ui/src/selectors.rs @@ -463,16 +463,10 @@ pub mod encoding { .unwrap(); let reload = buffer.update(cx, |buffer, cx| buffer.reload(cx)); - // Since the encoding will be accessed in `reload`, - // the lock must be released before calling `reload`. - // By limiting the scope, we ensure that it is released - { - let buffer = buffer.read(cx); - - let buffer_encoding = buffer.encoding.clone(); - buffer_encoding.set(encoding_from_name(¤t_selection.clone())); - } + buffer.update(cx, |buffer, _| { + buffer.update_encoding(encoding_from_name(¤t_selection).into()) + }); self.dismissed(window, cx); @@ -560,9 +554,7 @@ pub mod encoding { }) { buffer - .read_with(cx, |buffer, _| { - buffer.encoding.set(encoding); - }) + .update(cx, |buffer, _| buffer.update_encoding(encoding.into())) .log_err(); } }) diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index 6df473726c28d276bf4ed5e7af093a4b54535a0c..a82c49ae546980a42f4ec823b26fda357bfe40a7 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -128,7 +128,6 @@ pub struct Buffer { change_bits: Vec>>, _subscriptions: Vec, pub encoding: Arc, - pub observe_file_encoding: Option, } #[derive(Copy, Clone, Debug, PartialEq, Eq)] @@ -1031,7 +1030,6 @@ impl Buffer { change_bits: Default::default(), _subscriptions: Vec::new(), encoding: Arc::new(Encoding::new(encodings::UTF_8)), - observe_file_encoding: None, } } @@ -2937,15 +2935,9 @@ impl Buffer { !self.has_edits_since(&self.preview_version) } - /// Update the `encoding` field, whenever the `encoding` field of the file changes - pub fn update_encoding(&mut self) { - if let Some(file) = self.file() { - if let Some(encoding) = file.encoding() { - self.encoding.set(encoding.get()); - } else { - self.encoding.set(encodings::UTF_8); - }; - } + /// Update the buffer + pub fn update_encoding(&mut self, encoding: Encoding) { + self.encoding.set(encoding.get()); } } diff --git a/crates/project/src/buffer_store.rs b/crates/project/src/buffer_store.rs index ed74e555467736f41f833ba6d5179d80695d2707..92159a4596a15367fef5e34447c25e1f1a8b6b03 100644 --- a/crates/project/src/buffer_store.rs +++ b/crates/project/src/buffer_store.rs @@ -704,7 +704,9 @@ impl LocalBufferStore { anyhow::Ok(()) })??; - buffer.update(cx, |buffer, _| buffer.encoding.set(encoding.get()))?; + buffer.update(cx, |buffer, _| { + buffer.update_encoding(encoding.get().into()) + })?; Ok(buffer) }) diff --git a/crates/worktree/src/worktree.rs b/crates/worktree/src/worktree.rs index 0054af86f0ac4143335bbcf4c3a2b8f07fc37c7c..f8366dacb4dfd13cfb3415b5fefc494f3aa33723 100644 --- a/crates/worktree/src/worktree.rs +++ b/crates/worktree/src/worktree.rs @@ -3085,7 +3085,7 @@ impl PartialEq for File { && self.entry_id == other.entry_id && self.is_local == other.is_local && self.is_private == other.is_private - && if let Some(encoding) = &self.encoding + && (if let Some(encoding) = &self.encoding && let Some(other_encoding) = &other.encoding { if encoding.get() != other_encoding.get() { @@ -3095,7 +3095,7 @@ impl PartialEq for File { } } else { true - } + }) { true } else {