Remove Copy trait for enum Operator (#9378)

In this commit, the Copy trait has been removed from Operator. This
change was necessary due to the value of operator may wish to attach a
motion type, which is not compatible with the Copy trait.

All instances where Operator was previously copied have been updated to
use the clone() or cloned() method instead. This includes function
parameters, variable assignments, and closures.
This commit is contained in:
Hans 2024-03-15 12:20:55 +08:00 committed by GitHub
parent ee260910cd
commit badcd3f4d6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 11 additions and 8 deletions

View File

@ -46,7 +46,7 @@ impl Default for Mode {
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Deserialize)]
#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
pub enum Operator {
Change,
Delete,
@ -192,7 +192,7 @@ impl EditorState {
}
pub fn active_operator(&self) -> Option<Operator> {
self.operator_stack.last().copied()
self.operator_stack.last().cloned()
}
pub fn keymap_context_layer(&self) -> KeyContext {
@ -219,7 +219,7 @@ impl EditorState {
let active_operator = self.active_operator();
if let Some(active_operator) = active_operator {
if let Some(active_operator) = active_operator.clone() {
for context_flag in active_operator.context_flags().into_iter() {
context.add(*context_flag);
}
@ -227,7 +227,10 @@ impl EditorState {
context.set(
"vim_operator",
active_operator.map(|op| op.id()).unwrap_or_else(|| "none"),
active_operator
.clone()
.map(|op| op.id())
.unwrap_or_else(|| "none"),
);
if self.mode == Mode::Replace {

View File

@ -124,7 +124,7 @@ impl VimTestContext {
pub fn active_operator(&mut self) -> Option<Operator> {
self.cx
.read(|cx| cx.global::<Vim>().state().operator_stack.last().copied())
.read(|cx| cx.global::<Vim>().state().operator_stack.last().cloned())
}
pub fn set_state(&mut self, text: &str, mode: Mode) {

View File

@ -106,8 +106,8 @@ fn register(workspace: &mut Workspace, cx: &mut ViewContext<Workspace>) {
Vim::update(cx, |vim, cx| vim.switch_mode(mode, false, cx))
});
workspace.register_action(
|_: &mut Workspace, &PushOperator(operator): &PushOperator, cx| {
Vim::update(cx, |vim, cx| vim.push_operator(operator, cx))
|_: &mut Workspace, PushOperator(operator): &PushOperator, cx| {
Vim::update(cx, |vim, cx| vim.push_operator(operator.clone(), cx))
},
);
workspace.register_action(|_: &mut Workspace, n: &Number, cx: _| {
@ -493,7 +493,7 @@ impl Vim {
}
fn active_operator(&self) -> Option<Operator> {
self.state().operator_stack.last().copied()
self.state().operator_stack.last().cloned()
}
fn transaction_begun(&mut self, transaction_id: TransactionId, _: &mut WindowContext) {