2010-10-17 25 views

Respuesta

14

Usted puede probar estas dos opciones:

  1. Hack rake stats

Rakestats fragmento de entrada de blog:

namespace :spec do 
    desc "Add files that DHH doesn't consider to be 'code' to stats" 
    task :statsetup do 
    require 'code_statistics' 

    class CodeStatistics 
    alias calculate_statistics_orig calculate_statistics 
    def calculate_statistics 
     @pairs.inject({}) do |stats, pair| 
     if 3 == pair.size 
      stats[pair.first] = calculate_directory_statistics(pair[1], pair[2]); stats 
     else 
      stats[pair.first] = calculate_directory_statistics(pair.last); stats 
     end 
     end 
    end 
    end 
    ::STATS_DIRECTORIES << ['Views', 'app/views', /\.(rhtml|erb|rb)$/] 
    ::STATS_DIRECTORIES << ['Test Fixtures', 'test/fixtures', /\.yml$/] 
    ::STATS_DIRECTORIES << ['Email Fixtures', 'test/fixtures', /\.txt$/] 
    # note, I renamed all my rails-generated email fixtures to add .txt 
    ::STATS_DIRECTORIES << ['Static HTML', 'public', /\.html$/] 
    ::STATS_DIRECTORIES << ['Static CSS', 'public', /\.css$/] 
    # ::STATS_DIRECTORIES << ['Static JS', 'public', /\.js$/] 
    # prototype is ~5384 LOC all by itself - very hard to filter out 

    ::CodeStatistics::TEST_TYPES << "Test Fixtures" 
    ::CodeStatistics::TEST_TYPES << "Email Fixtures" 
    end 
end 
task :stats => "spec:statsetup" 
  1. metric_fu - un rubí Gema para Easy Metric Report Generation

PS: No he probado ninguna de las anteriores, pero metric_fu suena interesante, ver las capturas de pantalla de la salida.

29

Aquí hay una solución simple. Cuenta las líneas de código en la carpeta de la aplicación de su proyecto de rieles: CSS, Ruby, CoffeeScript y todo. En la raíz de su proyecto, ejecute este comando:

find ./app -type f | xargs cat | wc -l 
+2

y varios órdenes de magnitud más rápido que cloc, si no te importa la semántica de las líneas que estás contando – pje

+8

realmente no estoy seguro de por qué esto se elevó tanto. Simplemente cuenta líneas de archivos, incluyendo líneas en blanco y comentarios de cualquier código fuente, archivos de configuración, archivos de registro, archivos binarios para gritar en voz alta. Eso es ** muy ** diferente de LOC, por cualquier definición posible de lo que constituye una línea de código . En mi proyecto actual de rieles, esto informa 35K líneas, frente a 19K mucho más preciso de cloc. – Thilo

+0

@Thilo, en realidad no cuenta los archivos de configuración o binarios porque está buscando en la carpeta ./app. Aunque es bastante justo, hay múltiples soluciones para todo. –

94

que utilizar el script Perl cloc libre. Ejemplo de uso:

phrogz$ cloc . 
    180 text files. 
    180 unique files.           
     77 files ignored. 

http://cloc.sourceforge.net v 1.56 T=1.0 s (104.0 files/s, 19619.0 lines/s) 
------------------------------------------------------------------------------- 
Language      files   blank  comment   code 
------------------------------------------------------------------------------- 
Javascript      29   1774   1338   10456 
Ruby       61   577   185   4055 
CSS        10   118   133   783 
HTML        1    13    3   140 
DOS Batch      2    6    0    19 
Bourne Shell      1    4    0    15 
------------------------------------------------------------------------------- 
SUM:       104   2492   1659   15468 
------------------------------------------------------------------------------- 
+40

'brew install cloc' – Chip

+4

Parece que no es compatible con archivos de vista' erb'. 'app/views cloc': 100 archivos de texto. 96 archivos únicos. 100 archivos ignorados ** Actualización: 'cloc app/views --force-lang = html, erb' ** – Mifeng

+0

@Mifeng ¡Muchas gracias! Puedes hacer lo mismo con jade, que tampoco es compatible de forma inmediata. p.ej. 'cloc example/jadeviews --force-lang = html, jade' – Automatico

9

Ésta calcula el número de archivos, el total de líneas de código, comentarios, y el COL promedio por archivo. También excluye archivos dentro de directorios con "proveedor" en su nombre.

Uso:

count_lines('rb') 

Código:

def count_lines(ext) 

    o = 0 # Number of files 
    n = 0 # Number of lines of code 
    m = 0 # Number of lines of comments 

    files = Dir.glob('./**/*.' + ext) 

    files.each do |f| 
    next if f.index('vendor') 
    next if FileTest.directory?(f) 
    o += 1 
    i = 0 
    File.new(f).each_line do |line| 
     if line.strip[0] == '#' 
     m += 1 
     next 
     end 
     i += 1 
    end 
    n += i 
    end 

    puts "#{o.to_s} files." 
    puts "#{n.to_s} lines of code." 
    puts "#{(n.to_f/o.to_f).round(2)} LOC/file." 
    puts "#{m.to_s} lines of comments." 

end 
+2

Esto es tan simple, es hermoso – baash05

Cuestiones relacionadas