python - comentarios - pep8 español
¿Cómo contar líneas de código en Python excluyendo comentarios y cadenas de documentación? (4)
Quiero contar las líneas de código en un proyecto Python de varios archivos con la mayor precisión posible, pero sin incluir comentarios, cadenas de documentos o líneas en blanco en el total.
Primero intenté usar cloc, que está disponible como un paquete Debian. Pero cloc trata la mayoría de las cadenas de documentación como código, aunque sean comentarios. ( Actualización: ya no; las versiones recientes de cloc ahora tratan las cadenas de documentación de Python como comentarios).
Observo algunos comentarios a continuación que dicen que las cadenas de documentación deben incluirse en el total porque el código podría utilizarlas para influir en el comportamiento en tiempo de ejecución y, por lo tanto, contar como parte del código / data / config de los programas. Un ejemplo destacado de esto es ''ply'', que le pide que escriba funciones con cadenas de documentación que, como recuerdo, contienen gramática y expresiones regulares que son fundamentales para el funcionamiento del programa. Sin embargo, esto me parece ser una rara excepción. La mayoría de las veces, las cadenas de documentación actúan como comentarios. Específicamente, sé por un hecho que es cierto para todo el código que quiero medir. Así que quiero excluirlos como tales de mis cuentas de línea.
¿Has mirado http://www.ohloh.net/p/ohcount ? Siempre me ha costado mucho dinero, aunque no uso python
Las líneas de comentario pueden ser líneas de código en python. Ver doctest
por ejemplo.
Además, tendrá problemas para encontrar una manera razonable / confiable de considerar un caso como este como un comentario o un código:
foo = (''spam'',
''''''eggs
eggs
eggs''''''
''''''more spam'''''',
''spam'')
También cuente las líneas de comentarios, creo que la mayoría de los programadores estarán de acuerdo en que es una buena medida para lo que sea que esté tratando de medir.
Probablemente sea correcto incluir las cadenas de documentación de Python en un recuento de "líneas de código". Normalmente, el compilador descartaría un comentario, pero las cadenas de documentación se analizarán:
Ver PEP 257 - Convenciones de Docstring :
Una cadena de documentación es un literal de cadena que se produce como la primera declaración en un módulo, función, clase o definición de método. Dicha cadena de documentos se convierte en el
__doc__
especial__doc__
de ese objeto....
Los literales de cadena que aparecen en otras partes del código Python también pueden actuar como documentación. No son reconocidos por el compilador de bytecode de Python y no son accesibles como atributos de objeto de tiempo de ejecución.
En otras palabras, las cadenas de documentación se compilan y constituyen, de manera muy real, el código del programa. Además, son comúnmente utilizados por el doctest module
para pruebas de unidad, como cadenas de uso para las utilidades de línea de comandos, etc.
Tahar no cuenta las cadenas de documentación. Aquí está su función count_loc:
def count_loc(lines):
nb_lines = 0
docstring = False
for line in lines:
line = line.strip()
if line == "" /
or line.startswith("#") /
or docstring and not (line.startswith(''"""'') or line.startswith("''''''"))/
or (line.startswith("''''''") and line.endswith("''''''") and len(line) >3) /
or (line.startswith(''"""'') and line.endswith(''"""'') and len(line) >3) :
continue
# this is either a starting or ending docstring
elif line.startswith(''"""'') or line.startswith("''''''"):
docstring = not docstring
continue
else:
nb_lines += 1
return nb_lines