Как подсчитать количество строк кода в решении C # без комментариев и пустых строк и других избыточных материалов и т. д.?

18

Из-за избыточных вещей я имею в виду пространства имен, поскольку я знаю, что они необходимы, но если их 10 тыс., это не добавляет ценной информации в таблицу.

Можно ли это сделать с помощью Linq?

    
задан Joan Venge 10.05.2011 в 22:31
источник
  • Возможно, если вы сможете объяснить, зачем вам это нужно, тогда может быть предоставлено хорошее решение. –  Bernard 10.05.2011 в 22:36
  • Подождите ... не все ли платят за линию? –  Timothy Strimple 10.05.2011 в 22:38
  • Я хочу сравнить 2 похожих очень больших приложения, и они оба хороши в функциональности, но я хочу знать, какой из них имеет меньше кода, например, если он вдвое меньше, тогда я думаю, что это очень хорошо, потому что это делает больше, чем первый. –  Joan Venge 10.05.2011 в 22:42
  • меньше кода не всегда лучше. Чтобы сохранить ясность (простой принцип KISS и, следовательно, упрощенная поддержка в более продолжительном режиме), всегда лучше писать больше строк четкого и содержательного кода. Как насчет обзора кода? Вероятно, это даст вам больше информации о «хорошем» коде. –  YetAnotherUser 10.05.2011 в 22:47
  • Верно, но я видел код обоих, и я думаю, что у второго есть более приятный код, но я также чувствую, что их версия может быть меньше кода, потому что у них лучшая архитектура. –  Joan Venge 10.05.2011 в 23:00

6 ответов

24

Не нужно изобретать велосипед. Взгляните на Показатели кода Visual Studio Code PowerTool 11.0

  

Обзор

     

Код Metrics PowerTool - это утилита командной строки, которая вычисляет метрики кода для вашего управляемого кода и сохраняет их в XML-файле. Этот инструмент позволяет командам собирать и сообщать показатели кода как часть процесса сборки. Вычисляемые показатели кода:

     

• Индекс работоспособности

     

• Cyclomatic Complexity

     

• Глубина наследования

     

• Сочетание классов

     

• Линии кода (LOC)

Я знаю, что вы сказали, что у вас нет Ultimate, поэтому я просто хотел показать вам, чего вам не хватает.

Для всех остальных существует SourceMonitor

    
ответ дан grenade 10.05.2011 в 22:55
источник
  • Это все еще требует VS 2010. –  Joan Venge 10.05.2011 в 22:59
  • да, или премиум ... –  grenade 10.05.2011 в 23:03
  • Для этой функции требуется VS premium или выше. –  Kyle Trauberman 10.05.2011 в 23:36
  • Btw вы знаете, если строки кода содержат пустые строки, комментарии и т. д.? –  Joan Venge 11.05.2011 в 00:17
  • , конечно, он не включает пустые строки и комментарии. - Отказ: я не говорю с позиции знания или мнения инсайдеров. Я просто считаю, что маловероятно, чтобы какой-то чувак по импульсу на SO перехитрил команду разработчиков в фонд заработной платы в фундаментальном недостатке дизайна. –  grenade 11.05.2011 в 01:13
Показать остальные комментарии
17

Visual studio сделает это за вас. Щелкните правой кнопкой мыши свой проект и выберите Calculate Code Metrics .

    
ответ дан Kyle Trauberman 10.05.2011 в 22:35
источник
  • Нет причин, если есть инструмент, который делает это, но ни в vs 2010, ни в 2008 году, я видел эту опцию, когда я нажимал правой кнопкой мыши на проекте. Это расширение? –  Joan Venge 10.05.2011 в 22:41
  • У меня есть 2010 Ultimate, и он появляется там. Не уверен, что он входит в состав VS, Resharper или Performance Power Tools, которые все установлены. –  grenade 10.05.2011 в 22:46
  • У меня есть только профессиональная версия на работе. Думаю, MS думает, что если вы используете pro, вам не нужен этот инструмент. –  Joan Venge 10.05.2011 в 22:58
  • У меня есть VS Premium. Похоже, что у VS Pro нет этой функции. –  Kyle Trauberman 10.05.2011 в 23:35
  • VS 2015 Professional имеет эту функцию. –  Matt 07.10.2016 в 18:08
2

От: Ссылка

private int CountNumberOfLinesInCSFilesOfDirectory(string dirPath)
{
    FileInfo[] csFiles = new DirectoryInfo(dirPath.Trim())
                                .GetFiles("*.cs", SearchOption.AllDirectories);

    int totalNumberOfLines = 0;
    Parallel.ForEach(csFiles, fo =>
    {
        Interlocked.Add(ref totalNumberOfLines, CountNumberOfLine(fo));
    });
    return totalNumberOfLines;
}

private int CountNumberOfLine(Object tc)
{
    FileInfo fo = (FileInfo)tc;
    int count = 0;
    int inComment = 0;
    using (StreamReader sr = fo.OpenText())
    {
        string line;
        while ((line = sr.ReadLine()) != null)
        {
            if (IsRealCode(line.Trim(), ref inComment))
                count++;
        }
    }
    return count;
}

private bool IsRealCode(string trimmed, ref int inComment)
{
    if (trimmed.StartsWith("/*") && trimmed.EndsWith("*/"))
        return false;
    else if (trimmed.StartsWith("/*"))
    {
        inComment++;
        return false;
    }
    else if (trimmed.EndsWith("*/"))
    {
        inComment--;
        return false;
    }

    return
           inComment == 0
        && !trimmed.StartsWith("//")
        && (trimmed.StartsWith("if")
            || trimmed.StartsWith("else if")
            || trimmed.StartsWith("using (")
            || trimmed.StartsWith("else  if")
            || trimmed.Contains(";")
            || trimmed.StartsWith("public") //method signature
            || trimmed.StartsWith("private") //method signature
            || trimmed.StartsWith("protected") //method signature
            );
}
  1. Комментарии // и / * kind игнорируются.
  2. Оператор, написанный в нескольких строках, считается отдельной строкой.
  3. скобки (т. е. '{') не считаются строками.
  4. Строка
  5. 'using namespace' игнорируется.
  6. Линии, которые являются именем класса и т. д., игнорируются.
ответ дан Yogee 19.09.2014 в 11:13
источник
1

У меня нет твердого представления о них, но вы можете использовать Значения показателей кода для получения некоторые статистические данные о вашем решении, такие как строки кода.

    
ответ дан Akram Shahda 10.05.2011 в 22:36
источник
1

мы использовали куб tfs для получения данных о том, сколько строк добавляет / удаляет / меняет на наших tfs. Этот, который вы можете просмотреть с помощью excel. Но нужно правильно настроить его. И я не думаю, что это исключает комментарии и пустые строки и т. Д.

    
ответ дан spspli 10.05.2011 в 23:22
источник
  • Как вы это сделали? Я пытаюсь получить статистику изменений в нашем проекте, как то, что git (сколько кода осталось от предыдущей версии, сколько было добавлено ...) –  Ziv 21.08.2013 в 11:28
0

Ctrl + Shift + f (Найти в файлах) - & gt; положил ";" в разделе «Найти что:» - текстовое поле - & gt; Нажмите кнопку «Найти все».

Этот чрезвычайно простой метод использует тот факт, что любой оператор C # заканчивается точкой с запятой. И, по крайней мере, я не использую точки с запятой в любом другом месте (например, в комментариях) ...

    
ответ дан Martin777 08.12.2017 в 11:18
источник