Конференция "Прочее" » Диаграмма зависимостей модулей на паскале
 
  • Kerk © (25.04.17 17:47) [20]
    А можно сделать чтобы .dproj/.dpr можно было открывать?
  • zamtmn © (25.04.17 18:05) [21]
    Можно, если ктонибудь сделает чето аналогичное http://svn.shamangrad.net/zcad/trunk/other/pudgb/ulpiimporter.pas для .dproj/.dpr
    только у меня дельфи нет))
  • Kerk © (25.04.17 18:37) [22]

    > zamtmn ©   (25.04.17 18:05) [21]

    DelphiAST умеет превращать вот такой DPR:
    program DelphiASTDemo;

    uses
    //  FastMM4,
     Forms,
     uMainForm in 'uMainForm.pas' {MainForm},
     StringUsageLogging in 'StringUsageLogging.pas';

    //...
    end.

    вот в такой XML:
    <?xml version="1.0"?>
    <UNIT line="1" col="1" name="DelphiASTDemo">
     <USES begin_line="3" begin_col="1" end_line="11" end_col="1">
       <UNIT line="5" col="3" name="Forms"/>
       <UNIT line="6" col="3" name="uMainForm" path="uMainForm.pas"/>
       <UNIT line="7" col="3" name="StringUsageLogging" path="StringUsageLogging.pas"/>
     </USES>
    ...
    </UNIT>



    https://github.com/RomanYankovsky/DelphiAST

    Под FPC должно скомпилироваться без проблем.
  • Kerk © (25.04.17 18:50) [23]
    С dproj я пожалуй погорячился. Я как-то пытался с ними работать, но они отличаются от версии к версии. Геморрой, в общем :) Без особой надобности туда лучше не лезть.
  • Игорь Шевченко © (25.04.17 19:03) [24]
    Kerk ©   (25.04.17 18:50) [23]

    А DProj для анализа и не нужен
  • zamtmn © (25.04.17 19:55) [25]
    Kerk ©   (25.04.17 18:37) [22]
    ниче там такова страшного ненадо, просто прописать главный файл, пути к остальным файлам и инклудам.
    Сделал совсем простецкий вариант:
    http://svn.shamangrad.net/zcad/trunk/other/pudgb/udpropener.pas
    Бинарник перевыложил.
    После открытия dpr параметры "опции компилятора" становятся
    >>-Sd -Sc -dWINDOWS -dMSWINDOWS -dWIN32 -dLCLWIN32 -dFPC -dCPU32 -dLCLWIN32
    -Sd - совместимость с делфи
    -Sc - С style operators
    -d - разные предефайны, их надо привести в соответствие с делфи
    также возможно придется добавить ручками в опции компилятора пути к инклудам в виде -FiК:\инклудам\путь\пиши\сюда

    >>Игорь Шевченко ©   (25.04.17 19:03) [24]
    надо для автоматической настройки путей. но всё можно и руками
  • Игорь Шевченко © (25.04.17 21:58) [26]

    > надо для автоматической настройки путей. но всё можно и
    > руками


    DCC_UnitSearchPath, DCC_IncludePath
  • zamtmn © (25.04.17 22:07) [27]
    >>DCC_UnitSearchPath, DCC_IncludePath
    да, прочитать пару элементов, разматать пару макросов. Для лазаруса у меня это сделано, для Delphi нет возможности сделать
  • zamtmn © (28.04.17 11:08) [28]
    Kerk ©   (25.04.17 18:37) [22]
    >>DelphiAST умеет превращать вот такой DPR:

    Посмотрел AST - это парсер, а не средство чтения DProj. Я использую парсер из поставки fpc, так что не подойдет
  • zamtmn © (03.05.17 20:30) [29]
    Добавил возможность "кластеризации" графа. Юниты расположенные по одному пути находятся внутри кластера, название кластера это путь к этим юнитам (слэши заменены на нижний прочерк изза особенностей языка графвиза) то что было на скрине [19] в "кластерном" варианте выглядит так http://imgur.com/a/Ijz08
  • zamtmn © (04.05.17 00:44) [30]
    Если сравнить "кластеризированую" картинку из [29] (можно и без кластеров, но это не так наглядно) c деревом наследования классов http://imgur.com/a/mzKBb то видно основную "нитку" (красная почеркушка) и понятно что от остальных связей лучше постараться избавится. От всех избавится не получится, но от помеченых 1 и 2 вполне можно.
    1 - связь образована изза одной единственной глобальной переменной в модуле uzglviewareageneral и приносит столько мусора. Переместил переменную в другой модуль и готово.
    2 - для избавления нужны более глобальные изменения, оставлю это на потом))
    В результате без 1 получилась более-менее годная картинка http://imgur.com/a/Ggz67
  • Pavia © (05.05.17 12:21) [31]
    zamtmn не пойму откуда у вас циклические зависимости. Можете приложить простой пример с 2-3 циклами.
  • zamtmn © (05.05.17 21:36) [32]
    Pavia ©   (05.05.17 12:21) [31]
    В [30] циклов нет, это просто структура модулей проекта.
    Циклы есть в [14] Самый простой пример это 2 модуля uses друг друга в секции implementation.

    Или например:
    unit Unit1;

    {$mode objfpc}{$H+}

    interface

    uses
     Unit2;

    type
     TForm1 = class(TForm)
     private

     public

     end;

    var
     Form1: TForm1;

    implementation

    {$R *.lfm}

    end.


    unit Unit2;

    {$mode objfpc}{$H+}

    interface

    uses
     Unit3, Unit4;

    implementation

    end.



    unit Unit3;

    {$mode objfpc}{$H+}

    interface

    implementation
    uses
     unit1;

    end.



    unit Unit4;

    {$mode objfpc}{$H+}

    interface

    implementation
    uses
     unit1;

    end.




    Дает вот такое
    DiGraph Classes {
    edge [style=solid]
    Unit1_1_0 -> Unit2_2_0
    edge [style=solid]
    Unit2_2_0 -> Unit3_1_1
    edge [style=solid]
    Unit2_2_0 -> Unit4_1_1
    edge [style=dotted]
    Unit3_1_1 -> Unit1_1_0
    edge [style=dotted]
    Unit4_1_1 -> Unit1_1_0
    }

  • zamtmn © (15.05.17 09:51) [33]
    Ну и еще один довольно забавный пример использования.
    Я в качестве хобби делаю векторный редактор, когдато давно он для рисования использовал только opengl, потом со временем научился использовать gdi. Но остался "пропитан" opengl кодом, который я постепенно "вычщал" До недавнего времени думал что вычистил всё и остались только "неустранимые" зависимости)) Но глянув зависимости получил такой ужас:
    http://imgur.com/a/MpHDD красное пятно сверху - главный файл программы, красное пятно снизу справа - gl.pas посередине "пути" по которым главный файл подключает gl.pas

    После нескольких исправлений всё встало на свои места http://imgur.com/a/e6syA
    Только 4 "неустранимых" на данный момент "зависимости":
    uzcreginterface - показывает в интерфейсе программы версию gl и glu
    uzeffttf - использует glu для триангуляции ttf символов
    uzeentspline - использует glu для тесселяции сплайнов
    uzglviewareaogl - вариант opengl рендера картинки
  • zamtmn © (23.05.17 00:02) [34]
    Попытался сделать самостоятельную отрисовку графа http://imgur.com/a/yQ0tl
    Сделал вывод что svg отстойный формат((
  • Pavia © (23.05.17 00:09) [35]
    А как граф строили? Ручками или хитрым алгоритмом?
    Да я тоже от SVG не в восторге, а есть чем заменить?
  • zamtmn © (23.05.17 00:34) [36]
    svg файл с графом получен от графвиза.
    В общем случае - хз. Конкретно в данном случае все альтернативы тут http://www.graphviz.org/doc/info/output.html
 
Конференция "Прочее" » Диаграмма зависимостей модулей на паскале
Есть новые Нет новых   [134430   +4][b:0.001][p:0.002]