Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Статистика строк кода в проектах Lazarus: удобный инструмент для анализа исходного кода

Delphi , Синтаксис , Текст и Строки

 

При работе над крупными проектами на Delphi и Lazarus важно понимать масштабы кодовой базы. Знание количества строк кода (LOC - Lines of Code) помогает оценивать сложность проекта, планировать рефакторинг и контролировать качество кода. В этой статье мы рассмотрим различные способы получения статистики по строкам кода в проектах Lazarus.

Почему важно считать строки кода?

Анализ количества строк кода дает разработчику несколько преимуществ: - Оценка масштабов проекта и его сложности - Контроль соотношения кода, комментариев и пустых строк - Возможность отслеживать рост кодовой базы - Сравнение различных модулей проекта по объему

Решение от сообщества: ProjectMetrics

Один из участников форума Lazarus (munair) разработал удобный инструмент для анализа статистики строк кода - пакет ProjectMetrics. Этот инструмент доступен как отдельная утилита и как интегрированное решение для Lazarus IDE.

Основные возможности ProjectMetrics

  1. Подсчет строк в файлах .pas, .pp, .dpr и .lfm
  2. Разделение на:
  3. Строки кода (включая код с однострочными комментариями)
  4. Строки комментариев
  5. Пустые строки
  6. Поддержка многострочных комментариев ({ ... } и (* ... *))
  7. Предупреждение о незакрытых комментариях
  8. Экспорт результатов в CSV-файл
  9. Интеграция в Lazarus IDE через меню Project

Пример кода анализатора строк

Вот как выглядит основная логика подсчета строк в файле:

procedure CountLinesInFile(const FileName: string; var Source: TSource);
var
  F: TextFile;
  Line: string;
  InCommentBlock: Boolean;
  TrimmedLine: string;
  i: Integer;
begin
  InCommentBlock := False;

  AssignFile(F, FileName);
  try
    Reset(F);
    while not EOF(F) do
    begin
      ReadLn(F, Line);
      TrimmedLine := Trim(Line);

      if Trim(Line) = '' then
      begin
        Inc(Source.EmptyLines);
        Continue;
      end;

      Inc(Source.TotalLines);

      // Проверка однострочных комментариев //
      if not InCommentBlock then
      begin
        i := Pos('//', TrimmedLine);
        if i > 0 then
        begin
          TrimmedLine := Trim(Copy(TrimmedLine, 1, i - 1));
          if TrimmedLine = '' then
            Continue;
        end;
      end;

      // Обработка многострочных комментариев
      if InCommentBlock then
      begin
        i := Pos('}', TrimmedLine);
        if i = 0 then
          i := Pos('*)', TrimmedLine);
        if i > 0 then
        begin
          InCommentBlock := False;
          TrimmedLine := Trim(Copy(TrimmedLine, i + 1, Length(TrimmedLine)));
          if TrimmedLine = '' then
            Continue;
        end
        else
          Continue;
      end;

      // Проверка начала многострочного комментария
      i := Pos('{', TrimmedLine);
      if i = 0 then
        i := Pos('(*', TrimmedLine);
      if i > 0 then
      begin
        if Pos('}', TrimmedLine) > i then
        begin
          TrimmedLine := Trim(Copy(TrimmedLine, 1, i - 1) +
                              Copy(TrimmedLine, Pos('}', TrimmedLine) + 1, Length(TrimmedLine)));
          if TrimmedLine = '' then
            Continue;
        end
        else if Pos('*)', TrimmedLine) > i then
        begin
          TrimmedLine := Trim(Copy(TrimmedLine, 1, i - 1) +
                              Copy(TrimmedLine, Pos('*)', TrimmedLine) + 1, Length(TrimmedLine)));
          if TrimmedLine = '' then
            Continue;
        end
        else
        begin
          InCommentBlock := True;
          TrimmedLine := Trim(Copy(TrimmedLine, 1, i - 1));
          if TrimmedLine = '' then
            Continue;
        end;
      end;

      // Подсчет непустых строк, не являющихся комментариями
      if TrimmedLine <> '' then
        Inc(Source.CodeLines);
    end;

    if InCommentBlock then
      Writeln('WARNING: Unclosed comment block in ', FileName);
  except
    on E: Exception do
      Writeln('Error reading file ', FileName, ': ', E.Message);
  end;
  CloseFile(F);
end;

Альтернативные способы подсчета строк

1. Использование TStrings.Count

Как отметил Thaddy на форуме, можно использовать свойство Count у потомков TStrings:

var
  SL: TStringList;
begin
  SL := TStringList.Create;
  try
    SL.LoadFromFile('unit1.pas');
    ShowMessage('Total lines: ' + IntToStr(SL.Count));
  finally
    SL.Free;
  end;
end;

Этот метод прост, но не разделяет код, комментарии и пустые строки.

2. Утилита wc в Linux

Для быстрого подсчета всех строк можно использовать консольную утилиту wc:

wc -l *.pas

3. Статистика компилятора FPC

Компилятор Free Pascal может выводить статистику по строкам при использовании флагов -v и -B.

Интеграция в Lazarus IDE

Разработчики Lazarus предлагают добавить пункт "Project Statistics" в меню Project. Пакет ProjectMetrics уже реализует эту функциональность, предоставляя удобный интерфейс для анализа кода прямо из среды разработки.

Для установки пакета: 1. Скачайте с GitHub: https://github.com/ssgeos/ProjectMetrics 2. Установите через Package > Open Package File (.lpk) 3. Перестройте IDE

Заключение

Анализ статистики строк кода - важный инструмент для разработчика. Пакет ProjectMetrics предоставляет удобное решение для проектов на Pascal, интегрируясь прямо в Lazarus IDE. Для простых задач можно использовать более легковесные методы, такие как TStrings.Count или консольные утилиты.

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

Создано по материалам из источника по ссылке.

Статья описывает инструменты и методы подсчета строк кода в проектах Lazarus, включая пакет ProjectMetrics и альтернативные решения, для оценки сложности и качества кода.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Текст и Строки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-17 00:14:37/0.0035901069641113/0