Конференция "KOL" » MCK ненавидит автоформатирование [Delphi, Windows]
 
  • Darth Revan (30.07.10 00:52) [0]
    Когда я автоформатирую код на MCK в Delphi 2010, то копирую весь type. К этому приспособиться можно. Но когда я захотел всё это автоматизировать с ptop, то столкнулся с той же проблемой. А автоматиризовать копирование всех типов в буфер довольно проблематично с Batch. Но создать такую "умную" программу я не смогу, поэтому решил искоренить проблему в корне, т.е. в умном коде MCK, который, однако, при любой нестандартизации его кода начинает уродовать код.
    Например, однажды я случайно в коде потерял все пустые строки (не спрашивайте - как). Из-за этого MCK везде наделал что-то типа:
    { KOL MCK } // Do not remove this line!
    {$DEFINE KOL_MCK}
    { KOL MCK } // Do not remove this line
    {$DEFINE KOL_MCK}

    Unit Main;


    Причём, он это делает даже с "восстановленным" с помощью ptop кодом (типы были бережно восстановлены из пустого MCK-проекта).
  • ANTPro © (30.07.10 16:52) [1]
    Возможно поможет:

    [0] VPBar   (13.05.07 10:48)
    Приветствую. Довольно давно пользуюсь KOL (еще с версии 1,80). И обнаружил что при использовании автоформатера в KOL-проектах, начинаются странные глюки. Как оказалось причина в том что форматер убирает пробел в этой строчке '{ KOL MCK } // Do not remove this line!'.  MCK не находит в проекте свою сигнатуру  и заново добавляет ее и инклюды в обьявлении формы. Естественно это уже не компилится. Решение такое:
    Добавляет константу и функцию в mirror.pas

    &#133 const VSignature = '{KOLMCK}//DONOTREMOVETHISLINE!';
    &#133
    // asPos=false — точное совпадение S с сигнатурой.
    // Иначе проверяет вхождение сигнатуры в S
    function isValidSignature(S:String;asPos:Boolean=false):Boolean;
    begin
    S:=KOL.RemoveSpaces(S);
    if asPos then
        result:=Pos(VSignature,KOL.UpperCase(S))>0
    else
     result:=StrComp_NoCase(PChar(VSignature), PChar(S))=0;
    end;
    &#133

    затем все строки где идет сравнение сигнатуры (if Source[ I ] = Signature then) меняем на
    if isValidSignature(Source[ I ]) then.
    И там где идет поиск сигнатуры (if pos( Signature, Source[ I ] ) > 0 then) так же меняем на
    if isValidSignature(Source[ I ]) then.
    Эти изменения делают MCK менее привередливой.
    Пару лет назад, я уже предлагал  на форуме(по моему даже именно на этом) Кладову включить эти изменения в MCK. Но почему-то это не было сделано. Видимо решение не понравилось, или такая проблема возникла только у меня, а остальные форматируют все ручками. Сейчас я опять предлагаю обсудить целесообразность этих изменений. И если они нужны предложить автору KOL внести их в новую версию. Кроме того я изменил MCK, так чтобы он ложил все свои инки в папку kol_inс папки проекта. (Ну не нравится мне заваленная инками папка проекта :) ). Естественно после этих изменений MCK имеет обратную совметимость со старыми проектами (сделанными в MCK без этих изменений).


  • Darth Revan (30.07.10 17:34) [2]
    А почему нельзя просто убрать "// Do not remove this line!" Ведь если один раз уберут, то потом никогда больше не будут.
    Из-за этой надписи только одни проблемы.
    Я уже вылечил код с помощью пустого MCK-проекта (который по ГОСТу). Если смотреть только на Delphi 2010 автоформатирование, то важнее, конечно, сделать более непривередливой колонку типов. Или делать её изначально так, как автоформатирщик Delphi 2010.
 
Конференция "KOL" » MCK ненавидит автоформатирование [Delphi, Windows]
Есть новые Нет новых   [134430   +2][b:0][p:0.002]