Lint es una utilidad de Unix que realiza análisis estático de programas en código fuente en lenguaje C. [ 1 ] El software da nombre a herramientas informáticas modernas responsables de comprobar el estilo de codificación o los errores de formato, conocidas como " linters " o " herramientas de linting ", aunque el programa Lint original realizaba análisis estático de programas .
Historia
Stephen C. Johnson , científico informático de Bell Labs , acuñó el término "lint" en 1978 mientras depuraba la gramática yacc que estaba escribiendo para C y lidiaba con problemas de portabilidad derivados de la adaptación de Unix a una máquina de 32 bits . [ 1 ] El término se tomó prestado de "lint" , las pequeñas fibras y pelusas que se desprenden de la ropa, ya que el comando que escribió actuaría como un filtro de pelusa en una secadora, capturando las fibras de desecho y dejando las telas intactas. El programa lint se lanzó fuera de Bell Labs en Unix V7 , en 1979.
En su artículo de 1978, Johnson explicó sus razones para crear un nuevo programa para detectar errores: "...la idea general de tener dos programas es buena" porque se centran en cosas diferentes, lo que permite al programador "concentrarse en una etapa del proceso de programación únicamente en los algoritmos , las estructuras de datos y la corrección del programa, y luego adaptar, con la ayuda de lint, las propiedades deseables de universalidad y portabilidad". [ 1 ]
El documento enumera las comprobaciones adicionales de Lint como:
- Comprueba si hay variables y funciones no utilizadas;
- Comprueba si existen variables que se utilizan antes de que se les asigne un valor o que se les asigna un valor pero nunca se utilizan;
- Comprueba si hay código inaccesible;
- Comprueba si existen funciones que a veces devuelven un valor y otras veces no devuelven ningún valor;
- comprobación de tipos adicional;
- comprobaciones opcionales para conversiones de tipo no portátiles;
- Comprueba si
charlos valores que se analizan de forma no portátil son negativos; - asignaciones de valores que podrían no encajar en la variable de destino, por ejemplo,
longvalores que se asignan a unaintvariable; - Sentencias válidas de C que no tienen sentido, como una sentencia
*p++;que incrementappero no utiliza el valor previamente incrementado; - posible desalineación del puntero;
- código que se comporta de manera diferente si el orden de evaluación de las expresiones se realiza de manera diferente en distintas plataformas o compiladores;
- Desajustes de tipo entre los parámetros formales y reales de las funciones.
ANSI C introdujo los prototipos de función , lo que permite a los compiladores de ANSI C realizar comprobaciones de incompatibilidades de tipo entre los parámetros formales y reales de una función si se ha visto un prototipo de función antes de que se llame a la función; también añadió el voidtipo para funciones que no devuelven ningún valor, lo que permite a los compiladores comprobar las voidfunciones que sí devuelven un valor, además de comprobar las funciones que tienen un tipo de valor de retorno pero que no devuelven ningún valor. Muchas de las comprobaciones de lint también pueden realizarse como parte del análisis realizado por los compiladores optimizadores , por lo que, cuando se realiza un nivel de optimización suficientemente alto, los compiladores de C también realizarían comprobaciones de variables y funciones no utilizadas, comprobaciones de variables usadas antes de ser asignadas y asignadas y no utilizadas, y comprobaciones de código inalcanzable. Con el tiempo, también se han añadido otras comprobaciones de lint a los compiladores de C.
Sucesores de Lint
Se siguen desarrollando programas similares a lint para realizar comprobaciones de código adicionales, como revisiones de estilo de código y análisis estático de programas . Aunque los compiladores modernos han evolucionado para incluir muchas de las funciones históricas de lint, las herramientas similares a lint también han evolucionado para detectar una variedad aún mayor de construcciones sospechosas. Estas incluyen "advertencias sobre errores de sintaxis, uso de variables no declaradas , llamadas a funciones obsoletas, convenciones de espaciado y formato, mal uso del ámbito, ejecución implícita en sentencias switch , encabezados de licencia faltantes, [y]... características peligrosas del lenguaje". [ 4 ]
Las comprobaciones para hacer cumplir las guías de gramática y estilo para el código fuente de un lenguaje determinado ahora se denominan linting . clang-format de LLVM para C y C++ , Rustfmt para Rust , [ 5 ] PHP CodeSniffer para PHP , ESLint para JavaScript , Stylelint para CSS , Pylint para Python , RuboCop para Ruby y golint para Go son ejemplos de estas herramientas. Algunas de estas herramientas, como ESLint, también permiten que las reglas sean autocorregibles: una definición de regla también puede venir con la definición de una transformación que resuelve la advertencia. Las reglas sobre estilo son especialmente propensas a venir con una autocorrección. Si el linter se ejecuta en modo "corregir todo" en un archivo que activa solo reglas sobre formato, el linter actuará como un formateador.
También se han desarrollado herramientas que realizan análisis estáticos de programas más detallados que los compiladores, como Coverity , cppcheck y el analizador estático Clang . Para JavaScript, ESLint realiza análisis estáticos de programas además de análisis de estilo de código.
Las herramientas tipo Lint son especialmente útiles para lenguajes de tipado dinámico como JavaScript y Python . Debido a que los intérpretes de estos lenguajes generalmente no imponen tantas reglas ni tan estrictas durante la ejecución , las herramientas linter también pueden usarse como depuradores simples para encontrar errores comunes (por ejemplo, discrepancias sintácticas) así como errores difíciles de encontrar, como los heisenbugs (que señalan código sospechoso como "posibles errores"). [ 6 ] Las herramientas tipo Lint generalmente realizan un análisis estático del código fuente. [ 7 ]
Véase también
Referencias
- 1 2 3 4 Johnson, Stephen C. (25 de octubre de 1978). "Lint, un verificador de programas en C" . Comp. Sci. Tech. Rep . Bell Labs: 78–1273 . CiteSeerX 10.1.1.56.1841 . Archivado del original el 23 de enero de 2022.
- ↑ "¡UNIX es libre!" . lemis.com. 24-01-2002.
- ↑ Broderick, Bill (23 de enero de 2002). "Estimados entusiastas de Unix" (PDF) . Caldera International . Archivado del original (PDF) el 19 de febrero de 2009.
- ↑ "Guía del usuario de Arcanist: Lint" . Phabricator . Consultado el 19 de enero de 2018 .
- ↑ rust-lang/rustfmt , El lenguaje de programación Rust, 2025-01-20 , consultado el 2025-01-21
- ↑ "ESLint - Herramienta de análisis de código JavaScript personalizable (1)" . theCodeCampus . 2015-06-09 . Consultado el 2019-04-21 .
- ↑ Jones, Nigel (1 de mayo de 2002). "Cómo usar Lint para el análisis estático de código" . Barr Group .
Lecturas adicionales
- Darwin, Ian F. (1991). Checking C Programs with Lint: C Programming Utility ( Edición revisada). Estados Unidos: O'Reilly Media. ISBN 978-0937175309.
- "LINT(1)" . Manual de comandos generales de NetBSD . 24/01/2024.
- Herramientas de análisis estático de programas
- Software Unix
- Software anteriormente propietario
- Software que utiliza la licencia BSD.