From f3d76e08ae93e9cac0c1f6de182a8fc11a671195 Mon Sep 17 00:00:00 2001 From: eidheim Date: Thu, 10 Sep 2020 10:07:50 +0200 Subject: [PATCH] Improved handling of enter after { at beginning of lambda expressions that are arguments --- src/source.cpp | 12 ++++++++++++ tests/source_key_test.cpp | 16 ++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/source.cpp b/src/source.cpp index b7f0cc6..1015bc9 100644 --- a/src/source.cpp +++ b/src/source.cpp @@ -2552,6 +2552,18 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey *event) { scroll_to(get_buffer()->get_insert()); return true; } + /** + * Handle pressing enter after '{' in special expressions like: + * test(2, + * []() { + * func(); + * }); + */ + else if(close_iter.get_line() > condition_iter.get_line() && close_iter.get_line_offset() == get_tabs_end_iter(condition_iter).get_line_offset()) { + get_buffer()->insert_at_cursor('\n' + get_line_before(get_tabs_end_iter(condition_iter)) + tab); + scroll_to(get_buffer()->get_insert()); + return true; + } } // Check if one should add semicolon after '}' diff --git a/tests/source_key_test.cpp b/tests/source_key_test.cpp index 51f63ae..f1e8b01 100644 --- a/tests/source_key_test.cpp +++ b/tests/source_key_test.cpp @@ -601,6 +601,22 @@ int main() { g_assert(buffer->get_insert()->get_iter().get_line() == 1); g_assert(buffer->get_insert()->get_iter().get_line_offset() == 17); } + { + buffer->set_text(" test(2,\n" + " []() {\n" + " func();\n" + " })\n"); + auto iter = buffer->get_iter_at_line_offset(1, 13); + buffer->place_cursor(iter); + view.on_key_press_event(&event); + g_assert(buffer->get_text() == " test(2,\n" + " []() {\n" + " \n" + " func();\n" + " })\n"); + g_assert(buffer->get_insert()->get_iter().get_line() == 2); + g_assert(buffer->get_insert()->get_iter().get_line_offset() == 9); + } { buffer->set_text(" else");