Browse Source

JavaScript and sisimilar languages: corrected indentation where line starts with '.'

merge-requests/389/head
eidheim 7 years ago
parent
commit
01f8377f8a
  1. 17
      src/source.cc
  2. 9
      tests/source_key_test.cc

17
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;
}

9
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());
}
}
}

Loading…
Cancel
Save