Estas son herramientas que ayudan a mantener el código en los distintos repositorios del proyecto omegaUp con un estilo consistente.
Para agregar hook_tools a tu repositorio:
- Agrega hook_tools como submódulo de git en algún lugar de tu repositorio.
- Agrega un archivo
.lint.config.jsonen la raíz de tu repositorio. - Invoca
hook_tools/lint.py validate --allen tu archivo.travis.ymlo en los git pre-upload hooks. - Si estás en un sistema que soporta correr Docker,
puedes también correr
docker run -v $PWD:/src omegaup/hook_tools validate --all.
Este es un diccionario de configuración de los linters que se van a correr. Los linters soportados (con sus respectivas opciones) son:
clang-format: Corre ClangFormat.html: Corre HTML Tidy.strict: Un bool que indica si se va a correr en modo estricto
javascript: Corre el linter de Prettier.extra_js_linters: Un arreglo con comandos que se van a correr.
json: Corre el linter de Prettier.karel: Corre el linter de Prettier.markdown: Corre el linter de Prettier.php: Corre PHP Code Beautifier.standard: Una cadena con la ruta del estándar de phpcbf.
problematic-terms: Busca términos problemáticos.terms: Una lista de objetos con las siguientes llaves:regexps: Una lista de expresiones regulares a buscar.message: El mensaje a desplegar.allowlist: (Opcional) Una lista de expresiones regulares. Si está definido y ninguna de estas expresiones regulares hace match con el nombre del archivo, el archivo se ignora.denylist: (Opcional) Una lista de expresiones regulares. Si está definido y alguna de estas expresiones regulares hace match con el nombre del archivo, el archivo se ignora.
whitespace: Elimina molestos espacios en blanco, como espacios al final de la línea, múltiples líneas vacías, saltos de línea estilo Windows.style: Corre stylelint.typescript: Corre el linter de Prettier.vue: Corre los linters dejavascriptyhtmlen las distintas secciones de un Vue template.extra_js_linters: Un arreglo con comandos que se van a correr en la sección<script>..</script>del template.stylelint: Un booleano que determina si también se va a correr stylelint en la sección<style>..</style>del template.
python: Corre pep8 y pylint.pep8_config: Una cadena con la ruta del archivo de configuración para pep8.pylint_config: Una cadena con la ruta del archivo de configuración para pylint.
custom: Corre comandos personalizados.commands: Un arreglo con comandos.
Todos los linters soportan dos opciones adicionales:
allowlist: Un arreglo con expresiones regulares. Los archivos a considerar para el linter actual deben de hacer match con al menos un regex de este arreglo.denylist: Un arreglo con expresiones regulares. Los archivos a considerar para el linter actual deben de no hacer match con ningún regex de este arreglo.
Tanto el linter custom como javascript soportan comandos personalizados.
Estos comandos se van a correr tal-cual con dos argumentos extra: el nombre del
archivo (temporal) que debe de actualizarse con el contenido correctamente
formateado, y el nombre de archivo original (si se desea escribir información
de depuración a stderr). Este comando se ejecutará mediante /bin/bash.