04 марта 2010

Delphi 2010: Сносим назойливый Code Formatter

   В далекие школьные годы у нас в школе стоял компьютер ДВК-2М. По сравнению с общераспространенными БК - это было чудо техники, с нормальным монитором и даже с винчестером. На нем я писал свои первые программки. Однажды, когда я писал очередной "шедевр", в соседний кабинет вошла уборщица и включила свет. Этот щелчок включателя я запомнил надолго. При включении света, компьютер моргнул экраном и начал перезагружаться, унеся с собой больше часа моей работы. Это послужило для меня уроком. С тех пор, я регулярно сохраняюсь и, раз в несколько минут, мои руки автоматически жмут Ctrl+S.
   Когда я начал писать свою первую программу на Delphi 2010, я случайно промахнулся и нажал Ctrl+D вместо Ctrl+S. Каково было мое изумление, когда я заметил, что код программы стал выглядеть совсем не так, как я привык его форматировать за свои 14 лет работы с Delphi.
   Я вспомнил, что одним из нововведений Delphi 2010 является "Code Formatter" - встроенный модуль для форматирования исходного кода. Больше часа я бился над его настройкой, но все равно не смог настроить его под себя - он упорно переносил строчки не так как мне нужно. Решив его больше не трогать, я продолжил работать, пока снова, случайно не нажал Ctrl+D...
   Поиски настройки, отключающей это чудо программисткой мысли Embarcadero, ничего не дали и, как я понял, мирным способом договориться с Delphi IDE не форматировать мои исходники не получится.
   Значит, мы пойдем другим путем! Возможности Delphi IDE расширяется за счет отдельных модулей, поэтому существует большая вероятность того, что этот форматер вынесен в отдельную BPL или DLL. Подумав так, я не ошибся - в каталоге "RAD Studio\7.0\bin" я нашел Embarcadero.Modeling.Formatter.dll, в свойствах которой было написано "Embarcadero RAD Studio Formatter". В реестре среди "Known IDE Packages" форматера я не заметил, поэтому, выбрав Embarcadero.Modeling.Formatter.dll, я безжалостно нажал Shift+Delete. С тех пор форматер кода меня больше в Delphi 2010 не беспокоит :)

13 комментариев:

  1. Анонимный05 марта, 2010 09:01

    адский сатана, эмбаркадеровцы рыдали!

    ОтветитьУдалить
  2. Анонимный05 марта, 2010 10:16

    Чувак, мы с тобой братья по ctrl+s, :) спасибо за совет. Пойду убивать форматтер... >:D

    ОтветитьУдалить
  3. Есть еще один способ: Те, кто начинал с Turbo Pascal, работают с Key Mappings "IDE Classic". Там клавиша Ctrl+D это курсор вперед.

    ОтветитьУдалить
  4. Анонимный05 марта, 2010 16:44

    наверняка Ctrl-Z возвращает обратно форматирование

    ОтветитьУдалить
  5. Может Ctrl-Z и возвращает обратно, но когда жмешь Ctrl-S на автомате, то не сразу можно заметить, что форматирование поменялось. Тогда Ctrl-Z отменит и то, что уже полезного наделал.

    ОтветитьУдалить
  6. А у меня на Ctrl+D висит показ списка процедур в юните - поэтому чтобы запустить форматтер приходится специально лезть в меню.

    ОтветитьУдалить
  7. Насколько удобен этот форматтер при работе с чужим кодом - не описать. Первым делом нажимаю Ctrl+D, потом начинаю изучать. Не надо встраивать или отдельно запускать JCF, все под рукой и сразу :)

    ОтветитьУдалить
  8. Установи DDevExtensions (http://andy.jgknet.de/blog/?page_id=10)
    он умеет отлючать. Кроме этого есть ещё пара приятных мелочей.

    ОтветитьУдалить
  9. Согласен с предыдущим комментатором - когда надо разобраться с чужим кодом форматтер экономит кучу времени, т.к. далеко не каждый придерживается всех стандартов оформления кода. Было дело встречал исходник без единого отсупа - автор уверял, что так ему удобнее :)

    ОтветитьУдалить
  10. Анонимный31 марта, 2010 18:13

    Отличный совет, убил DLL и всё как прежде, так помогло!!!. Это форматер просто убивает, маразм, так намучился...

    ОтветитьУдалить
  11. Огромное спасибо! Как же задолбал этот форматер

    ОтветитьУдалить
  12. Ничего не понимаю... ))) А как же галочка EnableFormatter в настройках Delphi XE? Там же, где и ShowConfirmation...

    ОтветитьУдалить
  13. Ключевые слова у вас "в настройках Delphi XE" – в Delphi 2010 галочки "EnableFormatter" не было :)

    ОтветитьУдалить