From dd3a02fc7da1fc39c0ff75bc7f164b3747e91d8a Mon Sep 17 00:00:00 2001 From: eidheim Date: Fri, 5 Oct 2018 10:12:21 +0200 Subject: [PATCH] Fixed javascript indentation outside brackets when line starts with (, [ or { --- src/source.cc | 10 ++++++++-- tests/source_key_test.cc | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/source.cc b/src/source.cc index 7274415..76c5d10 100644 --- a/src/source.cc +++ b/src/source.cc @@ -664,7 +664,8 @@ void Source::View::setup_format_style(bool is_generic_view) { try { auto start = get_iter_at_line_offset(atoi(sm[2].str().c_str()) - 1, atoi(sm[3].str().c_str()) - 1); ++num_errors; - while(start.ends_line() && start.backward_char()) {} + while(start.ends_line() && start.backward_char()) { + } auto end = start; end.forward_char(); if(start == end) @@ -1816,7 +1817,12 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey *key) { // [\n 1, 2, 3,\n // return (\n // ReactDOM.render(\n
\n - if((*start_iter == '[' && *iter != ']') || (*start_iter == '(' && *iter != ')') || (*start_iter == '{' && *iter != '}')) { + Gtk::TextIter found_iter; + auto after_start_iter = start_iter; + after_start_iter.forward_char(); + if((*start_iter == '[' && (!find_close_symbol_forward(after_start_iter, found_iter, '[', ']') || found_iter > iter)) || + (*start_iter == '(' && (!find_close_symbol_forward(after_start_iter, found_iter, '(', ')') || found_iter > iter)) || + (*start_iter == '{' && (!find_close_symbol_forward(after_start_iter, found_iter, '{', '}') || found_iter > iter))) { get_buffer()->insert_at_cursor('\n' + tabs + tab); scroll_to(get_buffer()->get_insert()); return true; diff --git a/tests/source_key_test.cc b/tests/source_key_test.cc index f60e3a5..a56bf4b 100644 --- a/tests/source_key_test.cc +++ b/tests/source_key_test.cc @@ -2462,6 +2462,20 @@ int main() { " "); g_assert(buffer->get_insert()->get_iter() == buffer->end()); } + { + buffer->set_text(" {}"); + view.on_key_press_event(&event); + g_assert(buffer->get_text() == " {}\n" + " "); + g_assert(buffer->get_insert()->get_iter() == buffer->end()); + } + { + buffer->set_text("{}"); + view.on_key_press_event(&event); + g_assert(buffer->get_text() == "{}\n" + ""); + g_assert(buffer->get_insert()->get_iter() == buffer->end()); + } } { auto language = language_manager->get_language("markdown");