Рассчитать средние строки кода для метода для Javascript - PullRequest
2 голосов
/ 19 сентября 2008

Существуют ли какие-либо инструменты для вычисления среднего числа строк на метод ?

Я хочу знать средний размер каждого метода, а не только общее количество строк в проекте. Счетчик за метод позволит мне измерить, насколько прост каждый метод.

Это будет рассчитано как часть процесса сборки и отображено на приборной панели. Идея в том, что мы можем видеть, увеличивается ли средний размер каждого метода. И это будет указывать на вероятность того, что сложность кода возрастает, и нам, возможно, придется подумать о рефакторинге.

Ответы [ 5 ]

1 голос
/ 19 сентября 2008

Выполните рекурсивный поиск «для (i в этом)» вашего проекта, и, если объект (i) является функцией, вызовите «test.toString (). Split (« \ n »). Length». Это подсчитывает количество новых строк в функции. Если это не функция, а объект, вызовите эту функцию в этом объекте. Также подсчитайте количество функций, которые вы найдете, и затем разделите общее количество новых строк на общее количество функций, а затем получите среднее значение.

Редактировать

function calculateMethodSize(obj){
  var fcount = 0;
  var fsize = 0;
  for(i in obj){
    if(obj[i] instanceof Function){
      fcount++;
      fsize += obj[i].toString().split(";\n").length;
    }else if(obj[i] instanceof Object){
      var ret = calculateMethodSize(obj[i]);
      fcount += ret.fcount;
      fsize += ret.fsize;
    }
  }
  return {fsize:fsize, fcount:fcount};
}
var data = calculateMethodSize(this);
var average = data.fsize / data.fcount;

Будьте осторожны при запуске этого кода. Если вы запустите его с этим, как я сделал, то вы можете получить переполнение стека (я сделал).

0 голосов
/ 16 ноября 2009

Вы, вероятно, хотите включить и другие метрики. в любом случае, вы считаете строки, просто убедитесь, что он не каркает перед функциями, определенными без ключевого слова "function" или фигурных скобок. пример из реальной жизни:

var negate = bind1st(compose, not);

(здесь отрицание - это функция, построенная из функций bind1st, compose и not)

0 голосов
/ 19 сентября 2008

Определить строки как "\ n" или ";",

Вы можете попробовать простой алгоритм, подобный следующему:

FOR each line in a javascript file (or chunk of text)
    IF the line starts with "function " THEN
        PUSH the first left-curly brace you find onto a stack
        WHILE the stack is non-empty
            PUSH any left-curly braces in the current line
            POP any left-curly braces when you encounter a right-curly brace
            Increment your line-count by 1
            Increment your line counter (as mentioned in the FOR loop above)
        END WHILE
        Store your total lines for this function            
     ELSE
         //ignore the line because it's probably a global var or blank
     END IF
END FOR

Я не знаю инструмента, который может сделать это автоматически. Но было бы интересно попробовать сделать это самостоятельно.

0 голосов
/ 19 сентября 2008

short fast and dirty: grep для ";", подсчитайте количество строк, это даст вам оценку количества операторов.

0 голосов
/ 19 сентября 2008

Я не уверен, что это так, но в поисках, после вашего предыдущего поста, что такое цикломатическая сложность, я перешел на соответствующую страницу Википедии, которая указала на Code Analyzer . Там говорят:

При подсчете файлов HTML или JSP он будет правильно рассчитывать LoC для javascript и код vbscript, встроенные в тег .

Я не знаю, отправляется ли этот счет для каждого метода, но, возможно, стоит взглянуть (это бесплатный инструмент).

...