Skip links

Liste des linters open source : mise à jour de juillet 2018

Il y a un an, nous vous proposions sur ce blog une infographie recensant une liste non exhaustive de linters open source. Un linter est un utilitaire qui aide les équipes de développement à maintenir un code uniforme et/ou à détecter des bugs potentiels au plus tôt. Certains d’entre eux, à l’instar de Prettier, sont dédiés à la mise en forme du code par rapport à un ensemble de règles que vous avez choisi d’adopter.

Nous avions recensé plus d’une centaine de linters dans notre infographie initiale, dont la grande majorité était des projets hébergés sur la plateforme open source GitHub. Nous avions collecté des métriques telles que le nombre de “stars”, révélateur d’une certaine popularité d’un projet auprès des communautés de développeurs et de développeuses. Un an plus tard, nous avons mis à jour ces données et vous en offrons un aperçu.

Rappelons qu’il ne s’agit pas ici de juger les linters entre eux, mais plutôt de centraliser et de vous faire partager notre recherche d’informations.

 

Nouveaux linters dans la liste

Nous avons intégré 9 nouveaux linters dans notre corpus par rapport à celui de l’année dernière. Tous se trouvent sur GitHub. 5 d’entre eux sont des projets ayant démarré depuis l’été 2017 :

  • go-critic (Go) – 201 stars
  • lynt (TypeScript) – 336 stars
  • revive (Go) – 201 stars
  • safeymal (Yaml) – 227 stars
  • solium (Solidity) – 512 stars

Et 4 d’entre eux existent depuis plus longtemps, mais avaient été simplement omis de la première liste :

  • php-cs-fixer (Php) – 6 220 stars
  • codelyzer (TypeScript) – 1 724 stars
  • ts-style (TypeScript) – 713 stars
  • phpstan (Php) – 4 220 stars

Evolution en termes de “stars” sur GitHub

Si l’on regarde de plus près les plus fortes évolutions en termes de “stars” en comparaison avec l’année dernière, voici le top 15 (en termes de valeur absolue) :

 

Language Linter Stars Evolution depuis 2017
JavaScript prettier 26 125 + 13 995
JavaScript standard 18 569 + 6 228
JavaScript eslint 11 900 + 3 923
Shell shellcheck 11 720 + 3 669
Swift swiftlint 9 759 + 2 644
Java checkstyle 3 778 + 1 683
CSS stylelint 5 138 + 1 659
TypeScript tslint 3 636 + 1 607
PHP phpcpd 1 529 + 1 529
PHP php-codesniffer 5 131 + 1 510
Ruby rubocop 9 206 + 1 396
PHP phan 3 514 + 1 299
JavaScript xo 3 839 + 1 169
Java error-prone 3 807 + 1 104
Go gometalinter 2 818 + 1 103

 

Ce qui saute rapidement aux yeux est que les 3 premiers de ce classement sont tous des linters JavaScript, et que leur progression est très marquée, surtout Prettier qui a doublé de popularité sur la plateforme GitHub. Pour le reste, on observe des linters orientés Web (Php (3), Typescript (1), Javascript (1) et CSS (1)), mais également le linter ShellCheck qui semble plébiscité par la communauté GitHub. Rappelons que cet indicateur de popularité n’est pas qualitatif, et ne permet pas de juger qu’un linter est plus pertinent qu’un autre.

 

Répartition des stars par langage

Si l’on regarde le top 10 des langages recueillant le plus de stars dans notre corpus, nous obtenons le classement suivant (pour un total de 227 000 stars cumulées) :

 

Langage Nombre de stars
JavaScript 73 645
PHP 21 038
Ruby 19 027
CSS 13 594
Shell 11 761
Swift 10 976
Java 10 382
Go 9 557
Python 6 623
HTML 6 507

 

On retrouve à nouveau JavaScript mais aussi Php dans le top de ce classement. Si l’on compare avec les données du projet GitHub qui fournit des statistiques sur l’utilisation de la plateforme GitHub, parmi les 10 langages qui ont été le plus “pushed” sur des dépôts GitHub au deuxième trimestre 2018, seuls les 3 langages C, C++ et C# ne sont pas dans notre liste.

 

