From 01f8377f8a95c2b498fe29218984dd6bbbc7c3c9 Mon Sep 17 00:00:00 2001 From: eidheim Date: Wed, 18 Jul 2018 09:21:16 +0200 Subject: [PATCH] JavaScript and sisimilar languages: corrected indentation where line starts with '.' --- src/source.cc | 17 ++++++++++++----- tests/source_key_test.cc | 9 +++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/source.cc b/src/source.cc index 8c46bd1..97b5beb 100644 --- a/src/source.cc +++ b/src/source.cc @@ -1265,14 +1265,14 @@ Gtk::TextIter Source::View::get_start_of_expression(Gtk::TextIter iter) { return iter; bool has_semicolon = false; - bool colon_test = false; + bool has_open_curly = false; if(is_bracket_language) { if(*iter == ';' && is_code_iter(iter)) has_semicolon = true; if(*iter == '{' && is_code_iter(iter)) { iter.backward_char(); - colon_test = true; + has_open_curly = true; } } @@ -1310,8 +1310,14 @@ Gtk::TextIter Source::View::get_start_of_expression(Gtk::TextIter iter) { test_iter.forward_char() && *test_iter == '<') continue; } + // Handle for instance: test\n .test(); + if(has_semicolon && use_fixed_continuation_indenting) { + auto test_iter = get_tabs_end_iter(iter); + if(!test_iter.starts_line() && *test_iter == '.' && is_code_iter(test_iter)) + continue; + } // Handle : at the beginning of the sentence if iter initially started with { - if(colon_test) { + if(has_open_curly) { auto test_iter = get_tabs_end_iter(iter); if(!test_iter.starts_line() && *test_iter == ':' && is_code_iter(test_iter)) continue; @@ -1323,14 +1329,15 @@ Gtk::TextIter Source::View::get_start_of_expression(Gtk::TextIter iter) { } if(previous_iter.starts_line()) return iter; - if(colon_test && *previous_iter == ':') { + // Handle for instance: Test::Test():\n test(2) { + if(has_open_curly && *previous_iter == ':') { previous_iter.backward_char(); while(!previous_iter.starts_line() && *previous_iter == ' ' && previous_iter.backward_char()) { } if(*previous_iter == ')') { auto token = get_token(get_tabs_end_iter(previous_iter)); if(token != "case") - continue; // Continue at for instance: Test::Test():\n test(2) { + continue; } return iter; } diff --git a/tests/source_key_test.cc b/tests/source_key_test.cc index 0f8b823..cb45db0 100644 --- a/tests/source_key_test.cc +++ b/tests/source_key_test.cc @@ -2208,5 +2208,14 @@ int main() { iter.forward_to_line_end(); g_assert(buffer->get_insert()->get_iter() == iter); } + { + buffer->set_text(" test\n" + " .test();"); + view.on_key_press_event(&event); + g_assert(buffer->get_text() == " test\n" + " .test();\n" + " "); + g_assert(buffer->get_insert()->get_iter() == buffer->end()); + } } }