Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переформатировать код в eclipse, полуавтоматически 
V
    Опции темы
nickless
Дата 16.3.2008, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: нет
Всего: 181



День добрый,

есть плохо отформатированый код, пример:
Код

        // do something
        callBlub(1, 2, 3);
        final String someString = someClass.getBla()
                .getSomeStringByBla(qwert.getType());
        // here we do something very useful, we
        // can
        // do it in that way bla bla, I mean
        // it is so,
        // because of blub.
        if (someStuff.isOfType(bla) && someClass.doStuff()
                .getLengthOrSo() > 3) { // this
            // case
            // is a
            // case
            // in
            // which
            // our
            // formatting
            // really
            // suck
            // because
            // we
            // still
            // describe
            // the
            // if _above_
            // now in the _next_
            // line we
            // do stuff too, and the dеscription is formatted
            // in
            // the same great way
            doStuff();
        }

Особенно мешают комментарии, размазаные на 10 строк и плавно переходящие друг в друга.
На втором месте вызов методов, перенесенный на новую строку вместе с точкой.

Хотелось бы с наименьшими усилиями отформатировать до:
Код

        // do something
        callBlub(1, 2, 3);
        final String someString = someClass.getBla().getSomeStringByBla(qwert.getType());
        // here we do something very useful, we can do it in that way bla bla,
        //  I mean it is so, because of blub.
        if (someStuff.isOfType(bla) && someClass.doStuff().getLengthOrSo() > 3) {
            // this case is a case in which our formatting really suck because
            // we still describe the if _above_

            // now in the _next_ line we do stuff too, and the dеscription is
            // formatted in the same great way
            doStuff();
        }

Автоматически это сделать вряд ли получится, т.к. не известно где кончается первый комментарий и начинается третий.

В vim-е можно отформатировать выбраный блок комментариев коммандой gq, есть ли что-нибудь подобное для эклипсы?

В том же виме можно повесить на шорткат макрос, который бы добавлял к комментарию следующую строчку с форматированием по ширине текста и удалением слэшей где нужно, тогда можно постепенно форматировать такие места, в eclipse как я понял editor macros нет, хотя баг с просьбой добавить их висит уже лет 6...
Может есть плагин, которым можно сделать подобное (повесить на шорткат в том числе)?


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
niasilil
Дата 19.3.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.6.2007
Где: USA

Репутация: нет
Всего: 9



может как то find/replace с использованием регулярных выражений? фиг знает. 

найдешь - расскажи, пожалуйста. 



--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
nickless
Дата 21.3.2008, 04:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: нет
Всего: 181



Цитата(niasilil @  19.3.2008,  14:32 Найти цитируемый пост)
может как то find/replace с использованием регулярных выражений?

В принципе наверно что-то похожее сделать можно, но не до конца, не интерактивно как хотелось бы и уж точно не средствами эклипсы.

Пока стараюсь не обращать внимания или форматирую в виме, как надоест, может напишу какой-нибудь скрипт.

Тем не менее вопрос актуален, макросы хотелось бы иметь в эклипсе в любом случае (кстати видел такой плагин, но он оказался давно заброшеным).


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
niasilil
Дата 3.4.2008, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.6.2007
Где: USA

Репутация: нет
Всего: 9



по большому счету такого случаться не должно когда все в команде использую один и тот же форматтер. А единичные случаи править можно ручками, не так уж сложно. 


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
nickless
Дата 4.4.2008, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: нет
Всего: 181



Цитата(niasilil @  2.4.2008,  23:30 Найти цитируемый пост)
такого случаться не должно

Угу, не должно, но почему-то случается smile 

Цитата(niasilil @  2.4.2008,  23:30 Найти цитируемый пост)
А единичные случаи править можно ручками, не так уж сложно.  

Там весь код такой в наследство достался, не очень много, но 20 KSLOC будет.

Короче сделал так:
Код

#!/bin/sh

# USAGE: format.sh SomeFile.java

# 1. join things like:
# bla = blub
#     .bla();
#
# 2. join comments like this:
# something.bla(); // spread
# // all
# // over
# // the
# // damn
# // code
#
# 3. move long comments after statement to the line before
# something = bla.blub(); // some very very long comment
#
# 4. break long comments on 80 chars
#
# 5. print it to STDOUT
#
perl -0pe 's/([\w\)])([\t ]*)(\n\s+\.)/$1./g' "$1" \
    | perl -0pe 'for ($i=0; $i<20; $i++) { s#(\n[\t ]+)([^\n]+\S)[\t ]+//[\t ]*(\S+(?:[\t ]+\S+)*)[\t ]*\n[\t ]+//[\t ]+(\S+(?:[\t ]+\S+){0,4}\.?)#$1$2 // $3 $4#g; }' \
    | perl -pe 's#(^\s+)(.+[^\t ])\s+//\s*(.+)$#$1// $3\n$1$2#' \
    | perl -pe 's#^(\s+//\s)\s*(.+$)#do { $_ = $2; while (length "$1$_" > 80) { $n = rindex "$1$_"," ",80; \
                    if ($n <= length "$1") { $_ = "$1$_"; break; }; print substr "$1$_",0,$n; print "\n"; $n++; $_ = substr "$1$_",$n; }; $_ = "$1$_"; }#e'

когда сильно надоедает, то прогоняю через скрипт и дорабатываю огрехи vimdiff-ом.

Отсюда мораль,
  •  1. Едитор eclipse = полный отстой
  •  2. Лучше Vim-a еще так ничего и не придумали
  •  3. Perl рулит
ИМХО

Всем спасибо, будем считать тему закрытой.


Это сообщение отредактировал(а) nickless - 4.4.2008, 01:26


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
AlexeyVorotnikov
Дата 4.4.2008, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 1
Всего: 18



Assembler -- forever!!!


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java tools & IDE's | Следующая тема »


 




[ Время генерации скрипта: 0.1497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.