usar locmetrics descargar code advance shell cloc

shell - descargar - locmetrics



CLOC ignora/excluye el archivo de lista(.clocignore) (1)

( Editar: ver la sección Uso apropiado en la parte inferior. )

Pregunta principal

¿Cómo puede hacer que cloc use su --exclude-list-file=<file> ? Esencialmente, estoy tratando de alimentarlo con un archivo .clocignore .

Comportamiento esperado

cloc documentación de cloc dice lo siguiente:

--exclude-list-file=<file> Ignore files and/or directories whose names appear in <file>. <file> should have one entry per line. Relative path names will be resolved starting from the directory where cloc is invoked. See also --list-file.

Intentos

El siguiente comando funciona como se espera:

cloc --exclude-dir=node_modules .

Pero este comando no excluye nada:

cloc --exclude-list-file=myignorefile .

Este es el contenido de myignorefile :

node_modules node_modules/ node_modules/* node_modules/** ./node_modules ./node_modules/ ./node_modules/* ./node_modules/** /full/path/to/current/directory/node_modules /full/path/to/current/directory/node_modules/ /full/path/to/current/directory/node_modules/* /full/path/to/current/directory/node_modules/**

myignorefile no myignorefile error si myignorefile no existe, por lo que no tengo comentarios sobre lo que está haciendo.

(Estoy ejecutando OS X e instalé cloc v1.60 a través de Homebrew).

Uso apropiado

tl; dr : el método especificado en la respuesta de @ Raman requiere que se especifique menos en .clocignore y se ejecuta considerablemente más rápido.

Estimulado por la respuesta de @Raman, investigué el código fuente: cloc de hecho respeta --exclude-list-file pero lo procesa de manera diferente que --exclude-dir de dos maneras importantes.

Nombre de archivo exacto versus ''parte de la ruta''

Primero, mientras que --exclude-dir ignorará cualquier archivo cuyas rutas contengan las cadenas especificadas, --exclude-list-file solo excluirá los archivos o directorios exactos especificados en .clocignore .

Si tienes una estructura de directorios como esta:

.clocignore node_modules/foo/first.js app/node_modules/bar/second.js

Y el contenido de .clocignore es justo

node_modules

Entonces cloc --exclude-list-file=.clocignore . ignorará con éxito first.js pero cuenta second.js . Mientras que cloc --exclude-dir=node_modules . ignorará a ambos.

Para lidiar con esto, .clocignore necesita contener esto:

node_modules app/node_modules

Actuación

En segundo lugar, el código fuente de cloc parece agregar los directorios especificados en --exlude-dir a una lista que se consulta antes de contar los archivos. Mientras que la lista de directorios descubiertos por --exclude-list-file se consulta después de contar los archivos.

Lo que significa que --exclude-list-file aún procesa los archivos, lo que puede ser lento, antes de ignorar sus resultados en el informe final. Esto se confirma mediante un experimento: en una base de código de ejemplo, se tardó medio segundo en ejecutar cloc con --exclude-dir , y 11 segundos en ejecutarse con un equivalente --exclude-list-file .


La mejor solución que he encontrado es alimentar los contenidos de .clocignore directamente a --exclude-dir . Por ejemplo, si está usando bash y tiene tr disponible:

cloc --exclude-dir=$(tr ''/n'' '','' < .clocignore) .