List of tools for static code analysis

This is a list of notable tools for static program analysis (program analysis is a synonym for code analysis).

Static code analysis tools

Languages

Ada

C, C++

C#

Fortran 
 Fortran-Lint (Information Processing Techniques, Inc)

IEC 61131-3 
 CODESYS Static Analysis integrated add-on for CODESYS (application code realized e.g. in ST, FBD, LD)

Java

JavaScript 
 ESLint JavaScript syntax checker and formatter.
 Google's Closure Compiler JavaScript optimizer that rewrites code to be faster and smaller, and checks use of native JavaScript functions.
 JSHint A community driven fork of JSLint.
 JSLint JavaScript syntax checker and validator.
 
 Semgrep A static analysis tool that helps expressing code standards and surfacing bugs early. A CI service and a rule library is also available.

Julia 
 JET.jl
  StaticLint.jl (a linter for Visual Studio Code, i.e. its Julia extension, already included in it)

Objective-C, Objective-C++ 
 Clang The free Clang project includes a static analyzer. As of version 3.2, this analyzer is included in Xcode.
 Infer Developed by an engineering team at Facebook with open-source contributors. Targets null pointers, leaks, API usage and other lint checks. Available as open source on github.

Opa 
 Opa includes its own static analyzer. As the language is intended for web application development, the strongly statically typed compiler checks the validity of high-level types for web data, and prevents by default many vulnerabilities such as XSS attacks and database code injections.

Packaging 
 Lintian Checks Debian software packages for common inconsistencies and errors.
 Rpmlint Checks for common problems in rpm packages.

Perl 
 Perl::Critic A tool to help enforce common Perl best practices. Most best practices are based on Damian Conway's Perl Best Practices book.
 PerlTidy Program that acts as a syntax checker and tester/enforcer for coding practices in Perl.
 Padre An IDE for Perl that also provides static code analysis to check for common beginner errors.

PL/SQL 
 TOAD A PL/SQL development environment with a Code xPert component that reports on general code efficiency as well as specific programming issues.
 Visual Expert A PL/SQL code analysis tool that reports on programming issues and helps understand and maintain complex code (Impact Analysis, Source Code documentation, Call trees, CRUD matrix, etc.).

PowerBuilder, PowerScript 
 Visual Expert A tool scanning PowerBuilder libraries (PBLs) for code inspection, Impact Analysis, Source Code documentation, Call trees, CRUD matrix.

Python 
 PyCharm Cross-platform Python IDE with code inspections available for analyzing code on-the-fly in the editor and bulk analysis of the whole project.
 PyDev Eclipse-based Python IDE with code analysis available on-the-fly in the editor or at save time.
 Pylint Static code analyzer. Quite stringent; includes many stylistic warnings as well.
 
 Semgrep Static code analyzer that helps expressing code standards and surfacing bugs early. A CI service and a rule library is also available.

Transact-SQL 
 Visual Expert A SQLServer code analysis tool that reports on programming issues and helps understand and maintain complex code (Impact Analysis, source code documentation, call trees, CRUD matrix, etc.).

Tools with duplicate code detection

Formal methods tools 
Tools that use sound, i.e. over-approximating a rigorous model, formal methods approach to static analysis (e.g., using static program assertions). Sound methods contain no false negatives for bug-free programs, at least with regards to the idealized mathematical model they are based on (there is no "unconditional" soundness). Note that there is no guarantee they will report all bugs for buggy programs, they will report at least one.

 Astrée finds all potential runtime errors by abstract interpretation, can prove the absence of runtime errors and can prove functional assertions; tailored towards safety-critical C code (e.g. avionics).
 CodePeer Statically determines and documents pre- and post-conditions for Ada subprograms; statically checks preconditions at all call sites.
 ECLAIR Uses formal methods-based static code analysis techniques such as abstract interpretation and model checking combined with constraint satisfaction techniques to detect or prove the absence of certain run time errors in source code.
 ESC/Java and ESC/Java2 Based on Java Modeling Language, an enriched version of Java
 Frama-C An open-source analysis framework for C, based on the ANSI/ISO C Specification Language (ACSL). Its main techniques include abstract interpretation, deductive verification and runtime monitoring.
 KeY analysis platform for Java based on theorem proving with specifications in the Java Modeling Language; can generate test cases as counterexamples; stand-alone GUI or Eclipse integration
 MALPAS A formal methods tool that uses directed graphs and regular algebra to prove that software under analysis correctly meets its mathematical specification.
 Polyspace Uses abstract interpretation, a formal methods based technique, to detect and prove the absence of certain run time errors in source code for C/C++, and Ada
 SPARK Toolset including the SPARK Examiner Based on the SPARK language, a subset of Ada.

See also 
 Automated code review
 Best Coding Practices
 List of software development philosophies
 Dynamic program analysis
 Software metrics
 Integrated development environment (IDE) and comparison of integrated development environments. IDEs will usually come with built-in support for static program analysis, or with an option to integrate such support. Eclipse offers such integration mechanism for most different types of extensions (plug-ins).

References

External links 
 The Web Application Security Consortium's Static Code Analysis Tool List
 
 SAMATE-Source Code Security Analyzers
 SATE Static Analysis Tool Exposition
 "A Comparison of Bug Finding Tools for Java", by Nick Rutar, Christian Almazan, and Jeff Foster, University of Maryland.  Compares Bandera, ESC/Java 2, FindBugs, JLint, and PMD.
 "Mini-review of Java Bug Finders", by Rick Jelliffe, O'Reilly Media.

 
Static code analysis