Форматирование вложенного класса AStyle

У меня есть следующий код в моем проекте:

class RangeConverter {
private:
struct Converter {
double MinimumInput;
double MaximumInput;

double MinimumOutput;
double MaximumOutput;

template <typename RangeType>
RangeType Convert ( RangeType invalue ) const {
double v = static_cast<double> ( invalue );
if ( v < MinimumInput ) {
v = MinimumInput;
} else if ( v > MaximumInput ) {
v = MaximumInput;
}
double interpolationfactor = ( v - MinimumInput ) / ( MaximumInput - MinimumInput );
return static_cast<RangeType> ( ( interpolationfactor * ( MaximumOutput - MinimumOutput ) ) + MinimumOutput );
}
};
.....

После форматирования этого кода с помощью AStyle я получаю следующее:

class RangeConverter {
private:
struct Converter {
ngeConverter {
private:
struct Converter {
double MinimumInput;
double MaximumInput;

double MinimumOutput;
double MaximumOutput;

template <typename RangeType>
RangeType Convert ( RangeType invalue ) const {
double v = static_cast<double> ( invalue );
if ( v < MinimumInput ) {
v = MinimumInput;
} else if ( v > MaximumInput ) {
v = MaximumInput;
}
double interpolationfactor = ( v - MinimumInput ) / ( MaximumInput - MinimumInput );
return static_cast<RangeType> ( ( interpolationfactor * ( MaximumOutput - MinimumOutput ) ) + MinimumOutput );
}
};
.....

Команда astyle:

astyle
\   --style=java
\   --indent=force-tab=2
\   --indent-classes
\   --indent-switches
\   --indent-labels
\   --indent-preprocessor
\   --indent-col1-comments
\   --pad-oper
\   --pad-paren
\   --delete-empty-lines
\   --add-brackets
\   --align-pointer=type
\   --align-reference=type

Это ошибка в стиле, или я забыл какие-либо варианты?
Если это ошибка, что вы могли бы предложить отформатировать код C ++ с VIM?

4

Решение

Конечно, это ошибка. AStyle не поддерживается в наши дни. Есть много ошибок, которые сидели там вечно и никогда не были решены. Не стоит ожидать улучшения ситуации в ближайшее время. Я настоятельно рекомендую перейти на Uncrustify. Конечно, у него тоже есть некоторые проблемы, но они не такие неприятные и не нарушают ваш код, как это делает AStyle. Он имеет сотни вариантов конфигурации — гораздо более гибкий, чем AStyle — поэтому наберитесь терпения, вам придется потратить немало времени, чтобы настроить его под свои вкусы и условности.

Когда вы закончите и если вы хотите правильно интегрировать его с Vim, здесь вы найдете код, который вы можете добавить в свой .vimrc:

" Restore cursor position, window position, and last search after running a
" command.
function! Preserve(command)
" Save the last search.
let search = @/

" Save the current cursor position.
let cursor_position = getpos('.')

" Save the current window position.
normal! H
let window_position = getpos('.')
call setpos('.', cursor_position)

" Execute the command.
execute a:command

" Restore the last search.
let @/ = search

" Restore the previous window position.
call setpos('.', window_position)
normal! zt

" Restore the previous cursor position.
call setpos('.', cursor_position)
endfunction

" Specify path to your Uncrustify configuration file.
let g:uncrustify_cfg_file_path =
\ shellescape(fnamemodify('~/.uncrustify.cfg', ':p'))

" Don't forget to add Uncrustify executable to $PATH (on Unix) or
" %PATH% (on Windows) for this command to work.
function! Uncrustify(language)
call Preserve(':silent %!uncrustify'
\ . ' -q '
\ . ' -l ' . a:language
\ . ' -c ' . g:uncrustify_cfg_file_path)
endfunction

Теперь вы можете сопоставить эту функцию (Uncrustify) к комбинации клавиш, или вы можете сделать удобный трюк, который я использую. Создать файл ~/.vim/after/ftplugin/cpp.vim где вы можете переопределить любые настройки Vim, особенно для C ++, и добавить туда следующую строку:

autocmd BufWritePre <buffer> :call Uncrustify('cpp')

Это в основном добавляет ловушку перед сохранением. Теперь, когда вы сохраняете файл с кодом C ++, он будет автоматически отформатирован Uncrustify с использованием файла конфигурации, который вы указали ранее.

НОТАВсе представленное здесь хорошо проверено и используется мной каждый день.

1

Другие решения

Других решений пока нет …