de plus en plus d’équipes ont adopté les linters et autres outils statiques dans leur processus de développement. Certains les ont intégrés dans l’e de leur préférence, d’autres automatisés en les exécutant comme une étape supplémentaire dans leur CI. En outre, certains courent dans les deux sens.
qu’est-Ce qu’un linter, alors?
selon Wikipedia, linter
est un outil qui analyse le code source pour signaler les erreurs de programmation, les bogues, les erreurs stylistiques et les constructions suspectes.,
le premier linter a été écrit par Stephen C. Johnson en 1978 alors qu’il travaillait dans le système D’exploitation Unix chez Bell Labs. Après cela, de nombreux autres linters sont apparus à des fins et dans différents langages, pas seulement C.
Les premiers linters utilisés pour vérifier le code source et trouver des optimisations potentielles pour les compilateurs. Mais, au fil des ans, de nombreux autres contrôles et analyses seraient inclus dans le processus de peluches.
l’utilisation de linters a également aidé de nombreux développeurs à écrire un meilleur code pour les langages de programmation non compilés., Comme il n’y a pas de compilation d’erreurs de temps, de recherche de fautes de frappe, d’erreurs de syntaxe, d’utilisations de variables non déclarées, d’appels à des fonctions non définies ou obsolètes, par exemple, aidant les développeurs à le corriger plus rapidement et à réduire les bogues avant l’exécution.
Linters ont évolué
Linters ont évolué. Ils ont commencé avec ces simples contrôles, mais de nos jours, ils deviennent de plus en plus sophistiqués. Ils effectuent des analyses statiques, appliquent des indicateurs de configuration, vérifient la conformité avec un guide de style ou une règle de sécurité donnée, et bien plus encore.,
explorons certaines de ces vérifications et comment elles peuvent vous être utiles.
analyse statique
L’analyse statique signifie que le logiciel automatisé s’exécute à travers votre source de code sans l’exécuter. Il vérifie statiquement les bogues potentiels, les fuites de mémoire et toute autre vérification utile.
Si vous êtes un développeur Python, vous connaissez peut-être déjà Radon. Il peut compter les lignes de code source (SLOC), les lignes de Commentaires, Une Ligne vierge et d’autres métriques brutes, mais aussi calculer un « indice de maintenabilité”, ce qui peut être très important dans certains projets.
C’est juste un exemple., Il existe de nombreux autres linters qui effectuent des contrôles D’analyse statique.
E-book gratuit: Cliquez ici pour télécharger le E-book gratuit décodage Code Review et Pull Requests. Obtenez tous les points clés et les meilleures pratiques pour mettre en œuvre une culture de révision de code.
Code de la normalisation
à Partir de https://xkcd.com/1285/
la Normalisation votre code est un excellent moyen pour déplacer la conversation vers un plus niveau productif., Avoir une ligne directrice et exécuter des linters contre la base de code évite les changements esthétiques dans votre pull request, comme le remplacement de tous les onglets pour les espaces, l’indentation d’une affectation de variable ou même les sauts de ligne après un nombre donné de caractères.
maximiser les changements significatifs amène votre discussion à des sujets importants, comme les décisions architecturales, les problèmes de sécurité ou les bogues potentiels.
en passant, les problèmes de sécurité et les bugs potentiels peuvent également être évités par linters!
problèmes de sécurité
Si vous aimez Rails, vous avez probablement entendu parler de Brakeman., C’est un outil de sécurité D’analyse statique. Il est bénéfique de trouver des problèmes de sécurité potentiels. Par exemple, il exécute des vérifications à la recherche D’une Injection SQL lors de l’utilisation de #find_or_create_by
D’ActiveRecord et de ses amis. Il ajoute également des vérifications pour XSS, les options de configuration, et bien plus encore.
Ruby n’est pas le seul langage avec ce type de moteur. SourceLevel prend en charge de nombreux moteurs pour différentes langues. Freineur inclus.
les Éventuels bugs
JavaScript a quelques astuces. L’un des plus célèbres est la différence entre ==
et ===
., C’est une bonne pratique, et cela évite beaucoup de temps de débogage, d’utiliser toujours ===
. Si vous activez, par exemple, ESLint pour vérifier cela, il peut vous dire quelle partie de votre code utilise ==
et même le remplacer pour vous.
amélioration des performances
chaque développeur expérimenté connaît non seulement l’importance de l’exécution de logiciels, mais de nombreuses astuces qui l’améliorent. Le problème est: qu’en est-il des nouveaux arrivants? Comment Pouvez-vous transmettre cette connaissance? Même les programmeurs seniors peuvent manquer une technique ou deux. Alors, pourquoi ne pas laisser un logiciel d’automatisation le faire pour vous?,
saviez-vous qu’en CSS, le sélecteur universel (*) peut ralentir le temps de chargement d’une page? Ou que les sélecteurs d’attributs non qualifiés ont les mêmes caractéristiques de performance que le sélecteur universel? Pour les éviter est de bonne pratique.
de nombreux linters incluent une vérification des performances. Ils peuvent ajouter différents types d’améliorations de performances pour les expérimentés et les nouveaux développeurs. CSSLint n’est qu’un exemple.
Et bien d’autres aspects
Vers l’infini et au-delà!, Il y a beaucoup, beaucoup de linters pour différents langages de programmation, fichiers de configuration, et même pour les intégrations logicielles. Toute vérification qui compte et peut être automatisée peut se transformer en linter.
Si vous travaillez dans un scénario particulier, vous devrez écrire votre linter, même si c’est pas trop susceptible, dans notre industrie. Les contrôles pour les fonctionnalités D’accessibilité HTML, les erreurs potentielles D’internalisation, les erreurs de grammaire et bien d’autres sont déjà là, en open source, en attente de téléchargement, de configuration et de début d’utilisation.
les Avantages de l’absence de peluches
Selon Ferit T.,, linting améliore la lisibilité, supprime les erreurs stupides avant l’exécution et la révision du code. Mais, comme mentionné, linting peut effectuer des tâches plus complexes, comme détecter les odeurs de code ou effectuer une analyse statique de votre base de code.
mais, en pratique, quels sont les avantages de la peluche?
il améliore le niveau de discussion de révision de code
Si votre Pull Request n’a pas de fautes de frappe, ni de variables inutilisées, et est conforme au Guide de style, la conversation a tendance à se concentrer sur le point de vue de l’architecture. C’est tout., Pull Request est un excellent endroit pour pointer les problèmes de performance, les vulnérabilités des titres ou suggérer de meilleures abstractions. Vous n’avez pas besoin d’entrer dans cette discussion entre guillemets simples ou doubles ou entre onglets et espaces. C’est un gain de productivité à coup sûr.
rend le code comme écrit par une seule personne
à moyen et long terme avoir une base de code fiable qui ressemble à écrit par la même personne est excellent. La maintenabilité et l’évolution sont plus faciles car tout le monde a tendance à comprendre ce qui est écrit plus rapidement et plus précisément., Il prévient les bugs, rend le travail plus joyeux pour les développeurs et accélère le délai de mise sur le marché des nouvelles fonctionnalités.
donne une visibilité de la santé de votre base de code
votre code est-il sain? Vous ne le saurez pas tant que vous ne l’aurez pas mesuré. Une façon intéressante de le faire est d’ajouter une étape dans votre pipeline CI / CD pour mesurer l’évolution de l’état de santé de votre code. Mieux que cela, vous pouvez agir dès que possible lorsque vous voyez sa santé se dégrader., De telles actions peuvent impliquer la création de cartes de débit techniques dans votre conseil d’administration ou même soulever le problème lors de votre rétrospective agile ou de la réunion du Comité d’architecture.
diffuse la prise de conscience et l’appropriation de la qualité du code
Les développeurs expérimentés peuvent examiner un diff et soulever des questions pertinentes au sujet du changement proposé. Ils savent probablement où chercher: les noms de variables sont-ils descriptifs? Combien de lignes une méthode prend-elle? Est-il un super-classe?
mais qu’en est-il des nouveaux arrivants? Les connaissances dans une équipe sont souvent hétérogènes. Cela signifie que tous les développeurs ne savent pas quoi regarder sur le code., Avoir un linter pour dire où se trouvent automatiquement les odeurs de code est un excellent moyen de diffuser ces connaissances et de rendre l’équipe responsable des changements.
la qualité n’est pas une responsabilité individuelle. Il est essentiel de mesurer et de contrôler la qualité du code au fil du temps. Sinon, le code devient désordonné, ce qui ralentit le développement et le délai de mise sur le marché.,
contrôle les dettes techniques
comme de nombreux linters modernes recherchent des dettes techniques possibles, comme des odeurs de code, des incohérences de guide de style ou du code mal conçu (chaînes profondes d’instructionsif
, ou des méthodes trop complexes, par exemple), linters est en corrélation avec la dette technique.
rendre les dettes techniques explicites pendant le processus de révision du code aide les développeurs de logiciels ou les ingénieurs à les repérer, à Les discuter et à les corriger avant la fusion dans la branchemaster
. C’est une pratique très pratique qui contrôle les insertions de dettes techniques.,
Automatisez votre revue de Code: SourceLevel prend en charge +30 linters pour vous aider à améliorer la qualité du code. Cliquez ici pour voir une démo ou commencer un essai gratuit.
exemples de linters
Il existe un grand nombre de linters. Selon le langage de programmation, il y a même plus d’un linters pour chaque travail. Par exemple, pour le langage de programmation Go, il y a ktlint et detekt. Effectuer un travail similaire. La même chose arrive à eslint, un linter conçu pour JavaScript. Cela fonctionne très similaire à tslint ou jshint.,
Linters, axée sur la Sécurité
- Freineur pour Ruby
- Bandit pour Python
- Nœud de Sécurité pour JavaScript
Linters axée sur le guide du style et des conventions de codage
- CSSLint., SCSS Peluches et Sass de la Charpie pour les feuilles de Style en Cascade
- Gofmt pour Aller de la langue
- Swiftlint pour Switft
- rustfmt pour la Rouille
- Credo pour Elixir
les Linters de l’Analyse Statique
- pep8 pour Python
- Phan ou PHP Mess Detector PHP
- kibit pour Clojure, ClojureScript, cljx, et d’autres Clojure variantes.
- PMD pour Java
Conclusion
les Linters vous aident à devenir plus productif et vous font gagner du temps et de l’argent. Ils conduisent votre équipe à de meilleures décisions (celles orientées par les données) et partagent la propriété sur la qualité.,
chez SourceLevel, nous soutenons beaucoup de linters. Ils s’exécutent contre chaque demande d’extraction ouverte et commentent la ligne appropriée et déposent les problèmes trouvés. Il augmente la productivité et l’efficacité des développeurs.
nous appelons cela l’automatisation de la revue de code. Chaque référentiel peut avoir son fichier de configuration, puis faire examiner les pull requests selon les règles de style-guide choisies.