Liste de 138 linters au 19 Juillet 2018

Voici la liste définitive pour cette année 2018, triée par langage/framework/technologie. Nous avons également intégré 9 linters qui ne sont pas hébergés sous Github. La date du dernier commit sur le dépôt révèle un certain niveau d’activité sur chacun des linters (cette donnée a été récupérée pour les projets sous GitHub uniquement).

Rendez-vous l’année prochaine pour une nouvelle mise à jour !

 

Langage Nom Url Dernier commit Stars
Android lint http://tools.android.com/tips/lint
BrightScript bslint https://github.com/sky-uk/bslint 30/05/2017 22
C/C++ oclint https://github.com/oclint/oclint 11/07/2018 2 685
C/C++ splint https://github.com/ravenexp/splint 14/11/2010 62
C# sonar-csharp https://github.com/SonarSource/sonar-csharp 18/07/2018 188
C# gendarme https://github.com/mono/mono-tools 24/10/2016 132
C++ vera https://bitbucket.org/verateam/vera/wiki/Home
C++ cppcheck http://cppcheck.sourceforge.net/
C++ flawfinder https://www.dwheeler.com/flawfinder/
Chef foodcritic https://github.com/foodcritic/foodcritic 28/06/2018 408
Clojure joker https://github.com/candid82/joker 08/07/2018 393
Clojure kibit https://github.com/jonase/kibit 02/05/2018 1 416
Clojure eastwood https://github.com/jonase/eastwood 10/07/2018 811
CoffeeScript coffeelint https://github.com/clutchski/coffeelint 16/02/2018 1 002
CSS stylelint https://github.com/stylelint/stylelint 18/07/2018 5 138
CSS csscomb https://github.com/csscomb/csscomb.js 09/08/2017 2 652
CSS csslint https://github.com/CSSLint/csslint 29/12/2017 4 283
CSS doiuse https://github.com/anandthakker/doiuse 23/03/2018 767
CSS ie8linter https://github.com/israelidanny/ie8linter 30/11/2015 754
D D-Scanner https://github.com/dlang-community/D-Scanner 29/06/2018 173
Dart dart_style https://github.com/dart-lang/dart_style 17/07/2018 179
Dart linter https://github.com/dart-lang/linter 18/07/2018 59
Django django-lint https://github.com/lamby/django-lint 30/08/2017 169
Dockerfile hadolint https://github.com/lukasmartinelli/hadolint 14/07/2018 1 066
Dockerfile dockerfilelint https://github.com/replicatedhq/dockerfilelint 13/09/2017 299
Dockerfile dockerlint https://github.com/RedCoolBeans/dockerlint 22/05/2018 122
EditorConfig eclint https://github.com/jedmao/eclint 11/07/2018 185
Elixir credo https://github.com/rrrene/credo 14/07/2018 2 526
Elixir dogma https://github.com/lpil/dogma 19/01/2018 465
Elm elm-analyse https://github.com/stil4m/elm-analyse 05/06/2018 258
Emacs package-lint https://github.com/purcell/package-lint 09/06/2018 73
Emacs elisp-lint https://github.com/nschum/elisp-lint 24/02/2018 20
Erlang elvis https://github.com/inaka/elvis 02/07/2018 309
F# fantomas https://github.com/dungpa/fantomas 08/07/2018 178
F# FSharpLint https://github.com/fsprojects/FSharpLint 18/03/2018 130
Flex sonar-flex https://github.com/SonarSource/sonar-flex 15/06/2018 6
Go gometalinter https://github.com/alecthomas/gometalinter 05/07/2018 2 818
Go revive https://github.com/mgechev/revive 17/07/2018 1 082
Go goreporter https://github.com/wgliang/goreporter 23/05/2018 2 096
Go golint https://github.com/golang/lint 02/07/2018 2 583
Go go-critic https://github.com/go-critic/go-critic 18/07/2018 201
Go dingo-hunter https://github.com/nickng/dingo-hunter 18/05/2018 208
Go safesql https://github.com/stripe/safesql 21/12/2017 362
Go ineffassign https://github.com/gordonklaus/ineffassign 18/07/2018 166
Go flen https://github.com/lafolle/flen 11/03/2018 41
Go vet https://golang.org/cmd/vet/
Groovy CodeNarc https://github.com/CodeNarc/CodeNarc 08/07/2018 177
Groovy sonar-groovy https://github.com/SonarQubeCommunity/sonar-groovy 09/11/2017 37
Groovy codenarc http://codenarc.sourceforge.net/
HAML haml-lint https://github.com/brigade/haml-lint 07/06/2018 194
Haskell hlint https://github.com/ndmitchell/hlint 17/07/2018 652
Haxe haxe-chesktyle https://github.com/HaxeCheckstyle/haxe-checkstyle 15/07/2018 86
HTML htmlhint https://github.com/yaniswang/HTMLHint 13/02/2017 1 912
HTML tidy-html5 https://github.com/htacg/tidy-html5 29/04/2018 1 808
HTML bootlint https://github.com/twbs/bootlint 09/07/2018 2 177
HTML validator https://github.com/validator/validator 18/07/2018 571
HTML html-linter https://github.com/deezer/html-linter 12/05/2014 39
Java checkstyle https://github.com/checkstyle/checkstyle 17/07/2018 3 778
Java error-prone https://github.com/google/error-prone 16/07/2018 3 807
Java pmd https://github.com/pmd/pmd 18/07/2018 1 669
Java spotbugs https://github.com/spotbugs/spotbugs 17/07/2018 783
Java sonar-java https://github.com/SonarSource/sonar-java 18/07/2018 345
JavaScript prettier https://github.com/jlongster/prettier 18/07/2018 26 125
JavaScript standard https://github.com/feross/standard 07/07/2018 18 569
JavaScript eslint https://github.com/eslint/eslint 18/07/2018 11 900
JavaScript jslint https://github.com/douglascrockford/JSLint 26/06/2018 3 181
JavaScript xo https://github.com/sindresorhus/xo 24/06/2018 3 893
JavaScript nsp https://github.com/nodesecurity/nsp 08/05/2018 1 643
JavaScript jshint https://github.com/jshint/jshint 10/06/2018 7 968
JavaScript sonar-javascript https://github.com/SonarSource/sonar-javascript 18/07/2018 251
JavaScript clinton https://github.com/SamVerschueren/clinton 11/05/2018 115
Julia lint.jl https://github.com/tonyhffong/Lint.jl 30/01/2018 116
Kotlint ktlint https://github.com/shyiko/ktlint 02/07/2018 1 333
Kotlint detekt https://github.com/arturbosch/detekt 16/07/2018 1 236
Kubernetes kube-lint https://github.com/viglesiasce/kube-lint 12/03/2017 79
Less lesshint https://github.com/lesshint/lesshint 18/07/2018 110
Lua luacheck https://github.com/mpeterv/luacheck 11/07/2018 757
Lua lualint https://github.com/philips/lualint 17/07/2013 64
Makefile checkmake https://github.com/mrtazz/checkmake 01/07/2018 156
Markdown markdownlint https://github.com/DavidAnson/markdownlint 28/05/2018 660
Markdown textlint https://github.com/textlint/textlint 14/07/2018 986
Markdown mdl https://github.com/mivok/markdownlint 08/07/2018 520
Markdown remark-lint https://github.com/wooorm/remark-lint 04/06/2018 371
Moonscript nilnor/moonpick https://github.com/nilnor/moonpick 17/11/2017 14
npm npm-package-json-lint https://github.com/tclindner/npm-package-json-lint 14/07/2018 26
Ocaml mascot http://mascot.x9c.fr/
Oss repolinter https://github.com/todogroup/repolinter 18/07/2018 68
Perl perl-lint https://github.com/moznion/Perl-Lint 27/09/2016 92
Perl perlcritic https://metacpan.org/pod/perlcritic
PHP php-cs-fixer https://github.com/FriendsOfPHP/PHP-CS-Fixer 12/07/2018 6 220
PHP phpstan https://github.com/phpstan/phpstan 18/07/2018 4 220
PHP phpcpd https://github.com/sebastianbergmann/phpcpd 02/06/2018 1 529
PHP php-codesniffer https://github.com/squizlabs/PHP_CodeSniffer 18/07/2018 5 131
PHP phan https://github.com/etsy/phan 19/07/2018 3 514
PHP phplint https://github.com/overtrue/phplint 19/06/2018 292
PHP sonar-php https://github.com/SonarSource/sonar-php 18/07/2018 132
Php phpmd https://phpmd.org
Polymer polylint https://github.com/PolymerLabs/polylint 16/11/2017 128
Pug pugjs/pug-lint https://github.com/pugjs/pug-lint 17/04/2016 164
Puppet puppet-lint https://github.com/rodjek/puppet-lint 09/07/2018 705
Python pycodestyle https://github.com/PyCQA/pycodestyle 08/07/2018 3 342
Python pylint https://github.com/PyCQA/pylint 17/07/2018 1 352
Python bandit https://github.com/openstack/bandit 26/04/2018 1 120
Python flake8 https://github.com/PyCQA/flake8 01/07/2018 383
Python pylama https://github.com/klen/pylama 13/09/2017 426
Python pychecker https://sourceforge.net/projects/pychecker/?source=directory
R lintr https://github.com/jimhester/lintr 21/06/2018 469
RAML ramllint https://github.com/QuickenLoans/ramllint 02/03/2017 17
Ruby rubocop https://github.com/bbatsov/rubocop 18/07/2018 9 206
Ruby brakeman https://github.com/presidentbeef/brakeman 30/06/2018 4 876
Ruby reek https://github.com/troessner/reek 17/07/2018 2 776
Ruby cane https://github.com/square/cane 10/01/2018 1 331
Ruby pelusa https://github.com/codegram/pelusa 07/01/2015 450
Ruby laser https://github.com/michaeledgar/laser 11/09/2011 388
Rust rust-clippy https://github.com/Manishearth/rust-clippy 19/07/2018 2 273
Sass scss-lint https://github.com/causes/scss-lint 28/03/2018 3 242
Sass sass-lint https://github.com/sasstools/sass-lint 06/02/2018 1 498
Scala wartRemover https://github.com/artremover/wartremover 16/07/2018 802
Scala linter https://github.com/HairyFotr/linter 08/12/2016 256
Scala scalastyle https://github.com/scalastyle/scalastyle 17/03/2018 569
Scala scapegoat https://github.com/sksamuel/scapegoat 17/07/2018 265
Shell shellcheck https://github.com/koalaman/shellcheck 12/07/2018 11 720
Shell shlint https://github.com/duggan/shlint 14/01/2016 41
Shell bashate https://pypi.python.org/pypi/bashate/
Solidity solium https://github.com/duaraghav8/Solium 10/07/2018 512
SQL sqlint https://github.com/purcell/sqlint 23/06/2018 190
Swift swiftlint https://github.com/realm/SwiftLint 05/07/2018 9 759
Swift tailor.sh https://github.com/sleekbyte/tailor 06/12/2017 1 217
Travis travis-yaml https://github.com/travis-ci/travis-yaml 03/11/2017 149
TypeScript codelyzer https://github.com/mgechev/codelyzer 03/07/2018 1 724
TypeScript tslint https://github.com/palantir/tslint 18/07/2018 3 636
TypeScript ts-style https://github.com/google/ts-style 17/07/2018 713
TypeScript lynt https://github.com/saadq/lynt 17/07/2018 336
Vim vin https://github.com/Kuniwak/vint 29/06/2018 401
X.509 certlint https://github.com/awslabs/certlint 21/05/2018 108
Xml xmllint http://xmlsoft.org/xmllint.html
YAML yamllint https://github.com/adrienverge/yamllint 29/05/2018 440
YAML safeymal https://github.com/imbal/safeyaml 15/02/2018 227

 

N’hésitez pas à nous solliciter pour tout conseil et support sur le choix de ces outils.