Awesome
Awesome Linters
A community-driven list of awesome linters.
Code linters are programs that perform static analysis on your code. They check your code for common mistakes and bad coding style/practices thus helping you catch errors before compilation/interpretation and forcing you and your team to keep a consistent code style within a project.
Most of the linters in this list have plugins available for popular text editors and IDEs and are pretty easy to setup and automate (via a pre-commit hook or a CI service for example).
This project is not closed to actual static analyzers. With this repository we intend to have an information resource for all things related to static analysis of code. By this, we mean that articles, talks or any other resource related to this topic will be welcome as well as links related to actual linters.
Contents
-
- Language Agnostic
- Ansible
- Awesome Lists
- C/C++
- CoffeeScript
- Crystal
- CSS
- CSV
- Dart
- Dockerfile
- Elixir
- Elm
- English
- Env
- EPUB
- Erlang
- Go
- GraphQL
- Groovy
- Haskell
- Haxe
- HTML
- Java
- JavaScript
- Kotlin
- Lua
- Markdown
- npm
- Objective-C
- Perl
- PHP
- Polymer
- Pug
- Puppet
- Python
- Rego
- reStructuredText
- Ruby
- Rust
- SaltStack
- Sass
- Scala
- Shell
- SQL
- Swift
- TypeScript
- YAML
Linters
Language Agnostic
- coala - Language agnostic linter based on rules and standards. Written in Python.
- commitlint - commitlint checks if your commit messages meet the conventional commit format.
- MegaLinter - Linters aggregator of 49 languages, 22 formats, 21 tooling formats , copy-pastes and spell. Can automatically apply fixes with commit or Pull Request
- Scanmycode CE (Community Edition) - Code Scanning/SAST/Static Analysis/Linting using many tools/Scanners with One Report.
- tidyall - an all-in-one code tidier and validator with many available backends, caching, filtering-by-paths, and some other features.
- violations-lib - a library for parsing reports from static code analyzers. Can be used with Jenkins, Gradle, Maven and command line tools.
Ansible
- ansible-lint - Checks playbooks for practices and behaviour that could potentially be improved
Awesome Lists
- awesome-lint - Linter for Awesome lists. Helps to create and maintain Awesome lists. Written in JavaScript.
C/C++
- clang-format - Formats C/C++ code according to a coding style (Google, LLVM, Mozilla, Webkit, and Chromium available)
- clang-tidy - A clang-based C/C++ linter tool to provide an extensible framework for diagnosing and fixing typical programming errors
- cppcheck - Cppcheck is a static analysis tool for C/C++ code. It provides unique code analysis to detect bugs and focuses on detecting undefined behaviour and dangerous coding constructs. The goal is to detect only real errors in the code (i.e. have very few false positives).
- cpplint - Source code checker for C/C++ files following Google's internal C++ style guide.
- oclint - Static analysis for C, C++ and Objective-C. Written in C++.
- uncrustify - Source code beautifier for C, C++, C#, ObjectiveC, D, Java, Pawn and VALA.
CoffeeScript
- @coffelint/cli - Configurable linter written in CoffeScript to analyze CoffeScript.
Crystal
- ameba - Static code analysis tool for Crystal.
CSS
- csslint - CSS static analysis written in JavaScript. Uses pluggable rules.
- csscomb - CSS tool that beautifies CSS based on a configuration. Helps with keeping CSS consistent. Written in JavaScript.
- ie8linter - Static analysis for Internet Explorer 8 compatibility. Written in JavaScript.
- postcss-bem-linter - Plugin for PostCSS to lint CSS according to BEM-style. Written in JavaScript.
- stylelint - CSS linter that is unopinionated, supports plugins and has a wide range of rules built-in. Written in JavaScript, it parses by default CSS-like syntaxes such as SCSS, Sass, Less and SugarSS.
CSV
- csvlint.rb - The gem behind http://csvlint.io.
Dart
- linter - Linter for Dart mostly focused on style lints. It's configurable but comes with configured rules out of the box. Written in Dart.
Dockerfile
- dockerfile_lint - Rule based linter for Dockerfiles. The linter rules can be used to check file syntax as well as arbitrary semantic and best practice attributes determined by the rule file writer. The linter can also be used to check LABEL rules against docker images.
- Dockerfilelint Dockerfilelint is a node module that analyzes a Dockerfile and looks for common traps, mistakes and helps enforce best practices
- Dockerlint Linting tool for Dockerfiles based on recommendations from Dockerfile Reference and Best practices for writing Dockerfiles as of Docker 1.6.
- hadolint - Linter for Dockerfiles. The linter is parsing the Dockerfile into an AST and performs rules on top of the AST. It is standing on the shoulders of ShellCheck to lint the Bash code inside RUN instructions.
Elixir
- credo - Static code analysis tool for the Elixir language with a focus on code consistency and teaching.
Elm
- elm-review - Analyzes whole Elm projects, with a focus on shareable and custom rules written in Elm that add guarantees the Elm compiler doesn't give you.
English
- alex - Linter to help catch insensitive writing in English. Written in JavaScript.
- proselint - Linter for English that provides guidelines to make better writing. It has plugins for several editors and is configurable.
- textlint - The pluggable linting tool for natural language texts.
Env
- dotenv-linter -
⚡️Lightning-fast linter for
.env
files. Written in Rust 🦀
EPUB
- EPUBCheck - a tool to validate the conformance of EPUB publications against the EPUB specifications. Can be run as a standalone command-line tool or used as a Java library.
Erlang
- elvis - Configurable Erlang linter written in Erlang.
Go
- golangci-lint - Linters Runner for Go. 5x faster than gometalinter. Nice colored output. Can report only new issues. Fewer false-positives. Yaml/toml config.
- golint - Go style linter written in Go. Focus with coding styles more than with correctness.
- gometalinter - Concurrently run Go lint tools and normalise their output.
- go vet - Examines Go source code and reports suspicious constructs.
GraphQL
- graphql-schema-linter - Validate GraphQL schema definitions against a set of rules.
Groovy
- npm-groovy-lint - Validate, format and auto-fix Groovy, Jenkinsfile and Gradle files
Haskell
- hlint - Tool for suggesting possible improvements to Haskell code. These suggestions include ideas such as using alternative functions, simplifying code and spotting redundancies.
Haxe
- haxe-checkstyle - Haxe Checkstyle is a static analysis tool to help developers write Haxe code that adheres to a coding standard.
HTML
- htmlhint - HTMLHint is a Static Code Analysis Tool for HTML, you can use it with IDE or in build system.
- html-validate - Offline HTML5 validator. Validates either a full document or a smaller (incomplete) template.
- bootlint - Bootlint is a tool that checks for several common HTML mistakes in webpages that are using Bootstrap.
- jinjalint - A prototype linter which checks the indentation and the correctness of Jinja-like/HTML templates. Also supports Django Templates.
- LintHTML - LintHTML is a fork of htmllint. It is extendable via plugins.
- Nu Html Checker - An offline version of W3C's official validator for HTML, CSS, and SVG. Written in Java.
Java
- checkstyle - Checkstyle is a development tool to help programmers write Java code that adheres to a coding standard.
- findbugs - Uses static analysis to look for bugs in Java code.
- pmd - Static analyzer that finds common programming flaws. It supports Java, JavaScript, Salesforce.com Apex, PLSQL, Apache Velocity, XML, XSL.
- uncrustify - Source code beautifier for C, C++, C#, ObjectiveC, D, Java, Pawn and VALA.
JavaScript
- clinton - JavaScript project style linter.
- eslint - Fully pluggable tool for identifying and reporting on patterns in JavaScript.
- jshint - Community-driven tool that detects errors and potential problems in JavaScript code.
- prettier - Opinionated JavaScript formatter inspired by refmt with advanced support for language features from ES2017, JSX, and Flow.
- putout - Linter that fixes everything
it can find, supports JS/TS/Flow and wrap ESLint (when
eslintrc
exists). - quick-lint-js - Finds bugs in JavaScript programs. Designed for editors.
- standard - JavaScript style linter that allows no configuration.
- xo - Opinionated but configurable ESLint wrapper with lots of goodies included. Enforces strict and readable code.
Kotlin
- ktlint - An anti-bikeshedding Kotlin linter with built-in formatter
Lua
- luacheck - A tool for linting and static analysis of Lua code.
- lualint - lualint performs luac-based static analysis of global variable usage in Lua source code.
Markdown
- markdownlint - Node.js style checker and lint tool for Markdown/CommonMark files.
- mdl - Check markdown files and flag style issues. Written in ruby and is distributed as a rubygem.
- remark-lint - Written in JavaScript. remark-lint provides configurable Markdown style linting.
npm
- lockfile-lint - Lint an npm or yarn lockfile to analyze and detect security issues.
- npm-package-json-lint - Configurable linter to enforce standards in npm package.json files.
Objective-C
- oclint - Static source code analysis tool to improve quality and reduce defects for C, C++ and Objective-C. Written in C++.
- uncrustify - Source code beautifier for C, C++, C#, ObjectiveC, D, Java, Pawn and VALA.
OpenAPI (Swagger)
- speccy - A handy toolkit for OpenAPI, with a linter to enforce quality rules.
Perl
- perlcritic - The leading static analyzer for Perl. Configurable, extensible, powerful.
- Perltidy - a Perl code autoformatter/beautifier.
PHP
- phplint - Node wrapper around the native php linter that allows for parallel linting and integration with build systems like Grunt, Gulp and more.
- PHP Mess Detector - PHPMD can be seen as a user friendly and easy to configure frontend for the raw metrics measured by PHP Depend.
Polymer
- polylint - Catch errors in your polymer project before even running your code. Written in TypeScript.
Pug
- pug-lint — An unopinionated and configurable linter and style checker for Pug (formerly Jade)
Puppet
- puppet-lint - Test modules and manifests against the recommended Puppet style guidelines from the Puppet Labs style guide. Written in Ruby.
Python
- black - The uncompromising Python code formatter. Blackened code looks the same regardless of the project you're reading.
- flake8 - Runs PyFlakes, pycodestyle and other tools from only one CLI. Written in Python.
- pycodestyle (formerly called pep8) - Tool to check your Python code against some of the style conventions in PEP 8.
- pylint - Source code analyzer which looks for programming errors, helps enforcing a coding standard and sniffs for some code smells.
- ruff - An extremely fast Python linter, written in Rust which is orders of magnitude faster than alternative tools while integrating more functionality behind a single, common interface.
- wemake-python-styleguide - The strictest and most opinionated python linter ever.
- yala - YALA combines many linters to improve the quality of your code.
Rego
- regal - Regal is a linter for the policy language Rego. Regal aims to catch bugs and mistakes in policy code, while at the same time helping people learn the language, best practices and idiomatic constructs.
reStructuredText
- doc8 - Doc8 is an opinionated style checker for rst (with basic support for plain text) styles of documentation. Notice, it does not support additional sphinx extensions. Project is also available on OpenStack or GitHub
- reStructuredText Lint - Validate reST files either as a module or from a CLI utility. Written in Python.
Ruby
- rubocop - Ruby static code analyzer. Out of the box it will enforce many of the guidelines outlined in the community Ruby Style Guide.
Rust
- rust-clippy - Collection of lints to catch common mistakes and improve your Rust code.
SaltStack
- salt-lint - A command-line utility that checks for best practices in SaltStack.
Sass
- sass-lint - Node-only Sass linter for both sass and scss syntax.
- scss-lint - Tool to help keep your SCSS files clean and readable by running it against a collection of configurable linter rules.
- stylelint - CSS linter that is unopinionated, supports plugins and has a wide range of rules built-in. Written in JavaScript, it parses by default CSS-like syntaxes such as SCSS, Sass, Less and SugarSS.
Scala
- linter - Scala static analysis compiler plugin which adds compile-time checks for various possible bugs, inefficiencies, and style problems.
- scalastyle - Examines your Scala code and indicates potential problems with it. Similar to Checkstyle for Java.
- scapegoat - Another similar tool to Checkstyle for Java. Flags suspicious language usage in code.
- wartRemover - Flexible and configurable Scala linter written in Scala.
Shell
- shellcheck - Gives warnings and suggestions for bash/sh shell scripts.
- shfmt - a shell (POSIX shell / bash / mksh) parser, formatter, and interpreter written in Go 1.13-and-above.
SQL
- sqlfluff - SQLFluff is a dialect-flexible and configurable SQL linter.
Swift
- swiftlint - Tool to enforce Swift style and conventions, loosely based on GitHub's Swift Style Guide.
TypeScript
- tslint - Customizable TypeScript linter with automatic fixing of formating and style violations.
YAML
- spectral - A flexible JSON/YAML linter, with out of the box support for OpenAPI v2/v3 and AsyncAPI v2.
- yamllint - Linter for YAML files.
Contributing
Contributions are very welcome! Create a new pull request, solve a bug or grab an issue that is currently unassigned!
The only rule is: keep it organized.
Contributors
Thanks to everyone that helped!