Browse Source

Slight improvement to smart insertions of {}

merge-requests/389/head
eidheim 7 years ago
parent
commit
5b221b0d29
  1. 7
      src/source.cc
  2. 56
      tests/source_key_test.cc

7
src/source.cc

@ -2595,8 +2595,12 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
} }
// Insert {} // Insert {}
else if(key->keyval == GDK_KEY_braceleft && allow_insertion(iter)) { else if(key->keyval == GDK_KEY_braceleft && allow_insertion(iter)) {
// Do not add } if next line has a higher indentation
auto start_iter = get_start_of_expression(iter); auto start_iter = get_start_of_expression(iter);
// Do not add } if { is at end of line and next line has a higher indentation
auto test_iter = iter;
while(!test_iter.ends_line() && (*test_iter == ' ' || *test_iter == '\t' || !is_code_iter(test_iter) || is_comment_iter(test_iter)) && test_iter.forward_char()) {
}
if(test_iter.ends_line()) {
if(iter.get_line() + 1 < get_buffer()->get_line_count() && *start_iter != '(' && *start_iter != '[' && *start_iter != '{') { if(iter.get_line() + 1 < get_buffer()->get_line_count() && *start_iter != '(' && *start_iter != '[' && *start_iter != '{') {
auto tabs_end_iter = (get_tabs_end_iter(get_buffer()->get_iter_at_line(start_iter.get_line()))); auto tabs_end_iter = (get_tabs_end_iter(get_buffer()->get_iter_at_line(start_iter.get_line())));
auto next_line_iter = get_buffer()->get_iter_at_line(iter.get_line() + 1); auto next_line_iter = get_buffer()->get_iter_at_line(iter.get_line() + 1);
@ -2604,6 +2608,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
if(next_line_tabs_end_iter.get_line_offset() > tabs_end_iter.get_line_offset()) if(next_line_tabs_end_iter.get_line_offset() > tabs_end_iter.get_line_offset())
return false; return false;
} }
}
Gtk::TextIter close_iter; Gtk::TextIter close_iter;
bool has_right_curly_bracket = false; bool has_right_curly_bracket = false;

56
tests/source_key_test.cc

@ -1525,6 +1525,62 @@ int main() {
iter.forward_to_line_end(); iter.forward_to_line_end();
g_assert(buffer->get_insert()->get_iter() == iter); g_assert(buffer->get_insert()->get_iter() == iter);
} }
{
buffer->set_text(" if(true) // test\n"
" ;");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
auto iter = buffer->get_iter_at_line(0);
iter.forward_chars(11);
buffer->place_cursor(iter);
view.on_key_press_event(&event);
g_assert(buffer->get_text() == " if(true) {} // test\n"
" ;");
iter = buffer->get_iter_at_line(0);
iter.forward_chars(12);
g_assert(buffer->get_insert()->get_iter() == iter);
}
{
buffer->set_text(" if(true) // test\n"
" ;");
while(Gtk::Main::events_pending())
Gtk::Main::iteration(false);
auto iter = buffer->get_iter_at_line(0);
iter.forward_chars(11);
buffer->place_cursor(iter);
view.on_key_press_event(&event);
g_assert(buffer->get_text() == " if(true) { // test\n"
" ;");
iter = buffer->get_iter_at_line(0);
iter.forward_chars(12);
g_assert(buffer->get_insert()->get_iter() == iter);
}
{
buffer->set_text(" a= if(true) {\n"
" ;");
auto iter = buffer->get_iter_at_line(0);
iter.forward_chars(4);
buffer->place_cursor(iter);
view.on_key_press_event(&event);
g_assert(buffer->get_text() == " a={} if(true) {\n"
" ;");
iter = buffer->get_iter_at_line(0);
iter.forward_chars(5);
g_assert(buffer->get_insert()->get_iter() == iter);
}
{
buffer->set_text(" if(a==) {\n"
" ;");
auto iter = buffer->get_iter_at_line(0);
iter.forward_chars(8);
buffer->place_cursor(iter);
view.on_key_press_event(&event);
g_assert(buffer->get_text() == " if(a=={}) {\n"
" ;");
iter = buffer->get_iter_at_line(0);
iter.forward_chars(9);
g_assert(buffer->get_insert()->get_iter() == iter);
}
{ {
buffer->set_text("namespace test \n" buffer->set_text("namespace test \n"
"{\n" "{\n"

Loading…
Cancel
Save