Démystifier le clean code : Atteindre la qualité et l'efficacité du code avec MegaLinter
Accéder à l’Excellence en Développement peut sembler être un rêve inaccessible pour certains, mais, et s’il existait un moyen d’au moins garantir la qualité de votre code ? Les linters sont des outils qui analysent le code à la recherche d’erreurs potentielles et de violations de style, que ce soit sur votre machine locale ou dans un pipeline CI, offrant ainsi d’autres avantages tels que :
- Adieu les bugs ! utilisez des linters pour identifier et corriger les erreurs potentielles ainsi que les violations de style.
- Améliorez vos compétences en programmation ! les linters peuvent vous aider à apprendre les bonnes pratiques et à améliorer votre style de codage pour faciliter la compréhension et la maintenabilité du code.
- Donnez du style à votre code ! les linters peuvent vous aider à imposer un style de codage cohérent dans l’ensemble de votre projet afin d’améliorer la lisibilité.
C’est quoi megalinter ?
MegaLinter est un outil gratuit et open source permettant d’analyser le code à la recherche d’erreurs et de violations de style. Il prend en charge un large éventail de langages de programmation et peut être exécuté localement ou sur un serveur d’intégration continue (CI). MegaLinter agit comme un linter centralisé, regroupant plusieurs linters et outils d’analyse statique au sein d’un même cadre pour analyser le code à la recherche d’erreurs potentielles et de violations de style. MegaLinter fonctionne avec divers linters, dont ESLint, Prettier et de nombreux autres linters de langage.
Setup de MegaLinter
MegaLinter a une installation en CLI qui vous permet de construire automatiquement des fichiers de configuration et de tâches CI, vous permettant d’exécuter l’analyse de code à chaque pull request ou même à chaque fois qu’un nouveau commit est fait dans un repo (nécessite Node.js et docker pour le local).
Pour exécuter megalinter sur votre repo, vous pouvez effectuer l’analyse localement ou via CI :
Analyse locale
Très simple, il suffit de lancer npx mega-linter-runner --flavor <megalinter-flavor>
megalinter a différentes “Flavors” au cas où vous ne voudriez pas exécuter tous les linters sur votre repo, comme Terraform, Security, Salesforce, Java et bien d’autres.
CI Analysis
Je vais utiliser un exemple de gitlab (vous pouvez consulter d’autres exemples dans Installation)
- Vous pouvez commencer par générer une template avec
npx mega-linter-runner --install
mega-linter: stage: test # You can override MegaLinter flavor used to have faster performances # More info at https://oxsecurity.github.io/megalinter/flavors/ image: oxsecurity/megalinter-terraform:v7.3.0 script: ['true'] # if script: ["true"] does not work, you may try -> script: [ "/bin/bash /entrypoint.sh" ] variables: # All available variables are described in documentation # https://oxsecurity.github.io/megalinter/configuration/ DEFAULT_WORKSPACE: $CI_PROJECT_DIR GITLAB_ACCESS_TOKEN_MEGALINTER: $GITLAB_ACCESS_TOKEN_MEGALINTER # ADD YOUR CUSTOM ENV VARIABLES HERE TO OVERRIDE VALUES OF .mega-linter.yml AT THE ROOT OF YOUR REPOSITORY artifacts: when: always paths: - report expire_in: 1 week- Votre première exécution peut échouer et afficher des erreurs sur votre pull-request (merge-request dans gitlab).
Mais vous n’êtes pas obligé de corriger tous les problèmes signalés, vous pouvez choisir entre :
- Résoudre l’erreur du linter.
- Configurer le linter pour ignorer les règles sur certains linters (comme dans cspell avec le fichier de configuration cspell.json).
- Exclure certains fichiers du processus de linting.
- Désactiver le linter.
- Définir l’erreur comme non bloquante.
Vous pouvez consulter la documentation pour plus d’informations sur la façon de configurer MegaLinter pour une analyse personnalisée et même pour appliquer des corrections automatiques (les corrections ne sont pas destructives, vous pouvez les trouver dans un répertoire séparé généré par MegaLinter) et vous êtes prêt !
Advanced usage
MegaLinter est hautement configurable, et il y a bien plus à découvrir ici Megalinter par OX-Security. Si la liste des linters disponibles ne vous suffit pas, vous pouvez créer vos propres descriptions et les charger en tant que plugins pendant que MegaLinter est en cours d’exécution :
descriptor_id: <descriptor_id>descriptor_type: <descriptor_type>descriptor_flavors: - all_flavors # Applicable to CI in any language project - <flavor_you_are_using>file_extensions: - '.<file_extension>'linters: - linter_name: <linter_name> is_formatter: # true or false depending on whether the tool can apply fixes to the code name: <descriptor>__<linter_name> # in caps linter_repo: <linter_repo?> linter_url: <linter_website?> cli_lint_fix_remove_args: - '<command_used_to_start_analysis>' cli_lint_mode: # list_of_files or project cli_lint_extra_args: - <tool_extra_arguments_for_analysis> # such as debug flags linter_text: | linter description examples: - 'example of command' install: dockerfile: - |- Le format du descripteur est identique à celui des descripteurs intégrés à MegaLinter (voir la documentation du schéma JSON).
- Les fichiers descripteurs de plugin doivent être intitulés .megalinter-descriptor.yml.
- Les plugins doivent se trouver dans un répertoire ou une URL qui commence par /mega-linter-plugin-/.