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; return iter;
bool has_semicolon = false; bool has_semicolon = false;
bool colon_test = false; bool has_open_curly = false;
if(is_bracket_language) { if(is_bracket_language) {
if(*iter == ';' && is_code_iter(iter)) if(*iter == ';' && is_code_iter(iter))
has_semicolon = true; has_semicolon = true;
if(*iter == '{' && is_code_iter(iter)) { if(*iter == '{' && is_code_iter(iter)) {
iter.backward_char(); 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 == '<') test_iter.forward_char() && *test_iter == '<')
continue; 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 { // 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); auto test_iter = get_tabs_end_iter(iter);
if(!test_iter.starts_line() && *test_iter == ':' && is_code_iter(test_iter)) if(!test_iter.starts_line() && *test_iter == ':' && is_code_iter(test_iter))
continue; continue;
@ -1323,14 +1329,15 @@ Gtk::TextIter Source::View::get_start_of_expression(Gtk::TextIter iter) {
} }
if(previous_iter.starts_line()) if(previous_iter.starts_line())
return iter; 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(); previous_iter.backward_char();
while(!previous_iter.starts_line() && *previous_iter == ' ' && previous_iter.backward_char()) { while(!previous_iter.starts_line() && *previous_iter == ' ' && previous_iter.backward_char()) {
} }
if(*previous_iter == ')') { if(*previous_iter == ')') {
auto token = get_token(get_tabs_end_iter(previous_iter)); auto token = get_token(get_tabs_end_iter(previous_iter));
if(token != "case") if(token != "case")
continue; // Continue at for instance: Test::Test():\n test(2) { continue;
} }
return iter; return iter;
} }

9
tests/source_key_test.cc

@ -2208,5 +2208,14 @@ 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(" 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