on master help sign in
switch redundant current! usage to doc! (#1416)
93a948dKirawi
helix-term/src/commands.rs+16−26
@@ -1545,7 +1545,7 @@ fn searcher(cx: &mut Context, direction: Direction) {
1545 let reg = cx.register.unwrap_or('/');
1545 let reg = cx.register.unwrap_or('/');
1546 let scrolloff = cx.editor.config.scrolloff;
1546 let scrolloff = cx.editor.config.scrolloff;
1547
1547
1548− let (_, doc) = current!(cx.editor);
1548+ let doc = doc!(cx.editor);
1549
1549
1550 // TODO: could probably share with select_on_matches?
1550 // TODO: could probably share with select_on_matches?
1551
1551
@@ -2046,7 +2046,7 @@ pub mod cmd {
2046
2046
2047 fn write_impl(cx: &mut compositor::Context, path: Option<&Cow<str>>) -> anyhow::Result<()> {
2047 fn write_impl(cx: &mut compositor::Context, path: Option<&Cow<str>>) -> anyhow::Result<()> {
2048 let jobs = &mut cx.jobs;
2048 let jobs = &mut cx.jobs;
2049− let (_, doc) = current!(cx.editor);
2049+ let doc = doc_mut!(cx.editor);
2050
2050
2051 if let Some(ref path) = path {
2051 if let Some(ref path) = path {
2052 doc.set_path(Some(path.as_ref().as_ref()))
2052 doc.set_path(Some(path.as_ref().as_ref()))
@@ -2099,8 +2099,7 @@ pub mod cmd {
2099 _args: &[Cow<str>],
2099 _args: &[Cow<str>],
2100 _event: PromptEvent,
2100 _event: PromptEvent,
2101 ) -> anyhow::Result<()> {
2101 ) -> anyhow::Result<()> {
2102− let (_, doc) = current!(cx.editor);
2102+ let doc = doc!(cx.editor);
2103−
2104 if let Some(format) = doc.format() {
2103 if let Some(format) = doc.format() {
2105 let callback =
2104 let callback =
2106 make_format_callback(doc.id(), doc.version(), Modified::LeaveModified, format);
2105 make_format_callback(doc.id(), doc.version(), Modified::LeaveModified, format);
@@ -2409,7 +2408,7 @@ pub mod cmd {
2409 args: &[Cow<str>],
2408 args: &[Cow<str>],
2410 _event: PromptEvent,
2409 _event: PromptEvent,
2411 ) -> anyhow::Result<()> {
2410 ) -> anyhow::Result<()> {
2412− let (_, doc) = current!(cx.editor);
2411+ let doc = doc!(cx.editor);
2413 let default_sep = Cow::Borrowed(doc.line_ending.as_str());
2412 let default_sep = Cow::Borrowed(doc.line_ending.as_str());
2414 let separator = args.first().unwrap_or(&default_sep);
2413 let separator = args.first().unwrap_or(&default_sep);
2415 yank_joined_to_clipboard_impl(cx.editor, separator, ClipboardType::Clipboard)
2414 yank_joined_to_clipboard_impl(cx.editor, separator, ClipboardType::Clipboard)
@@ -2428,7 +2427,7 @@ pub mod cmd {
2428 args: &[Cow<str>],
2427 args: &[Cow<str>],
2429 _event: PromptEvent,
2428 _event: PromptEvent,
2430 ) -> anyhow::Result<()> {
2429 ) -> anyhow::Result<()> {
2431− let (_, doc) = current!(cx.editor);
2430+ let doc = doc!(cx.editor);
2432 let default_sep = Cow::Borrowed(doc.line_ending.as_str());
2431 let default_sep = Cow::Borrowed(doc.line_ending.as_str());
2433 let separator = args.first().unwrap_or(&default_sep);
2432 let separator = args.first().unwrap_or(&default_sep);
2434 yank_joined_to_clipboard_impl(cx.editor, separator, ClipboardType::Selection)
2433 yank_joined_to_clipboard_impl(cx.editor, separator, ClipboardType::Selection)
@@ -2555,7 +2554,7 @@ pub mod cmd {
2555 args: &[Cow<str>],
2554 args: &[Cow<str>],
2556 _event: PromptEvent,
2555 _event: PromptEvent,
2557 ) -> anyhow::Result<()> {
2556 ) -> anyhow::Result<()> {
2558− let (_, doc) = current!(cx.editor);
2557+ let doc = doc_mut!(cx.editor);
2559 if let Some(label) = args.first() {
2558 if let Some(label) = args.first() {
2560 doc.set_encoding(label)
2559 doc.set_encoding(label)
2561 } else {
2560 } else {
@@ -3247,7 +3246,7 @@ fn symbol_picker(cx: &mut Context) {
3247 nested_to_flat(list, file, child);
3246 nested_to_flat(list, file, child);
3248 }
3247 }
3249 }
3248 }
3250− let (_, doc) = current!(cx.editor);
3249+ let doc = doc!(cx.editor);
3251
3250
3252 let language_server = match doc.language_server() {
3251 let language_server = match doc.language_server() {
3253 Some(language_server) => language_server,
3252 Some(language_server) => language_server,
@@ -3268,7 +3267,7 @@ fn symbol_picker(cx: &mut Context) {
3268 let symbols = match symbols {
3267 let symbols = match symbols {
3269 lsp::DocumentSymbolResponse::Flat(symbols) => symbols,
3268 lsp::DocumentSymbolResponse::Flat(symbols) => symbols,
3270 lsp::DocumentSymbolResponse::Nested(symbols) => {
3269 lsp::DocumentSymbolResponse::Nested(symbols) => {
3271− let (_view, doc) = current!(editor);
3270+ let doc = doc!(editor);
3272 let mut flat_symbols = Vec::new();
3271 let mut flat_symbols = Vec::new();
3273 for symbol in symbols {
3272 for symbol in symbols {
3274 nested_to_flat(&mut flat_symbols, &doc.identifier(), symbol)
3273 nested_to_flat(&mut flat_symbols, &doc.identifier(), symbol)
@@ -3310,17 +3309,15 @@ fn symbol_picker(cx: &mut Context) {
3310}
3309}
3311
3310
3312fn workspace_symbol_picker(cx: &mut Context) {
3311fn workspace_symbol_picker(cx: &mut Context) {
3313− let (_, doc) = current!(cx.editor);
3312+ let doc = doc!(cx.editor);
3314−
3313+ let current_path = doc.path().cloned();
3315 let language_server = match doc.language_server() {
3314 let language_server = match doc.language_server() {
3316 Some(language_server) => language_server,
3315 Some(language_server) => language_server,
3317 None => return,
3316 None => return,
3318 };
3317 };
3319 let offset_encoding = language_server.offset_encoding();
3318 let offset_encoding = language_server.offset_encoding();
3320−
3321 let future = language_server.workspace_symbols("".to_string());
3319 let future = language_server.workspace_symbols("".to_string());
3322
3320
3323− let current_path = doc_mut!(cx.editor).path().cloned();
3324 cx.callback(
3321 cx.callback(
3325 future,
3322 future,
3326 move |_editor: &mut Editor,
3323 move |_editor: &mut Editor,
@@ -3430,8 +3427,7 @@ pub fn code_action(cx: &mut Context) {
3430}
3427}
3431
3428
3432pub fn execute_lsp_command(editor: &mut Editor, cmd: lsp::Command) {
3429pub fn execute_lsp_command(editor: &mut Editor, cmd: lsp::Command) {
3433− let (_view, doc) = current!(editor);
3430+ let doc = doc!(editor);
3434−
3435 let language_server = match doc.language_server() {
3431 let language_server = match doc.language_server() {
3436 Some(language_server) => language_server,
3432 Some(language_server) => language_server,
3437 None => return,
3433 None => return,
@@ -4185,27 +4181,21 @@ fn goto_pos(editor: &mut Editor, pos: usize) {
4185}
4181}
4186
4182
4187fn goto_first_diag(cx: &mut Context) {
4183fn goto_first_diag(cx: &mut Context) {
4188− let editor = &mut cx.editor;
4184+ let doc = doc!(cx.editor);
4189− let (_, doc) = current!(editor);
4190−
4191 let pos = match doc.diagnostics().first() {
4185 let pos = match doc.diagnostics().first() {
4192 Some(diag) => diag.range.start,
4186 Some(diag) => diag.range.start,
4193 None => return,
4187 None => return,
4194 };
4188 };
4195−
4196− goto_pos(editor, pos);
4189+ goto_pos(cx.editor, pos);
4197}
4190}
4198
4191
4199fn goto_last_diag(cx: &mut Context) {
4192fn goto_last_diag(cx: &mut Context) {
4200− let editor = &mut cx.editor;
4193+ let doc = doc!(cx.editor);
4201− let (_, doc) = current!(editor);
4202−
4203 let pos = match doc.diagnostics().last() {
4194 let pos = match doc.diagnostics().last() {
4204 Some(diag) => diag.range.start,
4195 Some(diag) => diag.range.start,
4205 None => return,
4196 None => return,
4206 };
4197 };
4207−
4208− goto_pos(editor, pos);
4198+ goto_pos(cx.editor, pos);
4209}
4199}
4210
4200
4211fn goto_next_diag(cx: &mut Context) {
4201fn goto_next_diag(cx: &mut Context) {
@@ -5270,7 +5260,7 @@ pub fn completion(cx: &mut Context) {
5270 move |editor: &mut Editor,
5260 move |editor: &mut Editor,
5271 compositor: &mut Compositor,
5261 compositor: &mut Compositor,
5272 response: Option<lsp::CompletionResponse>| {
5262 response: Option<lsp::CompletionResponse>| {
5273− let (_, doc) = current!(editor);
5263+ let doc = doc!(editor);
5274 if doc.mode() != Mode::Insert {
5264 if doc.mode() != Mode::Insert {
5275 // we're not in insert mode anymore
5265 // we're not in insert mode anymore
5276 return;
5266 return;
helix-term/src/ui/editor.rs+28−22
@@ -781,8 +781,9 @@ impl EditorView {
781
781
782 pub fn clear_completion(&mut self, editor: &mut Editor) {
782 pub fn clear_completion(&mut self, editor: &mut Editor) {
783 self.completion = None;
783 self.completion = None;
784+
784 // Clear any savepoints
785 // Clear any savepoints
785− let (_, doc) = current!(editor);
786+ let doc = doc_mut!(editor);
786 doc.savepoint = None;
787 doc.savepoint = None;
787 editor.clear_idle_timer(); // don't retrigger
788 editor.clear_idle_timer(); // don't retrigger
788 }
789 }
@@ -940,14 +941,18 @@ impl EditorView {
940}
941}
941
942
942impl Component for EditorView {
943impl Component for EditorView {
943− fn handle_event(&mut self, event: Event, cx: &mut Context) -> EventResult {
944+ fn handle_event(
945+ &mut self,
946+ event: Event,
947+ context: &mut crate::compositor::Context,
948+ ) -> EventResult {
944− let mut cxt = commands::Context {
949+ let mut cx = commands::Context {
945− editor: cx.editor,
950+ editor: context.editor,
946 count: None,
951 count: None,
947 register: None,
952 register: None,
948 callback: None,
953 callback: None,
949 on_next_key_callback: None,
954 on_next_key_callback: None,
950− jobs: cx.jobs,
955+ jobs: context.jobs,
951 };
956 };
952
957
953 match event {
958 match event {
@@ -957,18 +962,19 @@ impl Component for EditorView {
957 EventResult::Consumed(None)
962 EventResult::Consumed(None)
958 }
963 }
959 Event::Key(key) => {
964 Event::Key(key) => {
960− cxt.editor.reset_idle_timer();
965+ cx.editor.reset_idle_timer();
961 let mut key = KeyEvent::from(key);
966 let mut key = KeyEvent::from(key);
962 canonicalize_key(&mut key);
967 canonicalize_key(&mut key);
968+
963 // clear status
969 // clear status
964− cxt.editor.status_msg = None;
970+ cx.editor.status_msg = None;
965
971
966− let (_, doc) = current!(cxt.editor);
972+ let doc = doc!(cx.editor);
967 let mode = doc.mode();
973 let mode = doc.mode();
968
974
969 if let Some(on_next_key) = self.on_next_key.take() {
975 if let Some(on_next_key) = self.on_next_key.take() {
970 // if there's a command waiting input, do that first
976 // if there's a command waiting input, do that first
971− on_next_key(&mut cxt, key);
977+ on_next_key(&mut cx, key);
972 } else {
978 } else {
973 match mode {
979 match mode {
974 Mode::Insert => {
980 Mode::Insert => {
@@ -980,8 +986,8 @@ impl Component for EditorView {
980 if let Some(completion) = &mut self.completion {
986 if let Some(completion) = &mut self.completion {
981 // use a fake context here
987 // use a fake context here
982 let mut cx = Context {
988 let mut cx = Context {
983− editor: cxt.editor,
989+ editor: cx.editor,
984− jobs: cxt.jobs,
990+ jobs: cx.jobs,
985 scroll: None,
991 scroll: None,
986 };
992 };
987 let res = completion.handle_event(event, &mut cx);
993 let res = completion.handle_event(event, &mut cx);
@@ -991,40 +997,40 @@ impl Component for EditorView {
991
997
992 if callback.is_some() {
998 if callback.is_some() {
993 // assume close_fn
999 // assume close_fn
994− self.clear_completion(cxt.editor);
1000+ self.clear_completion(cx.editor);
995 }
1001 }
996 }
1002 }
997 }
1003 }
998
1004
999 // if completion didn't take the event, we pass it onto commands
1005 // if completion didn't take the event, we pass it onto commands
1000 if !consumed {
1006 if !consumed {
1001− self.insert_mode(&mut cxt, key);
1007+ self.insert_mode(&mut cx, key);
1002
1008
1003 // lastly we recalculate completion
1009 // lastly we recalculate completion
1004 if let Some(completion) = &mut self.completion {
1010 if let Some(completion) = &mut self.completion {
1005− completion.update(&mut cxt);
1011+ completion.update(&mut cx);
1006 if completion.is_empty() {
1012 if completion.is_empty() {
1007− self.clear_completion(cxt.editor);
1013+ self.clear_completion(cx.editor);
1008 }
1014 }
1009 }
1015 }
1010 }
1016 }
1011 }
1017 }
1012− mode => self.command_mode(mode, &mut cxt, key),
1018+ mode => self.command_mode(mode, &mut cx, key),
1013 }
1019 }
1014 }
1020 }
1015
1021
1016− self.on_next_key = cxt.on_next_key_callback.take();
1022+ self.on_next_key = cx.on_next_key_callback.take();
1017 // appease borrowck
1023 // appease borrowck
1018− let callback = cxt.callback.take();
1024+ let callback = cx.callback.take();
1019
1025
1020 // if the command consumed the last view, skip the render.
1026 // if the command consumed the last view, skip the render.
1021 // on the next loop cycle the Application will then terminate.
1027 // on the next loop cycle the Application will then terminate.
1022− if cxt.editor.should_close() {
1028+ if cx.editor.should_close() {
1023 return EventResult::Ignored;
1029 return EventResult::Ignored;
1024 }
1030 }
1025
1031
1026− let (view, doc) = current!(cxt.editor);
1032+ let (view, doc) = current!(cx.editor);
1027− view.ensure_cursor_in_view(doc, cxt.editor.config.scrolloff);
1033+ view.ensure_cursor_in_view(doc, cx.editor.config.scrolloff);
1028
1034
1029 // mode transitions
1035 // mode transitions
1030 match (mode, doc.mode()) {
1036 match (mode, doc.mode()) {
@@ -1053,7 +1059,7 @@ impl Component for EditorView {
1053 EventResult::Consumed(callback)
1059 EventResult::Consumed(callback)
1054 }
1060 }
1055
1061
1056− Event::Mouse(event) => self.handle_mouse_event(event, &mut cxt),
1062+ Event::Mouse(event) => self.handle_mouse_event(event, &mut cx),
1057 }
1063 }
1058 }
1064 }
1059
1065