diff --git a/.github/workflows/check_links.yml b/.github/workflows/check_links.yml index d4d00f8b5..673a45c34 100644 --- a/.github/workflows/check_links.yml +++ b/.github/workflows/check_links.yml @@ -1,17 +1,27 @@ -name: Check Links +name: CI -on: [pull_request] +on: + push: + branches: [master] + pull_request: + branches: [master] + schedule: + # Runs every Thursday at 20:23 UTC to avoid bit rot + - cron: "20 23 * * 4" jobs: build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - name: Build - run: cargo build --verbose - working-directory: ci - - name: Run tests - run: cargo test --verbose - working-directory: ci + - uses: actions/checkout@v2 + with: + ref: ${{ github.head_ref }} + - name: Render list + run: make render + - uses: stefanzweifel/git-auto-commit-action@v4.1.2 + with: + branch: ${{ github.head_ref }} + commit_message: Commit list + commit_user_name: GitHub Actions Bot + commit_user_email: github-actions-bot@analysis-tools.dev + commit_author: GitHub Actions Bot diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a497f72cf..42d309bf0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,7 +1,10 @@ # How to add a new tool to the list -Please feel free to open a pull request if you know of a code analysis tool that is not mentioned here. -If you're in doubt if a tool is a good fit for the list, **don't open an issue, but create a pull request right away** because that's easier to handle. Thanks! :smiley: +Please feel free to open a pull request if you know of a code analysis tool that +is not mentioned here. +If you're in doubt if a tool is a good fit for the list, **don't open an issue, +but create a pull request right away** because that's easier to handle. Thanks! +:smiley: ### Requirements @@ -12,54 +15,36 @@ Each tool on the list should be ### Format -```Markdown -* [Project Name](https://github.com/author/project-name) - A short, but meaningful description. Maximum two lines long. -``` -e.g.: +The main `README.md` is just a rendered version of the data. To add a new tool, +please edit `data/data.yml`. -```Markdown -* [CMetrics](https://github.com/MetricsGrimoire/CMetrics) [OSS] - Measures size and complexity for C files -``` - -for **proprietary tools**, please add a "copyright emoji" (`:copyright:`): - -```Markdown -* [Functor Prevent](http://www.functor.se/products/prevent/) :copyright: - Static code analysis for C code. -``` - -### Ordering - -Please make sure to keep the alphabetical, case-insensitive ordering of the -tools. - -### Description length - -Make each tool description as precise as possible. -Please limit the description to **200 characters**. - -### Categories - -If you can, please limit yourself to only one category. -This way, all tools get treated fairly and the list is easier to read. +- Make each tool description as precise as possible. + Please limit the description to **500 characters**. +- Please keep the tools in alphabetical order. +- By default, we assume that the tool is open source. + If a tool is proprietary, add `proprietary: true`. +- Please add as many categories as possible. You can choose from the categories + in `data/categories.yml` If a tool does not match any existing category, feel + free to start a new category. +Finally, create a pull request with all your changes. +You can call `make render` to check for errors before. +This is optional, because it will also be done when creating +a pull request. # How to mark a tool as unmaintained/deprecated -Sometimes it happens that a tool becomes unmaintained and there's nothing wrong -with that. +Sometimes a tool becomes unmaintained and there's nothing wrong with that. After all, a tool can still be very valuable to the community - even without frequent updates. However, since it is one of the goals of this project to allow people to make an informed decision on what is the best tool for the job, we are marking -unmaintained or deprecated tools with a :warning: (`:warning:`) sign. -This sign indicates that the community does not recommend to use this tool for -new projects anymore. - +unmaintained or deprecated tools. [Here](https://github.com/mre/awesome-static-analysis/issues/223) is a nice discussion about why we think this is necessary. If you find a tool, which is -unmaintained, please create a pull request which adds the `:warning:` sign and -provide an objective explanation as to why you think the tool should be marked. -Every deprecation will be handled on a case-by-case basis. - +unmaintained, please add `deprecated: true` to the entry in `data/data.yml` and +create a pull request in which you provide an objective explanation as to why +you think the tool should be marked deprecated. Every deprecation will be +handled on a case-by-case basis. **Thanks for helping out!** :tada: diff --git a/Makefile b/Makefile index aff7716ce..0a4d7709a 100644 --- a/Makefile +++ b/Makefile @@ -17,3 +17,6 @@ serve: link deploy: link mkdocs gh-deploy +.PHONY: render +render: + (cd data/render && cargo run -- ../../data/categories.yml ../../data/data.yml) > README.md diff --git a/README.md b/README.md index fa4654d18..b7ab7f75b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ - ![Logo](awesome.png) +![Logo](awesome.png) > Static program analysis is the analysis of computer software that is performed without actually executing programs — [Wikipedia](https://en.wikipedia.org/wiki/Static_program_analysis) +![CI](https://github.com/analysis-tools-dev/static-analysis/workflows/CI/badge.svg) + This is a collection of static analysis tools and code quality checkers. Pull requests are very welcome! * :copyright: stands for proprietary software. All other tools are Open Source. @@ -21,15 +23,16 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com
  • ABAP
  • Ada
  • Awk
  • -
  • C/C++
  • -
  • C#
  • +
  • C
  • +
  • C++
  • +
  • C#
  • Crystal
  • -
  • Delphi
  • Dlang
  • +
  • Delphi
  • Elixir
  • Elm
  • Erlang
  • -
  • F#
  • +
  • F#
  • Fortran
  • Go
  • Groovy
  • @@ -39,10 +42,11 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com
  • JavaScript
  • Kotlin
  • Lua
  • -
  • Matlab
  • +
  • MATLAB
  • Perl
  • PHP
  • Python
  • +
  • Python wrappers
  • R
  • RPG
  • Ruby
  • @@ -55,35 +59,51 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com
  • Tcl
  • TypeScript
  • VBScript
  • - + #### [Multiple languages](#multiple-languages-1) #### [Other](#other-1) - - [Build tools](#build-tools) - - [Binaries](#binaries) - - [Containers](#containers) - - [Config Files](#config-files) - - [Configuration Management](#configuration-management) - - [CSS](#css) - - [Gherkin](#gherkin) - - [HTML](#html) - - [IDE Plugins](#ide-plugins) - - [LaTeX](#latex) - - [Makefiles](#makefiles) - - [Markdown](#markdown) - - [Mobile](#mobile) - - [Packages](#packages) - - [Protocol Buffer](#protocol-buffer) - - [Supporting Tools](#supporting-tools) - - [Template Languages](#template-languages) - - [Translation](#translation) - - [Web services](#web-services) - - [Writing](#writing) - -#### [More Collections](#more-collections-1) +- [Android](#android) +- [Build tools](#buildtool) +- [Binaries](#binary) +- [More collections](#collection) +- [Compiler](#compiler) +- [Containers](#container) +- [Config Files](#configfile) +- [Configuration Management](#configmanagement) +- [CSS/SASS/SCSS](#css) +- [Gherkin](#gherkin) +- [Gradle](#gradle) +- [Haml](#haml) +- [HTML](#html) +- [HTML5](#html) +- [IDE Plugins](#ide) +- [LaTeX](#latex) +- [Less](#less) +- [Makefiles](#make) +- [Markdown](#markdown) +- [Mobile](#mobile) +- [Multiple Languages](#multi) +- [Node.js](#nodejs) +- [Packages](#package) +- [PhoneGap](#phonegap) +- [PowerShell](#powershell) +- [Protocol Buffers](#protobuf) +- [Supporting Tools](#support) +- [Template-Languages](#template) +- [Translation](#translation) +- [Visual Basic .NET](#vbnet) +- [Visual Basic](#vbasic) +- [Visualforce](#visualforce) +- [Vue.js](#vue) +- [Vyper (Smart contract)](#vyper) +- [Writing](#writing) +- [Web services](#service) +- [XML](#xml) + --- @@ -105,7 +125,7 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [gawk --lint](https://www.gnu.org/software/gawk/manual/html_node/Options.html) - warns about constructs that are dubious or nonportable to other awk implementations. -## C/C++ +## C * [Astrée](https://www.absint.com/astree/index.htm) :copyright: - Sound static analyzer based on abstract interpretation for C/C++, detecting memory, type and concurrency defects, and MISRA violations. * [CBMC](http://www.cprover.org/cbmc/) - bounded model-checker for C programs, user-defined assertions, standard assertions, several coverage metric analyses @@ -135,7 +155,7 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [SVF](https://github.com/SVF-tools/SVF) - a static tool that enables scalable and precise interprocedural dependence analysis for C and C++ programs. * [vera++](https://bitbucket.org/verateam/vera/wiki/Introduction) - Vera++ is a programmable tool for verification, analysis and transformation of C++ source code. -## C# # +## C# * [.NET Analyzers](https://github.com/DotNetAnalyzers) - An organization for the development of analyzers (diagnostics and code fixes) using the .NET Compiler Platform. * [Code Analysis Rule Collection](https://carc.codeplex.com/) - Contains a set of diagnostics, code fixes and refactorings built on the Microsoft .NET Compiler Platform "Roslyn". @@ -156,6 +176,36 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [VSDiagnostics](https://github.com/Vannevelj/VSDiagnostics) - A collection of static analyzers based on Roslyn that integrates with VS. * [Wintellect.Analyzers](https://github.com/Wintellect/Wintellect.Analyzers) - .NET Compiler Platform ("Roslyn") diagnostic analyzers and code fixes. +## C++ + +* [Astrée](https://www.absint.com/astree/index.htm) :copyright: - Sound static analyzer based on abstract interpretation for C/C++, detecting memory, type and concurrency defects, and MISRA violations. +* [CBMC](http://www.cprover.org/cbmc/) - bounded model-checker for C programs, user-defined assertions, standard assertions, several coverage metric analyses +* [clang-tidy](http://clang.llvm.org/extra/clang-tidy/) - clang static analyser +* [CMetrics](https://github.com/MetricsGrimoire/CMetrics) - Measures size and complexity for C files +* [Codecheker](https://github.com/Ericsson/codechecker) - static analysis of C/C++ code, with web GUI +* [CodeSonar from GrammaTech](https://www.grammatech.com/products/codesonar) :copyright: - Advanced, whole program, deep path, static analysis of C and C++ with easy-to-understand explanations and code and path visualization. +* [Corrode](https://github.com/jameysharp/corrode) - Semi-automatic translation from C to Rust. Could reveal bugs in the original implementation by showing Rust compiler warnings and errors. +* [cppcheck](https://github.com/danmar/cppcheck) - static analysis of C/C++ code +* [CppDepend](https://www.cppdepend.com) :warning: :copyright: - Measure, query and visualize your code and avoid unexpected issues, technical debt and complexity. +* [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint) - automated C++ checker that follows Google's style guide +* [cqmetrics](https://github.com/dspinellis/cqmetrics) - quality metrics for C code +* [CScout](https://www.spinellis.gr/cscout/) - complexity and quality metrics for for C and C preprocessor code +* [flawfinder](http://www.dwheeler.com/flawfinder/) - finds possible security weaknesses +* [flint++](https://github.com/JossWhittle/FlintPlusPlus) - cross-platform, zero-dependency port of flint, a lint program for C++ developed and used at Facebook. +* [Frama-C](http://frama-c.com/) - a sound and extensible static analyzer for C code +* [Helix QAC](https://www.perforce.com/products/helix-qac) :copyright: - Enterprise-grade static analysis for embedded software. Supports MISRA, CERT, and AUTOSAR coding standards. +* [IKOS](https://github.com/nasa-sw-vnv/ikos) - a sound static analyzer for C/C++ code based on LLVM +* [include-gardener](https://github.com/feddischson/include_gardener) - a multi-language static analyzer for C/C++/Obj-C/Python/Ruby to create a graph (in dot or graphml format) which shows all `#include` relations of a given set of files. +* [LDRA](https://ldra.com/) :copyright: - a tool suite including static analysis (TBVISION) to various standards including MISRA C & C++, JSF++ AV, CWE, CERT C, CERT C++ & Custom Rules. +* [oclint](http://oclint.org/) - static analysis of C/C++ code +* [Phasar](https://github.com/secure-software-engineering/phasar) - A LLVM-based static analysis framework which comes with a taint and type state analysis. +* [Polyspace Bug Finder](https://www.mathworks.com/products/polyspace-bug-finder.html) :copyright: - identifies run-time errors, concurrency issues, security vulnerabilities, and other defects in C and C++ embedded software. +* [Polyspace Code Prover](https://www.mathworks.com/products/polyspace-code-prover.html) :copyright: - provide code verification that proves the absence of overflow, divide-by-zero, out-of-bounds array access, and certain other run-time errors in C and C++ source code. +* [scan-build](https://clang-analyzer.llvm.org/scan-build.html) - Analyzes C/C++ code using LLVM at compile-time +* [splint](https://github.com/ravenexp/splint) - Annotation-assisted static program checker +* [SVF](https://github.com/SVF-tools/SVF) - a static tool that enables scalable and precise interprocedural dependence analysis for C and C++ programs. +* [vera++](https://bitbucket.org/verateam/vera/wiki/Introduction) - Vera++ is a programmable tool for verification, analysis and transformation of C++ source code. + ## Crystal * [ameba](https://github.com/veelenga/ameba) - A static code analysis tool for Crystal @@ -163,9 +213,9 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com ## Delphi -* [Fix Insight](https://www.tmssoftware.com/site/fixinsight.asp) :copyright: - A free IDE Plugin for static code analysis. A *Pro* edition includes a command line tool for automation purposes. -* [Pascal Analyzer](https://peganza.com/products_pal.html) :copyright: - A static code analysis tool with numerous reports. A free *Lite* version is available with limited reporting. -* [Pascal Expert](https://peganza.com/products_pex.html) :copyright: - IDE plugin for code analysis. Includes a subset of Pascal Analyzer reporting capabilities and is available for Delphi versions 2007 and later. +* [Fix Insight](https://www.tmssoftware.com/site/fixinsight.asp) :copyright: - A free IDE Plugin for static code analysis. A _Pro_ edition includes a command line tool for automation purposes. +* [Pascal Analyzer](https://peganza.com/products_pal.html) :copyright: - A static code analysis tool with numerous reports. A free _Lite_ version is available with limited reporting. +* [Pascal Expert](https://peganza.com/products_pex.html) :copyright: - IDE plugin for code analysis. Includes a subset of Pascal Analyzer reporting capabilities and is available for Delphi versions 2007 and later. ## Dlang @@ -185,7 +235,7 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [elvis](https://github.com/inaka/elvis) - Erlang Style Reviewer * [Primitive Erlang Security Tool (PEST)](https://github.com/okeuday/pest) - A tool to do a basic scan of Erlang source code and report any function calls that may cause Erlang source code to be insecure. -## F# # +## F# * [FSharpLint](https://github.com/fsprojects/FSharpLint) - Lint tool for F# @@ -209,7 +259,7 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [go vet](https://golang.org/cmd/vet/) - Examines Go source code and reports suspicious. * [go-consistent](https://github.com/Quasilyte/go-consistent) - Analyzer that helps you to make your Go programs more consistent. * [go-critic](https://github.com/go-critic/go-critic) - Go source code linter that maintains checks which are currently not implemented in other linters. -* [go/ast](https://golang.org/pkg/go/ast/) - Package ast declares the types used to represent syntax trees for Go packages. +* [go/ast](https://golang.org/pkg/go/ast/) - Package ast declares the types used to represent syntax trees for Go packages. * [gochecknoglobals](https://github.com/leighmcculloch/gochecknoglobals) - Checks that no globals are present. * [goconst](https://github.com/jgautheron/goconst) - Finds repeated strings that could be replaced by a constant. * [gocyclo](https://github.com/fzipp/gocyclo) - Calculate cyclomatic complexities of functions in Go source code. @@ -225,7 +275,7 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [ineffassign](https://github.com/gordonklaus/ineffassign) - Detect ineffectual assignments in Go code * [interfacer](https://github.com/mvdan/interfacer) - Suggest narrower interfaces that can be used. * [lll](https://github.com/walle/lll) - Report long lines. -* [maligned](https://github.com/mdempsky/maligned) - Detect structs that would take less memory if their fields were sorted. +* [maligned](https://github.com/mdempsky/maligned) - Detect structs that would take less memory if their fields were sorted. * [misspell](https://github.com/client9/misspell) - Finds commonly misspelled English words. * [nakedret](https://github.com/alexkohler/nakedret) - Finds naked returns. * [nargs](https://github.com/alexkohler/nargs) - Finds unused arguments in function declarations. @@ -256,6 +306,7 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [Haxe Checkstyle](https://github.com/HaxeCheckstyle/haxe-checkstyle) - A static analysis tool to help developers write Haxe code that adheres to a coding standard. ## Java + * [Checker Framework](https://github.com/typetools/checker-framework/) - Pluggable type-checking for Java http://checkerframework.org/ * [checkstyle](https://github.com/checkstyle/checkstyle) - checking Java source code for adherence to a Code Standard or set of validation rules (best practices) * [ck](https://github.com/mauricioaniche/ck) - calculates Chidamber and Kemerer object-oriented metrics by processing the source Java files @@ -317,10 +368,6 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [mlint](https://de.mathworks.com/help/matlab/ref/mlint.html) :copyright: - Check MATLAB code files for possible problems. -## Perl - -* [Perl::Critic](https://metacpan.org/pod/Perl::Critic) - Critique Perl source code for best-practices. - ## PHP * [dephpend](https://github.com/mihaeu/dephpend) - Dependency analysis tool @@ -331,7 +378,7 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [exakat](https://github.com/exakat/exakat) - An automated code reviewing engine for PHP * [GrumPHP](https://github.com/phpro/grumphp) - checks code on every commit * [Mondrian](https://github.com/Trismegiste/Mondrian) - a set of static analysis and refactoring tools which use graph theory -* [parallel-lint](https://github.com/JakubOnderka/PHP-Parallel-Lint) - This tool checks syntax of PHP files faster than serial check with a fancier output. +* [parallel-lint](https://github.com/php-parallel-lint/PHP-Parallel-Lint) - This tool checks syntax of PHP files faster than serial check with a fancier output. * [Parse](https://github.com/psecio/parse) - A Static Security Scanner * [pdepend](https://pdepend.org/) - Calculates software metrics like cyclomatic complexity for PHP code. * [phan](https://github.com/etsy/phan) - a modern static analyzer from etsy @@ -369,6 +416,10 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [twig-lint](https://github.com/asm89/twig-lint) - twig-lint is a lint tool for your twig files. * [WAP](https://www.owasp.org/index.php/OWASP_WAP-Web_Application_Protection) - Tool to detect and correct input validation vulnerabilities in PHP (4.0 or higher) web applications and predicts false positives by combining static analysis and data mining. +## Perl + +* [Perl::Critic](https://metacpan.org/pod/Perl::Critic) - Critique Perl source code for best-practices. + ## Python * [bandit](https://github.com/PyCQA/bandit) - a tool to find common security issues in Python code @@ -448,6 +499,13 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [Rust Language Server](https://github.com/rust-lang-nursery/rls) - Supports functionality such as 'goto definition', symbol search, reformatting, and code completion, and enables renaming and refactorings. * [rustfix](https://github.com/killercup/rustfix) - read and apply the suggestions made by rustc (and third-party lints, like those offered by clippy). +## SQL + +* [sqlcheck](https://github.com/jarulraj/sqlcheck-old) - Automatically identify anti-patterns in SQL queries +* [sqlint](https://github.com/purcell/sqlint) - Simple SQL linter +* [tsqllint](https://github.com/tsqllint/tsqllint) - T-SQL-specific linter +* [TSqlRules](https://github.com/ashleyglee/TSqlRules) - TSQL Static Code Analysis Rules for SQL Server + ## Scala * [linter](https://github.com/HairyFotr/linter) - Linter is a Scala static analysis compiler plugin which adds compile-time checks for various possible bugs, inefficiencies, and style problems. @@ -466,13 +524,6 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [slither](https://github.com/trailofbits/slither) - Static analysis framework that runs a suite of vulnerability detectors, prints visual information about contract details, and provides an API to easily write custom analyses * [solium](https://github.com/duaraghav8/Solium) - Solium is a linter to identify and fix style and security issues in Solidity smart contracts -## SQL - -* [sqlcheck](https://github.com/jarulraj/sqlcheck-old) - Automatically identify anti-patterns in SQL queries -* [sqlint](https://github.com/purcell/sqlint) - Simple SQL linter -* [tsqllint](https://github.com/tsqllint/tsqllint) - T-SQL-specific linter -* [TSqlRules](https://github.com/ashleyglee/TSqlRules) - TSQL Static Code Analysis Rules for SQL Server - ## Swift * [SwiftFormat](https://github.com/nicklockwood/SwiftFormat) - A library and command-line formatting tool for reformatting Swift code @@ -496,11 +547,12 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [Test Design Studio](http://patterson-consulting.net/tds) :copyright: - A full IDE with static code analysis for Micro Focus Unified Functional Testing VBScript-based automated tests. + # Multiple languages * [AppChecker](https://npo-echelon.ru/en/solutions/appchecker.php) :copyright: - Static analysis for C/C++/C#, PHP and Java -* [ApplicationInspector](https://github.com/microsoft/ApplicationInspector) - creates reports of over 400 rule patterns for feature detection (e.g. the use of cryptography or version control in apps). Supports C/C++, C#, Java, JavaScript, HTML, Python, Objective-C, Go, Ruby, Powershell * [Application Inspector](https://www.ptsecurity.com/ww-en/products/ai/) :copyright: - Commercial Static Code Analysis which generates exploits to verify vulnerabilities. Supports: Java (including JSP and JSF), C#, VB.Net, ASP.NET, Php, JavaScript, Objective-C, Swift, C\C++, SQL (PL/SQL. T-SQL. MySQL), HTML5 +* [ApplicationInspector](https://github.com/microsoft/ApplicationInspector) - creates reports of over 400 rule patterns for feature detection (e.g. the use of cryptography or version control in apps). Supports C/C++, C#, Java, JavaScript, HTML, Python, Objective-C, Go, Ruby, Powershell * [AppScan Source](https://www.hcltechsw.com/wps/portal/products/appscan/home) :copyright: - Commercial Static Code Analysis. Supports: Microsoft .NET Framework (C#, ASP.NET, VB.NET), ASP (JavaScript/VBScript), C/C++, COBOL, ColdFusion, JavaScript, JavaServer Pages (JSP), Java™ (including support for Android APIs), Perl, PHP, PL/SQL, T-SQL, Visual Basic 6 * [APPscreener](https://appscreener.us) :copyright: - Static code analysis for binary and source code - Java/Scala, PHP, Javascript, C#, PL/SQL, Python, T-SQL, C/C++, ObjectiveC/Swift, Visual Basic 6.0, Ruby, Delphi, ABAP, HTML5 and Solidity * [ArchUnit](https://www.archunit.org/) - Unit test your Java or Kotlin architecture @@ -514,33 +566,33 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [CodeFactor](https://codefactor.io) :copyright: - Static Code Analysis for C#, C, C++, CoffeeScript, CSS, Groovy, GO, JAVA, JavaScript, Less, Python, Ruby, Scala, SCSS, TypeScript. * [CodeIt.Right](https://submain.com/products/codeit.right.aspx) :copyright: - CodeIt.Right™ provides a fast, automated way to ensure that your source code adheres to (your) predefined design and style guidelines as well as best coding practices. Supported languages: C#, VB.NET. * [CodeScene](https://empear.com/) :copyright: - CodeScene prioritizes technical debt, finds social patterns and identifies hidden risks in your code. -* [cqc](https://github.com/xcatliu/cqc) - Check your code quality for js, jsx, vue, css, less, scss, sass and styl files. * [Coverity](https://www.synopsys.com/software-integrity/security-testing/static-analysis-sast.html) :copyright: - Synopsys Coverity supports 20 languages and over 70 frameworks including Ruby on rails, Scala, PHP, Python, JavaScript, TypeScript, Java, Fortran, C, C++, C#, VB.NET. +* [cqc](https://github.com/xcatliu/cqc) - Check your code quality for js, jsx, vue, css, less, scss, sass and styl files. * [DeepSource](https://deepsource.io/) :copyright: - In-depth static analysis to monitor source code quality and security. Supports Python and Go and can detect 600+ types of issues in verticals of bug risks, security, anti-patterns, performance, documentation and style. Native integration with GitHub. * [Depends](https://github.com/multilang-depends/depends) - Analyses the comprehensive dependencies of code elements for Java, C/C++, Ruby. * [DevSkim](https://github.com/microsoft/devskim) - Regex-based static analysis tool for Visual Studio, VS Code, and Sublime Text - C/C++, C#, PHP, ASP, Python, Ruby, Java, and others. -* [Fortify](https://software.microfocus.com/en-us/products/static-code-analysis-sast/overview) :copyright: A commercial static analysis platform that supports the scanning of C/C++, C#, VB.NET, VB6, ABAP/BSP, ActionScript, Apex, ASP.NET, Classic ASP, VB Script, Cobol, ColdFusion, HTML, Java, JS, JSP, MXML/Flex, Objective-C, PHP, PL/SQL, T-SQL, Python (2.6, 2.7), Ruby (1.9.3), Swift, Scala, VB, and XML. +* [Fortify](https://software.microfocus.com/en-us/products/static-code-analysis-sast/overview) :copyright: - A commercial static analysis platform that supports the scanning of C/C++, C#, VB.NET, VB6, ABAP/BSP, ActionScript, Apex, ASP.NET, Classic ASP, VB Script, Cobol, ColdFusion, HTML, Java, JS, JSP, MXML/Flex, Objective-C, PHP, PL/SQL, T-SQL, Python (2.6, 2.7), Ruby (1.9.3), Swift, Scala, VB, and XML. * [Goodcheck](https://github.com/sideci/goodcheck) - Regexp based customizable linter * [graudit](https://github.com/wireghoul/graudit) - Grep rough audit - source code auditing tool - C/C++, PHP, ASP, C#, Java, Perl, Python, Ruby * [Hound CI](https://houndci.com/) - Comments on style violations in GitHub pull requests. Supports Coffeescript, Go, HAML, JavaScript, Ruby, SCSS and Swift. * [imhotep](https://github.com/justinabrahms/imhotep) - Comment on commits coming into your repository and check for syntactic errors and general lint warnings. * [Infer](https://github.com/facebook/infer) - A static analyzer for Java, C and Objective-C -* [Klocwork](http://www.klocwork.com/products-services/klocwork) :copyright: - Quality and Security Static analysis for C/C++, Java and C# * [Kiuwan](https://www.kiuwan.com/code-security-sast/) :copyright: - Identify and remediate cyber threats in a blazingly fast, collaborative environment, with seamless integration in your SDLC. Python, C\C++, Java, C#, PHP and more +* [Klocwork](http://www.klocwork.com/products-services/klocwork) :copyright: - Quality and Security Static analysis for C/C++, Java and C# * [oclint](https://github.com/oclint/oclint) - A static source code analysis tool to improve quality and reduce defects for C, C++ and Objective-C * [pfff](https://github.com/facebook/pfff) - Facebook's tools for code analysis, visualizations, or style-preserving source transformation for many languages * [PMD](https://pmd.github.io/) - A source code analyzer for Java, Javascript, PLSQL, XML, XSL and others -* [Pronto](https://github.com/prontolabs/pronto) - Quick automated code review of your changes. Supports more than 40 runners for various languages, including Clang, Elixir, JavaSCript, PHP, Ruby and more * [pre-commit](https://github.com/pre-commit/pre-commit) - A framework for managing and maintaining multi-language pre-commit hooks. +* [Pronto](https://github.com/prontolabs/pronto) - Quick automated code review of your changes. Supports more than 40 runners for various languages, including Clang, Elixir, JavaSCript, PHP, Ruby and more * [PT.PM](https://github.com/PositiveTechnologies/PT.PM) - An engine for searching patterns in the source code, based on Unified AST or UST. At present time C#, Java, PHP, PL/SQL, T-SQL, and JavaScript are supported. Patterns can be described within the code or using a DSL. * [PVS-Studio](https://www.viva64.com/en/pvs-studio/) :copyright: - a ([conditionally free](https://www.viva64.com/en/b/0614/) for FOSS and individual developers) static analysis of C, C++, C# and Java code. For advertising purposes [you can propose a large FOSS project for analysis by PVS employees](https://github.com/viva64/pvs-studio-check-list). Supports CWE mapping, MISRA and CERT coding standards. * [Reviewdog](https://github.com/haya14busa/reviewdog) - A tool for posting review comments from any linter in any code hosting service. * [Security Code Scan](https://security-code-scan.github.io/) - Security code analyzer for C# and VB.NET. Detects various security vulnerability patterns: SQLi, XSS, CSRF, XXE, Open Redirect, etc. * [Semmle QL and LGTM](https://semmle.com/) :copyright: - Find security vulnerabilities, variants, and critical code quality issues using queries over source code. Automatic PR code review; free for public GitHub/Bitbucket repo: [LGTM.com](https://LGTM.com). * [shipshape](https://github.com/google/shipshape) - Static program analysis platform that allows custom analyzers to plug in through a common interface +* [SmartDec Scanner](https://smartdecscanner.com/) :copyright: - SAST tool which is capable of identifying vulnerabilities and undocumented features. The analyzer scans the source code and executables without debug info (i.e. binaries). Supports: Java/Scala/Kotlin, PHP, C#, JavaScript, TypeScript, VBScript, HTML5, Python, Perl, C/C++, Objective-C/Swift, PL/SQL, T-SQL, ABAP, 1C, Apex, Go, Ruby, Groovy, Delphi, VBA, Visual Basic 6, Solidity, Vyper, COBOL. * [SonarQube](http://www.sonarqube.org/) - SonarQube is an open platform to manage code quality. * [STOKE](https://github.com/StanfordPL/stoke) - a programming-language agnostic stochastic optimizer for the x86_64 instruction set. It uses random search to explore the extremely high-dimensional space of all possible program transformations -* [SmartDec Scanner](https://smartdecscanner.com/) :copyright: - SAST tool which is capable of identifying vulnerabilities and undocumented features. The analyzer scans the source code and executables without debug info (i.e. binaries). Supports: Java/Scala/Kotlin, PHP, C#, JavaScript, TypeScript, VBScript, HTML5, Python, Perl, C/C++, Objective-C/Swift, PL/SQL, T-SQL, ABAP, 1C, Apex, Go, Ruby, Groovy, Delphi, VBA, Visual Basic 6, Solidity, Vyper, COBOL. * [Synopsys](https://www.synopsys.com/software-integrity/security-testing/static-analysis-sast.html) :copyright: - A commercial static analysis platform that allows for scanning of multiple languages (C/C++, Android, C#, Java, JS, PHP, Python, Node.JS, Ruby, Fortran, and Swift) * [TscanCode](https://github.com/Tencent/TscanCode) - A fast and accurate static analysis solution for C/C++, C#, Lua codes provided by Tencent. Using GPLv3 license. * [Undebt](https://github.com/Yelp/undebt) - Language-independent tool for massive, automatic, programmable refactoring based on simple pattern definitions @@ -551,12 +603,8 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [Wotan](https://github.com/fimbullinter/wotan) - Pluggable TypeScript and JavaScript linter * [XCode](https://developer.apple.com/xcode/) :copyright: - XCode provides a pretty decent UI for [Clang's](http://clang-analyzer.llvm.org/xcode.html) static code analyzer (C/C++, Obj-C) -# Other - -## Build tools -* [checkmake](https://github.com/mrtazz/checkmake) - Linter / Analyzer for Makefiles -* [codechecker](https://github.com/Ericsson/codechecker) - a defect database and viewer extension for the Clang Static Analyzer +# Other ## Binaries @@ -566,17 +614,23 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [Manalyze](https://github.com/JusticeRage/Manalyze) - A static analyzer, which checks portable executables for malicious content. * [Twiggy](https://github.com/rustwasm/twiggy) - Analyzes a binary's call graph to profile code size. The goal is to slim down binaries. +## Build tools -## Containers +* [checkmake](https://github.com/mrtazz/checkmake) - Linter / Analyzer for Makefiles +* [codechecker](https://github.com/Ericsson/codechecker) - a defect database and viewer extension for the Clang Static Analyzer -* [anchore](https://anchore.io/) - Discover, analyze, and certify container images -* [clair](https://github.com/coreos/clair) - Vulnerability Static Analysis for Containers -* [collector](https://github.com/banyanops/collector) - Run arbitrary scripts inside containers, and gather useful information -* [dagda](https://github.com/eliasgranderubio/dagda) - Perform static analysis of known vulnerabilities in docker images/containers. -* [Docker Label Inspector](https://github.com/garethr/docker-label-inspector) - Lint and validate Dockerfile labels -* [Haskell Dockerfile Linter](https://github.com/lukasmartinelli/hadolint) - A smarter Dockerfile linter that helpsyou build best practice Docker images -* [kube-score](https://github.com/zegl/kube-score) - Static code analysis of your Kubernetes object definitions. +## CSS/SASS/SCSS +* [CSS Stats](https://github.com/cssstats/cssstats) - Potentially interesting stats on stylesheets +* [CSScomb](https://github.com/csscomb/csscomb.js) - a coding style formatter for CSS. Supports own configurations to make style sheets beautiful and consistent +* [CSSLint](https://github.com/CSSLint/csslint) - Does basic syntax checking and finds problematic patterns or signs of inefficiency +* [GraphMyCSS.com](https://graphmycss.com) - CSS Specificity Graph Generator +* [Parker](https://github.com/katiefenn/parker) - Stylesheet analysis tool +* [Project Wallace CSS Analyzer](https://github.com/projectwallace/css-analyzer) - Analytics for CSS, part of [Project Wallace](https://www.projectwallace.com) +* [sass-lint](https://github.com/sasstools/sass-lint) - A Node-only Sass linter for both sass and scss syntax. +* [scsslint](https://github.com/brigade/scss-lint) - Linter for SCSS files +* [Specificity Graph](https://github.com/pocketjoso/specificity-graph) - CSS Specificity Graph Generator +* [Stylelint](http://stylelint.io/) - Linter for SCSS/CSS files ## Config Files @@ -596,19 +650,15 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [terrascan](https://github.com/cesar-rodriguez/terrascan) - Collection of security and best practice tests for static code analysis of Terraform templates. * [tflint](https://github.com/wata727/tflint) - A Terraform linter for detecting errors that can not be detected by `terraform plan`. +## Containers -## CSS - -* [CSS Stats](https://github.com/cssstats/cssstats) - Potentially interesting stats on stylesheets -* [CSScomb](https://github.com/csscomb/csscomb.js) - a coding style formatter for CSS. Supports own configurations to make style sheets beautiful and consistent -* [CSSLint](https://github.com/CSSLint/csslint) - Does basic syntax checking and finds problematic patterns or signs of inefficiency -* [GraphMyCSS.com](https://graphmycss.com) - CSS Specificity Graph Generator -* [Parker](https://github.com/katiefenn/parker) - Stylesheet analysis tool -* [Project Wallace CSS Analyzer](https://github.com/projectwallace/css-analyzer) - Analytics for CSS, part of [Project Wallace](https://www.projectwallace.com) -* [sass-lint](https://github.com/sasstools/sass-lint) - A Node-only Sass linter for both sass and scss syntax. -* [scsslint](https://github.com/brigade/scss-lint) - Linter for SCSS files -* [Specificity Graph](https://github.com/pocketjoso/specificity-graph) - CSS Specificity Graph Generator -* [Stylelint](http://stylelint.io/) - Linter for SCSS/CSS files +* [anchore](https://anchore.io/) - Discover, analyze, and certify container images +* [clair](https://github.com/coreos/clair) - Vulnerability Static Analysis for Containers +* [collector](https://github.com/banyanops/collector) - Run arbitrary scripts inside containers, and gather useful information +* [dagda](https://github.com/eliasgranderubio/dagda) - Perform static analysis of known vulnerabilities in docker images/containers. +* [Docker Label Inspector](https://github.com/garethr/docker-label-inspector) - Lint and validate Dockerfile labels +* [Haskell Dockerfile Linter](https://github.com/lukasmartinelli/hadolint) - A smarter Dockerfile linter that helpsyou build best practice Docker images +* [kube-score](https://github.com/zegl/kube-score) - Static code analysis of your Kubernetes object definitions. ## Gherkin @@ -621,16 +671,20 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [HTMLHint](https://github.com/yaniswang/HTMLHint) - A Static Code Analysis Tool for HTML * [Polymer-analyzer](https://github.com/Polymer/polymer-analyzer) - A static analysis framework for Web Components. -## IDE +## HTML5 -* [Android Studio](https://developer.android.com/studio) - Based on IntelliJ IDEA, and comes bundled with tools for Android including Android Lint. -* [IntelliJ IDEA](https://www.jetbrains.com/idea/) - Comes bundled with a lot of inspections for Java and Kotlin and includes tools for refactoring, formatting and more. +* [HTML Inspector](https://github.com/philipwalton/html-inspector) - HTML Inspector is a code quality tool to help you and your team write better markup. +* [HTML Tidy](http://www.html-tidy.org/) - Corrects and cleans up HTML and XML documents by fixing markup errors and upgrading legacy code to modern standards. +* [HTMLHint](https://github.com/yaniswang/HTMLHint) - A Static Code Analysis Tool for HTML +* [Polymer-analyzer](https://github.com/Polymer/polymer-analyzer) - A static analysis framework for Web Components. ## IDE Plugins * [ale](https://github.com/w0rp/ale) - Asynchronous Lint Engine for Vim and NeoVim with support for many languages -* [Attackflow Extension](https://www.attackflow.com/Extension) :copyright: - Attackflow plugin for Visual Studio, which enables developers to find critical security bugs at real time in the source code without any prior knowledge. +* [Android Studio](https://developer.android.com/studio) - Based on IntelliJ IDEA, and comes bundled with tools for Android including Android Lint. +* [Attackflow Extension](https://www.attackflow.com/Extension) - Attackflow plugin for Visual Studio, which enables developers to find critical security bugs at real time in the source code without any prior knowledge. * [DevSkim](https://github.com/Microsoft/DevSkim) - Inline, realtime security analysis. Works with multiple programming languages and IDEs (VS, VS Code, Sublime Text, ...). +* [IntelliJ IDEA](https://www.jetbrains.com/idea/) - Comes bundled with a lot of inspections for Java and Kotlin and includes tools for refactoring, formatting and more. * [Puma Scan](https://github.com/pumasecurity/puma-scan) - Puma Scan provides real time secure code analysis for common vulnerabilities (XSS, SQLi, CSRF, LDAPi, crypto, deserialization, etc.) as development teams write code in Visual Studio. * [Security Code Scan](https://security-code-scan.github.io/) - Security code analyzer for C# and VB.NET that integrates into Visual Studio 2015 and newer. Detects various security vulnerability patterns: SQLi, XSS, CSRF, XXE, Open Redirect, etc. * [vint](https://github.com/Kuniwak/vint) - Fast and Highly Extensible Vim script Language Lint implemented by Python. @@ -663,7 +717,7 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [lintian](https://github.com/Debian/lintian) - Static analysis tool for Debian packages * [rpmlint](https://github.com/rpm-software-management/rpmlint) - Tool for checking common errors in rpm packages -## Protocol-Buffer +## Protocol Buffers * [protolint](https://github.com/yoheimuta/protolint) - Pluggable linter and fixer to enforce Protocol Buffer style and conventions. @@ -683,9 +737,35 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [dennis](https://github.com/willkg/dennis/) - A set of utilities for working with PO files to ease development and improve quality. +## Web services + +* [Codacy](https://www.codacy.com/) - Code Analysis to ship Better Code, Faster. +* [Code Climate](https://codeclimate.com/) - The open and extensible static analysis platform, for everyone. +* [Code Inspector](https://www.code-inspector.com) - Code quality and technical debt management platform that supports 10+ languages. +* [Codeac](https://www.codeac.io?ref=awesome-static-analysis) - Automated code review tool integrates with GitHub, Bitbucket and GitLab (even self-hosted). Available for JavaScript, TypeScript, Python, Ruby, Go, PHP, Java, Docker, and more. (open-source free) +* [CodeFactor](https://codefactor.io) - Automated Code Analysis for repos on GitHub or BitBucket. +* [CodeFlow](https://www.getcodeflow.com) - Automated code analysis tool to deal with technical depth. Integrates with Bitbucket and Gitlab. (free for Open Source Projects) +* [CodePatrol](https://cyber-security.claranet.fr/en/codepatrol) - Automated SAST code reviews driven by security, supports 15+ languages and includes security training. +* [Embold](https://embold.io) - Intelligent software analytics platform that identifies design issues, code issues, duplication and metrics. Supports Java, C, C++, C#, JavaScript, TypeScript, Python, Go, Kotlin and more. +* [kiuwan](https://www.kiuwan.com/) - Software Analytics in the Cloud supporting more than 22 programming languages. +* [Landscape](https://landscape.io/) - Static code analysis for Python +* [Layered Insight](https://layeredinsight.com/) - Container native application protection to provide visibility and control of containerized applications. +* [LGTM.com](https://lgtm.com/) - Deep code analysis for GitHub and Bitbucket to find security vulnerabilities and critical code quality issues (using Semmle QL). Automatic code review for pull requests; free for public repositories. +* [Nitpick CI](https://nitpick-ci.com) - Automated PHP code review +* [PullRequest](https://www.pullrequest.com) - Code review as a service with built-in static analysis +* [QuantifiedCode](https://www.quantifiedcode.com/) - Automated code review & repair +* [Reshift](https://softwaresecured.com/reshift/) - A source code analysis tool for detecting and managing Java security vulnerabilities. +* [Scrutinizer](https://scrutinizer-ci.com/) - A proprietary code quality checker that can be integrated with GitHub +* [SensioLabs Insight](https://insight.sensiolabs.com/) - Detect security risks, find bugs and provide actionable metrics for PHP projects +* [Sider](https://sider.review) - An automated code reviewing tool. Improving developers' productivity. +* [Snyk](https://snyk.io/) - Vulnerability scanner for dependencies of node.js apps (free for Open Source Projects) +* [SonarCloud](https://sonarcloud.io) - Multilanguage cloud-based static code analysis. History, trends, security hot-spots, pull request analysis and more. Free for open source. +* [Teamscale](http://www.teamscale.com/) - Static and dynamic analysis tool supporting more than 25 languages and direct IDE integration. Free hosting for Open Source projects available on request. Free academic licenses available. +* [Upsource](https://www.jetbrains.com/upsource/) - Code review tool with static code analysis and code-aware navigation for Java, PHP, JavaScript and Kotlin. + ## Writing -* [After the Deadline](https://afterthedeadline.com/) :warning: - spell, style and grammar checker +* [After the Deadline](https://afterthedeadline.com/) - spell, style and grammar checker * [codespell](https://github.com/codespell-project/codespell) - check code for common misspellings * [languagetool](https://github.com/languagetool-org/languagetool) - Style and grammar checker for 25+ languages. It finds many errors that a simple spell checker cannot detect. * [misspell-fixer](https://github.com/vlajos/misspell-fixer) - Quick tool for fixing common misspellings, typos in source code @@ -694,39 +774,14 @@ Also check out the sister project, [awesome-dynamic-analysis](https://github.com * [vale](https://github.com/ValeLint/vale) - A customizable, syntax-aware linter for prose. * [write-good](https://github.com/btford/write-good) - A linter with a focus on eliminating "weasel words". -## Web services -* [Codacy](https://www.codacy.com/) :copyright: - Code Analysis to ship Better Code, Faster. -* [Code Climate](https://codeclimate.com/) :copyright: - The open and extensible static analysis platform, for everyone. -* [Code Inspector](https://www.code-inspector.com) :copyright: - Code quality and technical debt management platform that supports 10+ languages. -* [Codeac](https://www.codeac.io?ref=awesome-static-analysis) :copyright: - Automated code review tool integrates with GitHub, Bitbucket and GitLab (even self-hosted). Available for JavaScript, TypeScript, Python, Ruby, Go, PHP, Java, Docker, and more. (open-source free) -* [CodeFactor](https://codefactor.io) :copyright: - Automated Code Analysis for repos on GitHub or BitBucket. -* [CodeFlow](https://www.getcodeflow.com) :copyright: - Automated code analysis tool to deal with technical depth. Integrates with Bitbucket and Gitlab. (free for Open Source Projects) -* [CodePatrol](https://cyber-security.claranet.fr/en/codepatrol) :copyright: - Automated SAST code reviews driven by security, supports 15+ languages and includes security training. -* [Embold](https://embold.io) :copyright: - Intelligent software analytics platform that identifies design issues, code issues, duplication and metrics. Supports Java, C, C++, C#, JavaScript, TypeScript, Python, Go, Kotlin and more. -* [kiuwan](https://www.kiuwan.com/) :copyright: - Software Analytics in the Cloud supporting more than 22 programming languages. -* [Landscape](https://landscape.io/) :copyright: - Static code analysis for Python -* [Layered Insight](https://layeredinsight.com/) :copyright: - Container native application protection to provide visibility and control of containerized applications. -* [LGTM.com](https://lgtm.com/) :copyright: - Deep code analysis for GitHub and Bitbucket to find security vulnerabilities and critical code quality issues (using Semmle QL). Automatic code review for pull requests; free for public repositories. -* [Nitpick CI](https://nitpick-ci.com) :copyright: - Automated PHP code review -* [PullRequest](https://www.pullrequest.com) :copyright: - Code review as a service with built-in static analysis -* [QuantifiedCode](https://www.quantifiedcode.com/) - Automated code review & repair -* [Reshift](https://softwaresecured.com/reshift/) :copyright: - A source code analysis tool for detecting and managing Java security vulnerabilities. -* [Scrutinizer](https://scrutinizer-ci.com/) :copyright: - A proprietary code quality checker that can be integrated with GitHub -* [SensioLabs Insight](https://insight.sensiolabs.com/) :copyright: - Detect security risks, find bugs and provide actionable metrics for PHP projects -* [Sider](https://sider.review) :copyright: - An automated code reviewing tool. Improving developers' productivity. -* [Snyk](https://snyk.io/) :copyright: - Vulnerability scanner for dependencies of node.js apps (free for Open Source Projects) -* [SonarCloud](https://sonarcloud.io) :copyright: - Multilanguage cloud-based static code analysis. History, trends, security hot-spots, pull request analysis and more. Free for open source. -* [Teamscale](http://www.teamscale.com/) :copyright: - Static and dynamic analysis tool supporting more than 25 languages and direct IDE integration. Free hosting for Open Source projects available on request. Free academic licenses available. -* [Upsource](https://www.jetbrains.com/upsource/) :copyright: - Code review tool with static code analysis and code-aware navigation for Java, PHP, JavaScript and Kotlin. # More collections * [go-tools](https://github.com/dominikh/go-tools) - A collection of tools and libraries for working with Go code, including linters and static analysis * [linters](https://github.com/mcandre/linters) - An introduction to static code analysis -* [php-static-analysis-tools](https://github.com/exakat/php-static-analysis-tools) - A reviewed list of useful PHP static analysis tools +* [php-static-analysis-tools](https://github.com/exakat/php-static-analysis-tools) - A reviewed list of useful PHP static analysis tools * [Tools for C/C++](https://www.peerlyst.com/posts/a-list-of-static-analysis-tools-for-c-c-peerlyst?utm_source=twitter&utm_medium=social&utm_content=peerlyst_post&utm_campaign=peerlyst_resources) - A list of static analysis tools for C/C++ -* [Tools for Tcl](https://wiki.tcl-lang.org/page/Static+syntax+analysis#95329c336da897c3dea8ab434ca30575f4529bf6f514c1519881bd126e1d1423) - A wiki-page with several Tcl checker and static syntax analysis tools. -* [Wikipedia](http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis) - A list of tools for static code analysis. +* [Wikipedia](http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis) - A list of tools for static code analysis. ## License diff --git a/ci/Cargo.lock b/ci/Cargo.lock deleted file mode 100644 index 28f27000b..000000000 --- a/ci/Cargo.lock +++ /dev/null @@ -1,216 +0,0 @@ -[[package]] -name = "aho-corasick" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "memchr 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "backtrace" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "backtrace-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "backtrace-sys" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cc 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cc" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "cfg-if" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ci" -version = "0.2.0" -dependencies = [ - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "failure" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "backtrace 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "failure_derive" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.26 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lazy_static" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "libc" -version = "0.2.40" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "memchr" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "proc-macro2" -version = "0.4.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "quote" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex-syntax" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "syn" -version = "0.15.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "synstructure" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.26 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "thread_local" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "ucd-util" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "utf8-ranges" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[metadata] -"checksum aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1e9a933f4e58658d7b12defcf96dc5c720f20832deebe3e0a19efd3b6aaeeb9e" -"checksum backtrace 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea58cd16fd6c9d120b5bcb01d63883ae4cc7ba2aed35c1841b862a3c7ef6639" -"checksum backtrace-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "44585761d6161b0f57afc49482ab6bd067e4edef48c12a152c237eb0203f7661" -"checksum cc 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "0ebb87d1116151416c0cf66a0e3fb6430cccd120fd6300794b4dfaa050ac40ba" -"checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4" -"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" -"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" -"checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1" -"checksum libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)" = "6fd41f331ac7c5b8ac259b8bf82c75c0fb2e469bbf37d2becbba9a6a2221965b" -"checksum memchr 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e1dd4eaac298c32ce07eb6ed9242eda7d82955b9170b7d6db59b2e02cc63fcb8" -"checksum proc-macro2 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)" = "38fddd23d98b2144d197c0eca5705632d4fe2667d14a6be5df8934f8d74f1978" -"checksum quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)" = "cdd8e04bd9c52e0342b406469d494fcb033be4bdbe5c606016defbb1681411e1" -"checksum regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "37e7cbbd370869ce2e8dff25c7018702d10b21a20ef7135316f8daecd6c25b7f" -"checksum regex-syntax 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "8c2f35eedad5295fdf00a63d7d4b238135723f92b434ec06774dad15c7ab0861" -"checksum rustc-demangle 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "76d7ba1feafada44f2d38eed812bd2489a03c0f5abb975799251518b68848649" -"checksum syn 0.15.26 (registry+https://github.com/rust-lang/crates.io-index)" = "f92e629aa1d9c827b2bb8297046c1ccffc57c99b947a680d3ccff1f136a3bee9" -"checksum synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73687139bf99285483c96ac0add482c3776528beac1d97d444f6e91f203a2015" -"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" -"checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d" -"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" -"checksum winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3" -"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/ci/Cargo.toml b/ci/Cargo.toml deleted file mode 100644 index 76c233e15..000000000 --- a/ci/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -authors = ["Matthias Endler "] -name = "ci" -version = "0.3.0" -edition = "2018" - -[dependencies] -lazy_static = "1.2.0" -regex = "1.1.0" -failure = "0.1.5" diff --git a/ci/src/lib.rs b/ci/src/lib.rs deleted file mode 100644 index b0790611d..000000000 --- a/ci/src/lib.rs +++ /dev/null @@ -1,174 +0,0 @@ -// `error_chain!` can recurse deeply -#![recursion_limit = "1024"] - -use lazy_static::lazy_static; -use failure::{Error, err_msg, bail}; -use regex::Regex; -use std::cmp::Ordering; - -lazy_static! { - static ref TOOL_REGEX: Regex = Regex::new(r"\*\s\[(?P.*)\]\((?Phttp[s]?://.*)\)\s(:warning:\s)?(:copyright:\s)?\-\s(?P.*)").unwrap(); - static ref SUBSECTION_HEADLINE_REGEX: Regex = Regex::new(r"[A-Za-z\s]*").unwrap(); -} - -pub struct Tool { - name: String, - link: String, - desc: String, -} - -impl Tool { - fn new>(name: T, link: T, desc: T) -> Self { - Tool { - name: name.into(), - link: link.into(), - desc: desc.into(), - } - } -} - -impl PartialEq for Tool { - fn eq(&self, other: &Tool) -> bool { - self.name.to_lowercase() == other.name.to_lowercase() - } -} - -impl Eq for Tool {} - -impl PartialOrd for Tool { - fn partial_cmp(&self, other: &Tool) -> Option { - Some(self.cmp(other)) - } -} - -impl Ord for Tool { - fn cmp(&self, other: &Tool) -> Ordering { - self.name.to_lowercase().cmp(&other.name.to_lowercase()) - } -} - -pub fn check_tool(tool: &str) -> Result { - println!("Checking `{}`", tool); - // NoneError can not implement Fail at this time. That's why we use ok_or - // See https://github.com/rust-lang-nursery/failure/issues/61 - let captures = TOOL_REGEX.captures(tool).ok_or(err_msg(format!("Tool does not match regex: {}", tool)))?; - - let name = captures["name"].to_string(); - let link = captures["link"].to_string(); - let desc = captures["desc"].to_string(); - - if name.len() > 50 { - bail!("Name of tool is suspiciously long: `{}`", name); - } - - // A somewhat arbitrarily chosen description length. - // Note that this includes any markdown formatting - // like links. Therefore we are quite generous for now. - if desc.len() > 200 { - bail!("Desription of `{}` is too long: {}", name, desc); - } - - Ok(Tool::new(name, link, desc)) -} - -pub fn check_section(section: String) -> Result<(), Error> { - // Ignore license section - if section.starts_with("License") { - return Ok(()); - } - - // Skip section headline - let lines: Vec<_> = section.split('\n').skip(1).collect(); - if lines.is_empty() { - bail!("Empty section: {}", section) - }; - - let mut tools = vec![]; - for line in lines { - if line.is_empty() { - continue; - } - // Exception for subsection headlines - if !line.starts_with("*") && line.ends_with(":") && - SUBSECTION_HEADLINE_REGEX.is_match(line) - { - continue; - } - tools.push(check_tool(line)?); - } - // Tools need to be alphabetically ordered - check_ordering(tools) -} - -pub fn check_ordering(tools: Vec) -> Result<(), Error> { - match tools.windows(2).find(|t| t[0] > t[1]) { - Some(tools) => bail!("`{}` does not conform to alphabetical ordering", tools[0].name), - None => Ok(()), - } -} - -pub fn check(text: String) -> Result<(), Error> { - let sections = text.split("\n# "); - - // Skip first two sections, - // as they contain the prelude and the table of contents. - for section in sections.skip(2) { - let subsections = section.split("## "); - for subsection in subsections.skip(1) { - check_section(subsection.into())?; - } - } - Ok(()) -} - -#[cfg(test)] -mod tests { - use super::*; - use std::fs::File; - use std::io::Read; - - #[test] - fn test_complete_file() { - let mut file = File::open("../README.md").expect("Can't open testfile"); - let mut contents = String::new(); - file.read_to_string(&mut contents).expect("Can't read testfile contents"); - let result = check(contents); - if result.is_err() { - println!("Error: {:?}", result.err()); - assert!(false); - } else { - assert!(true); - } - } - - - #[test] - fn test_correct_ordering() { - assert!(check_ordering(vec![]).is_ok()); - - assert!(check_ordering(vec![Tool::new("a", "url", "desc")]).is_ok()); - - assert!( - check_ordering(vec![ - Tool::new("0", "", ""), - Tool::new("1", "", ""), - Tool::new("a", "", ""), - Tool::new("Axx", "", ""), - Tool::new("B", "", ""), - Tool::new("b", "", ""), - Tool::new("c", "", ""), - ]).is_ok() - ); - } - - #[test] - fn test_incorrect_ordering() { - assert!( - check_ordering(vec![ - Tool::new("b", "", ""), - Tool::new("a", "", ""), - Tool::new("c", "", ""), - ]).is_err() - ); - } -} diff --git a/ci/.gitignore b/data/.gitignore similarity index 100% rename from ci/.gitignore rename to data/.gitignore diff --git a/ci/README.md b/data/README.md similarity index 100% rename from ci/README.md rename to data/README.md diff --git a/data/categories.yml b/data/categories.yml new file mode 100644 index 000000000..a4eedff5b --- /dev/null +++ b/data/categories.yml @@ -0,0 +1,189 @@ +--- +languages: + - name: .NET + tag: dotnet + - name: ABAP + tag: abap + - name: ActionScript + tag: actionscript + - name: Active Server Pages + tag: asp + - name: Ada + tag: ada + - name: ASP.NET + tag: aspnet + - name: Apex + tag: apex + - name: Awk + tag: awk + - name: C + tag: c + - name: Clojure + tag: clojure + - name: COBOL + tag: cobol + - name: CoffeeScript + tag: coffeescript + - name: ColdFusion + tag: coldfusion + - name: C++ + tag: cpp + - name: "C#" + tag: csharp + - name: Crystal + tag: crystal + - name: Dlang + tag: dlang + - name: Delphi + tag: delphi + - name: Elixir + tag: elixir + - name: Elm + tag: elm + - name: Erlang + tag: erlang + - name: "F#" + tag: fsharp + - name: Fortran + tag: fortran + - name: Go + tag: go + - name: Groovy + tag: groovy + - name: Haskell + tag: haskell + - name: Haxe + tag: haxe + - name: Java + tag: java + - name: JavaServer Pages + tag: jsp + - name: JavaScript + tag: javascript + - name: JSX + tag: jsx + - name: Kotlin + tag: kotlin + - name: Lua + tag: lua + - name: MATLAB + tag: matlab + - name: Objective C + tag: objectivec + - name: Obj-C + tag: objectivec + - name: Perl + tag: perl + - name: PHP + tag: php + - name: PL/SQL + tag: plsql + - name: Python + tag: python + - name: Python wrappers + tag: pythonwrapper + - name: R + tag: r + - name: RPG + tag: rpg + - name: Ruby + tag: ruby + - name: Rust + tag: rust + - name: Scala + tag: scala + - name: Shell + tag: shell + - name: Solidity + tag: solidity + - name: SQL + tag: sql + - name: TSQL + tag: tsql + - name: Swift + tag: swift + - name: Tcl + tag: tcl + - name: TypeScript + tag: typescript + - name: VBScript + tag: vbscript + - name: Visual Basic + tag: visualbasic + - name: Visual Basic for Applications (VBA) + tag: vba +other: + - name: Android + tag: android + - name: Build tools + tag: buildtool + - name: Binaries + tag: binary + - name: More collections + tag: collection + - name: Compiler + tag: compiler + - name: Containers + tag: container + - name: Config Files + tag: configfile + - name: Configuration Management + tag: configmanagement + - name: CSS/SASS/SCSS + tag: css + - name: Gherkin + tag: gherkin + - name: Gradle + tag: gradle + - name: Haml + tag: haml + - name: HTML + tag: html + - name: HTML5 + tag: html + - name: IDE Plugins + tag: ide + - name: LaTeX + tag: latex + - name: Less + tag: less + - name: Makefiles + tag: make + - name: Markdown + tag: markdown + - name: Mobile + tag: mobile + - name: Multiple Languages + tag: multi + - name: Node.js + tag: nodejs + - name: Packages + tag: package + - name: PhoneGap + tag: phonegap + - name: PowerShell + tag: powershell + - name: Protocol Buffers + tag: protobuf + - name: Supporting Tools + tag: support + - name: Template-Languages + tag: template + - name: Translation + tag: translation + - name: Visual Basic .NET + tag: vbnet + - name: Visual Basic + tag: vbasic + - name: Visualforce + tag: visualforce + - name: Vue.js + tag: vue + - name: Vyper (Smart contract) + tag: vyper + - name: Writing + tag: writing + - name: Web services + tag: service + - name: XML + tag: xml diff --git a/data/data.yml b/data/data.yml new file mode 100644 index 000000000..a040da871 --- /dev/null +++ b/data/data.yml @@ -0,0 +1,2499 @@ +--- +- name: ".NET Analyzers" + url: "https://github.com/DotNetAnalyzers" + description: An organization for the development of analyzers (diagnostics and code fixes) using the .NET Compiler Platform. + tags: + - csharp +- name: abaplint + url: "https://github.com/larshp/abaplint" + description: "Linter for ABAP, written in TypeScript." + tags: + - abap +- name: abapOpenChecks + url: "https://github.com/larshp/abapOpenChecks" + description: Enhances the SAP Code Inspector with new and customizable checks. + tags: + - abap +- name: aether + url: "https://github.com/codecombat/aether" + description: "Lint, analyze, normalize, transform, sandbox, run, step through, and visualize user JavaScript, in node or the browser." + tags: + - javascript +- name: After the Deadline + url: "https://afterthedeadline.com/" + description: "spell, style and grammar checker" + tags: + - writing + deprecated: true +- name: ale + url: "https://github.com/w0rp/ale" + description: Asynchronous Lint Engine for Vim and NeoVim with support for many languages + tags: + - ide +- name: aligncheck + url: "https://gitlab.com/opennota/check" + description: Find inefficiently packed structs. + tags: + - go +- name: ameba + url: "https://github.com/veelenga/ameba" + description: A static code analysis tool for Crystal + tags: + - crystal +- name: anchore + url: "https://anchore.io/" + description: "Discover, analyze, and certify container images" + tags: + - container +- name: Android Lint + url: "http://tools.android.com/tips/lint" + description: Run static analysis on Android projects. + tags: + - mobile +- name: Android Studio + url: "https://developer.android.com/studio" + description: "Based on IntelliJ IDEA, and comes bundled with tools for Android including Android Lint." + tags: + - ide +- name: android-lint-summary + url: "https://github.com/passy/android-lint-summary" + description: "Combines lint errors of multiple projects into one output, check lint results of multiple sub-projects at once." + tags: + - mobile +- name: ansible-lint + url: "https://github.com/willthames/ansible-lint" + description: Checks playbooks for practices and behaviour that could potentially be improved + tags: + - configmanagement +- name: AppChecker + url: "https://npo-echelon.ru/en/solutions/appchecker.php" + description: "Static analysis for C/C++/C#, PHP and Java" + tags: + - c + - cpp + - java + - php + proprietary: true +- name: Application Inspector + url: "https://www.ptsecurity.com/ww-en/products/ai/" + description: "Commercial Static Code Analysis which generates exploits to verify vulnerabilities. Supports: Java (including JSP and JSF), C#, VB.Net, ASP.NET, Php, JavaScript, Objective-C, Swift, C\\C++, SQL (PL/SQL. T-SQL. MySQL), HTML5" + tags: + - c + - cpp + - java + - php + proprietary: true +- name: ApplicationInspector + url: "https://github.com/microsoft/ApplicationInspector" + description: "creates reports of over 400 rule patterns for feature detection (e.g. the use of cryptography or version control in apps). Supports C/C++, C#, Java, JavaScript, HTML, Python, Objective-C, Go, Ruby, Powershell" + tags: + - c + - cpp + - java + - php +- name: AppScan Source + url: "https://www.hcltechsw.com/wps/portal/products/appscan/home" + description: "Commercial Static Code Analysis. Supports: Microsoft .NET Framework (C#, ASP.NET, VB.NET), ASP (JavaScript/VBScript), C/C++, COBOL, ColdFusion, JavaScript, JavaServer Pages (JSP), Java™ (including support for Android APIs), Perl, PHP, PL/SQL, T-SQL, Visual Basic 6" + tags: + - c + - cpp + - java + - php + proprietary: true +- name: APPscreener + url: "https://appscreener.us" + description: "Static code analysis for binary and source code - Java/Scala, PHP, Javascript, C#, PL/SQL, Python, T-SQL, C/C++, ObjectiveC/Swift, Visual Basic 6.0, Ruby, Delphi, ABAP, HTML5 and Solidity" + tags: + - c + - cpp + - java + - php + proprietary: true +- name: ArchUnit + url: "https://www.archunit.org/" + description: Unit test your Java or Kotlin architecture + tags: + - c + - cpp + - java + - php +- name: Astrée + url: "https://www.absint.com/astree/index.htm" + description: "Sound static analyzer based on abstract interpretation for C/C++, detecting memory, type and concurrency defects, and MISRA violations." + tags: + - c + - cpp + proprietary: true +- name: Attackflow Extension + url: "https://www.attackflow.com/Extension" + description: "Attackflow plugin for Visual Studio, which enables developers to find critical security bugs at real time in the source code without any prior knowledge." + tags: + - ide + proprietary: true +- name: Axivion Bauhaus Suite + url: "https://www.axivion.com/en/products-services-9#products_bauhaussuite" + description: "Tracks down error-prone code locations, style violations, cloned or dead code, cyclic dependencies and more for C/C++, C#/.NET, Java and Ada 83/Ada 95" + tags: + - c + - cpp + - java + - php + proprietary: true +- name: bandit + url: "https://github.com/PyCQA/bandit" + description: a tool to find common security issues in Python code + tags: + - python +- name: bellybutton + url: "https://github.com/hchasestevens/bellybutton" + description: a linting engine supporting custom project-specific rules + tags: + - python +- name: BinSkim + url: "https://github.com/Microsoft/binskim" + description: A binary static analysis tool that provides security and correctness results for Windows portable executables. + tags: + - binary +- name: Black + url: "https://github.com/ambv/black" + description: The uncompromising Python code formatter + tags: + - python +- name: bodyclose + url: "https://github.com/timakin/bodyclose" + description: Checks whether HTTP response body is closed. + tags: + - go +- name: brakeman + url: "https://github.com/presidentbeef/brakeman" + description: A static analysis security vulnerability scanner for Ruby on Rails applications + tags: + - ruby +- name: cane + url: "https://github.com/square/cane" + description: Code quality threshold checking as part of your build + tags: + - ruby +- name: cargo-audit + url: "https://github.com/RustSec/cargo-audit" + description: "Audit Cargo.lock for crates with security vulnerabilities reported to the [RustSec Advisory Database](https://github.com/RustSec/advisory-db/)." + tags: + - rust +- name: cargo-inspect + url: "https://github.com/mre/cargo-inspect" + description: Inspect Rust code without syntactic sugar to see what the compiler does behind the curtains. + tags: + - rust +- name: CAST Highlight + url: "https://www.castsoftware.com/products/highlight" + description: "Commercial Static Code Analysis which runs locally, but uploads the results to its cloud for presentation. Supports: Java, JavaScript, Python, JSP, COBOL, SAP/Abap, C/C++, C#, PHP, Visual Basic, T-SQL, PL/SQL." + tags: + - c + - cpp + - java + - php + proprietary: true +- name: CBMC + url: "http://www.cprover.org/cbmc/" + description: "bounded model-checker for C programs, user-defined assertions, standard assertions, several coverage metric analyses" + tags: + - c + - cpp +- name: cfn-lint + url: "https://github.com/awslabs/cfn-python-lint" + description: AWS Labs CloudFormation linter. + tags: + - configmanagement +- name: cfn_nag + url: "https://github.com/stelligent/cfn_nag" + description: A linter for AWS CloudFormation templates. + tags: + - configmanagement +- name: Checker Framework + url: "https://github.com/typetools/checker-framework/" + description: "Pluggable type-checking for Java http://checkerframework.org/" + tags: + - java +- name: checkmake + url: "https://github.com/mrtazz/checkmake" + description: Linter / Analyzer for Makefiles + tags: + - buildtool +- name: Checkmarx CxSAST + url: "https://www.checkmarx.com/products/static-application-security-testing/" + description: "Commercial Static Code Analysis which doesn't require pre-compilation. Supports: Android (Java), Apex and VisualForce, ASP, C#, C/C++, Go, Groovy, HTML5, Java, JavaScript, Node.js, Objective C, Perl, PhoneGap, PHP, Python, Ruby, Scala, Swift, VB.NET, VB6, VBScript" + tags: + - c + - cpp + - java + - php + proprietary: true +- name: checkov + url: "https://github.com/bridgecrewio/checkov/" + description: "Static analysis tool for Terraform files (tf>=v0.12), preventing cloud misconfigs at build time." + tags: + - configmanagement +- name: checkstyle + url: "https://github.com/checkstyle/checkstyle" + description: checking Java source code for adherence to a Code Standard or set of validation rules (best practices) + tags: + - java +- name: ChkTeX + url: "http://www.nongnu.org/chktex/" + description: A linter for LaTex which catches some typographic errors LaTeX oversees. + tags: + - latex +- name: ciocheck + url: "https://github.com/ContinuumIO/ciocheck" + description: "linter, formatter and test suite helper. As a linter, it is a wrapper around `pep8`, `pydocstyle`, `flake8`, and `pylint`." + tags: + - pythonwrapper +- name: ck + url: "https://github.com/mauricioaniche/ck" + description: calculates Chidamber and Kemerer object-oriented metrics by processing the source Java files + tags: + - java +- name: ckjm + url: "http://www.spinellis.gr/sw/ckjm/" + description: calculates Chidamber and Kemerer object-oriented metrics by processing the bytecode of compiled Java files + tags: + - java +- name: clair + url: "https://github.com/coreos/clair" + description: Vulnerability Static Analysis for Containers + tags: + - container +- name: clang-tidy + url: "http://clang.llvm.org/extra/clang-tidy/" + description: clang static analyser + tags: + - c + - cpp +- name: ClassGraph + url: "https://github.com/classgraph/classgraph" + description: a classpath and module path scanner for querying or visualizing class metadata or class relatedness. Supports JVM languages. + tags: + - c + - cpp + - java + - php +- name: clippy + url: "https://github.com/Manishearth/rust-clippy" + description: A code linter to catch common mistakes and improve your Rust code + tags: + - rust +- name: Closure Compiler + url: "https://github.com/google/closure-compiler" + description: "A compiler tool to increase efficiency, reduce size, and provide code warnings in JavaScript files." + tags: + - javascript +- name: ClosureLinter + url: "https://github.com/google/closure-linter" + description: "ensures that all of your project's JavaScript code follows the guidelines in the Google JavaScript Style Guide. It can also automatically fix many common errors" + tags: + - javascript + deprecated: true +- name: CMetrics + url: "https://github.com/MetricsGrimoire/CMetrics" + description: Measures size and complexity for C files + tags: + - c + - cpp +- name: coala + url: "https://coala.io/" + description: "Language independent framework for creating code analysis - supports [over 60 languages](https://coala.io/languages) by default" + tags: + - c + - cpp + - java + - php +- name: Cobra + url: "http://spinroot.com/cobra/" + description: "Structural source code analyzer by NASA's Jet Propulsion Laboratory. Supports C, C++, Ada, and Python." + tags: + - c + - cpp + - java + - php + proprietary: true +- name: Codacy + url: "https://www.codacy.com/" + description: "Code Analysis to ship Better Code, Faster." + tags: + - service + proprietary: true +- name: Code Analysis Rule Collection + url: "https://carc.codeplex.com/" + description: "Contains a set of diagnostics, code fixes and refactorings built on the Microsoft .NET Compiler Platform \"Roslyn\"." + tags: + - csharp +- name: Code Climate + url: "https://codeclimate.com/" + description: "The open and extensible static analysis platform, for everyone." + tags: + - service + proprietary: true +- name: Code Inspector + url: "https://www.code-inspector.com" + description: Code quality and technical debt management platform that supports 10+ languages. + tags: + - service + proprietary: true +- name: code-cracker + url: "https://github.com/code-cracker/code-cracker" + description: "An analyzer library for C# and VB that uses Roslyn to produce refactorings, code analysis, and other niceties." + tags: + - csharp +- name: Codeac + url: "https://www.codeac.io?ref=awesome-static-analysis" + description: "Automated code review tool integrates with GitHub, Bitbucket and GitLab (even self-hosted). Available for JavaScript, TypeScript, Python, Ruby, Go, PHP, Java, Docker, and more. (open-source free)" + tags: + - service + proprietary: true +- name: codeburner + url: "https://github.com/groupon/codeburner" + description: Provides a unified interface to sort and act on the issues it finds + tags: + - c + - cpp + - java + - php +- name: codechecker + url: "https://github.com/Ericsson/codechecker" + description: a defect database and viewer extension for the Clang Static Analyzer + tags: + - buildtool +- name: Codecheker + url: "https://github.com/Ericsson/codechecker" + description: "static analysis of C/C++ code, with web GUI" + tags: + - c + - cpp +- name: CodeFactor + url: "https://codefactor.io" + description: "Static Code Analysis for C#, C, C++, CoffeeScript, CSS, Groovy, GO, JAVA, JavaScript, Less, Python, Ruby, Scala, SCSS, TypeScript." + tags: + - c + - cpp + - java + - php + proprietary: true +- name: CodeFactor + url: "https://codefactor.io" + description: Automated Code Analysis for repos on GitHub or BitBucket. + tags: + - service + proprietary: true +- name: CodeFlow + url: "https://www.getcodeflow.com" + description: Automated code analysis tool to deal with technical depth. Integrates with Bitbucket and Gitlab. (free for Open Source Projects) + tags: + - service + proprietary: true +- name: CodeIt.Right + url: "https://submain.com/products/codeit.right.aspx" + description: "CodeIt.Right™ provides a fast, automated way to ensure that your source code adheres to (your) predefined design and style guidelines as well as best coding practices. Supported languages: C#, VB.NET." + tags: + - c + - cpp + - java + - php + proprietary: true +- name: Codelyzer + url: "https://github.com/mgechev/codelyzer" + description: A set of tslint rules for static code analysis of Angular 2 TypeScript projects. + tags: + - typescript +- name: CodeNarc + url: "https://github.com/CodeNarc/CodeNarc" + description: "a static analysis tool for Groovy source code, enabling monitoring and enforcement of many coding standards and best practices" + tags: + - groovy +- name: CodePatrol + url: "https://cyber-security.claranet.fr/en/codepatrol" + description: "Automated SAST code reviews driven by security, supports 15+ languages and includes security training." + tags: + - service + proprietary: true +- name: Codepeer + url: "http://www.adacore.com/codepeer" + description: detects run-time and logic errors + tags: + - ada +- name: CodeRush + url: "https://www.devexpress.com/products/coderush/" + description: "Code creation, debugging, navigation, refactoring, analysis and visualization tools that use the Roslyn engine in Visual Studio 2015 and up." + tags: + - csharp + proprietary: true +- name: CodeScene + url: "https://empear.com/" + description: "CodeScene prioritizes technical debt, finds social patterns and identifies hidden risks in your code." + tags: + - c + - cpp + - java + - php + proprietary: true +- name: CodeSonar from GrammaTech + url: "https://www.grammatech.com/products/codesonar" + description: "Advanced, whole program, deep path, static analysis of C and C++ with easy-to-understand explanations and code and path visualization." + tags: + - c + - cpp + proprietary: true +- name: codespell + url: "https://github.com/codespell-project/codespell" + description: check code for common misspellings + tags: + - writing +- name: coffeelint + url: "https://github.com/clutchski/coffeelint" + description: A style checker that helps keep CoffeeScript code clean and consistent. + tags: + - javascript +- name: CogniCrypt + url: "https://www.eclipse.org/cognicrypt/" + description: checks Java source and byte code for incorrect uses of cryptographic APIs + tags: + - java +- name: cohesion + url: "https://github.com/mschwager/cohesion" + description: a tool for measuring Python class cohesion + tags: + - python +- name: collector + url: "https://github.com/banyanops/collector" + description: "Run arbitrary scripts inside containers, and gather useful information" + tags: + - container +- name: complexity-report + url: "https://github.com/jared-stilwell/complexity-report" + description: Software complexity analysis for JavaScript projects + tags: + - javascript + deprecated: true +- name: cookstyle + url: "https://docs.chef.io/cookstyle.html" + description: Cookstyle is a linting tool based on the RuboCop Ruby linting tool for Chef cookbooks + tags: + - configmanagement +- name: Corrode + url: "https://github.com/jameysharp/corrode" + description: Semi-automatic translation from C to Rust. Could reveal bugs in the original implementation by showing Rust compiler warnings and errors. + tags: + - c + - cpp +- name: Coverity + url: "https://www.synopsys.com/software-integrity/security-testing/static-analysis-sast.html" + description: "Synopsys Coverity supports 20 languages and over 70 frameworks including Ruby on rails, Scala, PHP, Python, JavaScript, TypeScript, Java, Fortran, C, C++, C#, VB.NET." + tags: + - c + - cpp + - java + - php + proprietary: true +- name: cppcheck + url: "https://github.com/danmar/cppcheck" + description: static analysis of C/C++ code + tags: + - c + - cpp +- name: CppDepend + url: "https://www.cppdepend.com" + description: "Measure, query and visualize your code and avoid unexpected issues, technical debt and complexity." + tags: + - c + - cpp + proprietary: true + deprecated: true +- name: cpplint + url: "https://github.com/google/styleguide/tree/gh-pages/cpplint" + description: "automated C++ checker that follows Google's style guide" + tags: + - c + - cpp +- name: cqc + url: "https://github.com/xcatliu/cqc" + description: "Check your code quality for js, jsx, vue, css, less, scss, sass and styl files." + tags: + - c + - cpp + - java + - php +- name: cqmetrics + url: "https://github.com/dspinellis/cqmetrics" + description: quality metrics for C code + tags: + - c + - cpp +- name: credo + url: "https://github.com/rrrene/credo" + description: A static code analysis tool with a focus on code consistency and teaching. + tags: + - elixir +- name: crystal + url: "https://crystal-lang.org/" + description: The Crystal compiler has built-in linting functionality. + tags: + - crystal +- name: CScout + url: "https://www.spinellis.gr/cscout/" + description: complexity and quality metrics for for C and C preprocessor code + tags: + - c + - cpp +- name: CSharpEssentials + url: "https://github.com/DustinCampbell/CSharpEssentials" + description: "C# Essentials is a collection of Roslyn diagnostic analyzers, code fixes and refactorings that make it easy to work with C# 6 language features." + tags: + - csharp +- name: CSS Stats + url: "https://github.com/cssstats/cssstats" + description: Potentially interesting stats on stylesheets + tags: + - css +- name: CSScomb + url: "https://github.com/csscomb/csscomb.js" + description: a coding style formatter for CSS. Supports own configurations to make style sheets beautiful and consistent + tags: + - css +- name: CSSLint + url: "https://github.com/CSSLint/csslint" + description: Does basic syntax checking and finds problematic patterns or signs of inefficiency + tags: + - css +- name: cwe_checker + url: "https://github.com/fkie-cad/cwe_checker" + description: cwe_checker finds vulnerable patterns in binary executables. + tags: + - binary +- name: cyclocomp + url: "https://github.com/MangoTheCat/cyclocomp" + description: Quantifies the cyclomatic complexity of R functions / expressions. + tags: + - r +- name: D-scanner + url: "https://github.com/dlang-community/D-Scanner" + description: D-Scanner is a tool for analyzing D source code + tags: + - dlang +- name: dagda + url: "https://github.com/eliasgranderubio/dagda" + description: Perform static analysis of known vulnerabilities in docker images/containers. + tags: + - container +- name: dawnscanner + url: "https://github.com/thesp0nge/dawnscanner" + description: "a static analysis security scanner for ruby written web applications. It supports Sinatra, Padrino and Ruby on Rails frameworks." + tags: + - ruby +- name: deadcode + url: "https://github.com/tsenart/deadcode" + description: Finds unused code. + tags: + - go +- name: DeepScan + url: "https://deepscan.io" + description: An analyzer for JavaScript which targets runtime errors and quality issues rather than coding conventions. + tags: + - javascript + proprietary: true +- name: DeepSource + url: "https://deepsource.io/" + description: "In-depth static analysis to monitor source code quality and security. Supports Python and Go and can detect 600+ types of issues in verticals of bug risks, security, anti-patterns, performance, documentation and style. Native integration with GitHub." + tags: + - c + - cpp + - java + - php + proprietary: true +- name: dennis + url: "https://github.com/willkg/dennis/" + description: A set of utilities for working with PO files to ease development and improve quality. + tags: + - translation +- name: Depends + url: "https://github.com/multilang-depends/depends" + description: "Analyses the comprehensive dependencies of code elements for Java, C/C++, Ruby." + tags: + - c + - cpp + - java + - php +- name: dephpend + url: "https://github.com/mihaeu/dephpend" + description: Dependency analysis tool + tags: + - php +- name: deprecation-detector + url: "https://github.com/sensiolabs-de/deprecation-detector" + description: Finds usages of deprecated (Symfony) code + tags: + - php +- name: deptrac + url: "https://github.com/sensiolabs-de/deptrac" + description: Enforce rules for dependencies between software layers. + tags: + - php +- name: Designite + url: "http://www.designite-tools.com" + description: "Designite supports detection of various architecture, design, and implementation smells, computation of various code quality metrics, and trend analysis." + tags: + - csharp + proprietary: true +- name: DesigniteJava + url: "http://www.designite-tools.com/designitejava" + description: "DesigniteJava supports detection of various architecture, design, and implementation smells along with computation of various code quality metrics." + tags: + - java + proprietary: true +- name: DesignPatternDetector + url: "https://github.com/Halleck45/DesignPatternDetector" + description: detection of design patterns in PHP code + tags: + - php +- name: detekt + url: "https://github.com/arturbosch/detekt" + description: Static code analysis for Kotlin code. + tags: + - kotlin +- name: DevSkim + url: "https://github.com/Microsoft/DevSkim" + description: "Inline, realtime security analysis. Works with multiple programming languages and IDEs (VS, VS Code, Sublime Text, ...)." + tags: + - ide +- name: DevSkim + url: "https://github.com/microsoft/devskim" + description: "Regex-based static analysis tool for Visual Studio, VS Code, and Sublime Text - C/C++, C#, PHP, ASP, Python, Ruby, Java, and others." + tags: + - c + - cpp + - java + - php +- name: dingo-hunter + url: "https://github.com/nickng/dingo-hunter" + description: Static analyser for finding deadlocks in Go. + tags: + - go +- name: Dlint + url: "https://github.com/dlint-py/dlint" + description: a tool for ensuring Python code is secure + tags: + - python +- name: Docker Label Inspector + url: "https://github.com/garethr/docker-label-inspector" + description: Lint and validate Dockerfile labels + tags: + - container +- name: dogsled + url: "https://github.com/alexkohler/dogsled" + description: Finds assignments/declarations with too many blank identifiers. + tags: + - go +- name: dotenv-linter + url: "https://github.com/wemake-services/dotenv-linter" + description: Linting dotenv files like a charm. + tags: + - configfile +- name: dupl + url: "https://github.com/mibk/dupl" + description: Reports potentially duplicated code. + tags: + - go +- name: EasyCodingStandard + url: "https://github.com/Symplify/EasyCodingStandard" + description: "combine [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) and [PHP-CS-Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer)" + tags: + - php +- name: electrolysis + url: "https://github.com/Kha/electrolysis" + description: A tool for formally verifying Rust programs by transpiling them into definitions in the Lean theorem prover. + tags: + - rust +- name: elm-analyse + url: "https://stil4m.github.io/elm-analyse/" + description: "A tool that allows you to analyse your Elm code, identify deficiencies and apply best practices." + tags: + - elm +- name: elvis + url: "https://github.com/inaka/elvis" + description: Erlang Style Reviewer + tags: + - erlang +- name: ember-template-lint + url: "https://github.com/rwjblue/ember-template-lint" + description: Linter for Ember or Handlebars templates. + tags: + - template +- name: Embold + url: "https://embold.io" + description: "Intelligent software analytics platform that identifies design issues, code issues, duplication and metrics. Supports Java, C, C++, C#, JavaScript, TypeScript, Python, Go, Kotlin and more." + tags: + - service + proprietary: true +- name: errcheck + url: "https://github.com/kisielk/errcheck" + description: Check that error return values are used. + tags: + - go +- name: Error-prone + url: "https://github.com/google/error-prone" + description: Catch common Java mistakes as compile-time errors + tags: + - java +- name: escomplex + url: "https://github.com/jared-stilwell/escomplex" + description: Software complexity analysis of JavaScript-family abstract syntax trees. + tags: + - javascript +- name: eslint + url: "https://github.com/eslint/eslint" + description: A fully pluggable tool for identifying and reporting on patterns in JavaScript + tags: + - javascript +- name: ESLint + url: "https://github.com/typescript-eslint/typescript-eslint" + description: An extensible linter for the TypeScript language. + tags: + - typescript +- name: Esprima + url: "https://github.com/jquery/esprima" + description: ECMAScript parsing infrastructure for multipurpose analysis + tags: + - javascript +- name: exakat + url: "https://github.com/exakat/exakat" + description: An automated code reviewing engine for PHP + tags: + - php +- name: fb-contrib + url: "https://github.com/mebigfatguy/fb-contrib" + description: A plugin for FindBugs with additional bug detectors + tags: + - java +- name: Find Security Bugs + url: "https://find-sec-bugs.github.io/" + description: IDE/SonarQube plugin for security audits of Java web applications. + tags: + - java +- name: Fix Insight + url: "https://www.tmssoftware.com/site/fixinsight.asp" + description: A free IDE Plugin for static code analysis. A _Pro_ edition includes a command line tool for automation purposes. + tags: + - delphi + proprietary: true +- name: flake8 + url: "https://github.com/PyCQA/flake8" + description: "a wrapper around `pyflakes`, `pycodestyle` and `mccabe`" + tags: + - pythonwrapper +- name: flawfinder + url: "http://www.dwheeler.com/flawfinder/" + description: finds possible security weaknesses + tags: + - c + - cpp +- name: flay + url: "https://github.com/seattlerb/flay" + description: Flay analyzes code for structural similarities. + tags: + - ruby +- name: flen + url: "https://github.com/lafolle/flen" + description: Get info on length of functions in a Go package. + tags: + - go +- name: flint++ + url: "https://github.com/JossWhittle/FlintPlusPlus" + description: "cross-platform, zero-dependency port of flint, a lint program for C++ developed and used at Facebook." + tags: + - c + - cpp +- name: flog + url: "https://github.com/seattlerb/flog" + description: "Flog reports the most tortured code in an easy to read pain report. The higher the score, the more pain the code is in." + tags: + - ruby +- name: flow + url: "https://flow.org/" + description: A static type checker for JavaScript. + tags: + - javascript +- name: FlowDroid + url: "https://github.com/secure-software-engineering/soot-infoflow-android" + description: static taint analysis tool for Android applications + tags: + - mobile +- name: foodcritic + url: "http://www.foodcritic.io/" + description: A lint tool that checks Chef cookbooks for common problems. + tags: + - configmanagement +- name: forbidden-apis + url: "https://github.com/policeman-tools/forbidden-apis" + description: Detects and forbids invocations of specific method/class/field (like reading from a text stream without a charset). Maven/Gradle/Ant compatible. + tags: + - java +- name: Fortify + url: "https://software.microfocus.com/en-us/products/static-code-analysis-sast/overview" + description: "A commercial static analysis platform that supports the scanning of C/C++, C#, VB.NET, VB6, ABAP/BSP, ActionScript, Apex, ASP.NET, Classic ASP, VB Script, Cobol, ColdFusion, HTML, Java, JS, JSP, MXML/Flex, Objective-C, PHP, PL/SQL, T-SQL, Python (2.6, 2.7), Ruby (1.9.3), Swift, Scala, VB, and XML." + tags: + - c + - cpp + - java + - php + proprietary: true +- name: Frama-C + url: "http://frama-c.com/" + description: a sound and extensible static analyzer for C code + tags: + - c + - cpp +- name: Frink + url: "https://catless.ncl.ac.uk/Programs/Frink/" + description: "A Tcl formatting and static check program (can prettify the program, minimise, obfuscate or just sanity check it)." + tags: + - tcl +- name: FSharpLint + url: "https://github.com/fsprojects/FSharpLint" + description: "Lint tool for F#" + tags: + - fsharp +- name: gas + url: "https://github.com/GoASTScanner/gas" + description: Inspects source code for security problems by scanning the Go AST. + tags: + - go +- name: gawk --lint + url: "https://www.gnu.org/software/gawk/manual/html_node/Options.html" + description: warns about constructs that are dubious or nonportable to other awk implementations. + tags: + - awk +- name: Gendarme + url: "http://www.mono-project.com/docs/tools+libraries/tools/gendarme/" + description: Gendarme inspects programs and libraries that contain code in ECMA CIL format (Mono and .NET). + tags: + - csharp +- name: gherkin-lint + url: "https://github.com/vsiakka/gherkin-lint" + description: A linter for the Gherkin-Syntax written in Javascript. + tags: + - gherkin +- name: gixy + url: "https://github.com/yandex/gixy" + description: a tool to analyze Nginx configuration. The main goal is to prevent misconfiguration and automate flaw detection. + tags: + - configfile +- name: Go Meta Linter + url: "https://github.com/alecthomas/gometalinter" + description: "Concurrently run Go lint tools and normalise their output. Use `golangci-lint` for new projects." + tags: + - go + deprecated: true +- name: go tool vet --shadow + url: "https://golang.org/cmd/vet/#hdr-Shadowed_variables" + description: Reports variables that may have been unintentionally shadowed. + tags: + - go +- name: go vet + url: "https://golang.org/cmd/vet/" + description: Examines Go source code and reports suspicious. + tags: + - go +- name: go-consistent + url: "https://github.com/Quasilyte/go-consistent" + description: Analyzer that helps you to make your Go programs more consistent. + tags: + - go +- name: go-critic + url: "https://github.com/go-critic/go-critic" + description: Go source code linter that maintains checks which are currently not implemented in other linters. + tags: + - go +- name: go/ast + url: "https://golang.org/pkg/go/ast/" + description: Package ast declares the types used to represent syntax trees for Go packages. + tags: + - go +- name: gochecknoglobals + url: "https://github.com/leighmcculloch/gochecknoglobals" + description: Checks that no globals are present. + tags: + - go +- name: goconst + url: "https://github.com/jgautheron/goconst" + description: Finds repeated strings that could be replaced by a constant. + tags: + - go +- name: gocyclo + url: "https://github.com/fzipp/gocyclo" + description: Calculate cyclomatic complexities of functions in Go source code. + tags: + - go +- name: gofmt -s + url: "https://golang.org/cmd/gofmt/" + description: Checks if the code is properly formatted and could not be further simplified. + tags: + - go +- name: goimports + url: "https://godoc.org/golang.org/x/tools/cmd/goimports" + description: Checks missing or unreferenced package imports. + tags: + - go +- name: GolangCI-Lint + url: "https://github.com/golangci/golangci-lint" + description: "Alternative to `Go Meta Linter`: GolangCI-Lint is a linters aggregator." + tags: + - go +- name: golint + url: "https://github.com/golang/lint" + description: Prints out coding style mistakes in Go source code. + tags: + - go +- name: Goodcheck + url: "https://github.com/sideci/goodcheck" + description: Regexp based customizable linter + tags: + - c + - cpp + - java + - php +- name: goodpractice + url: "http://mangothecat.github.io/goodpractice/" + description: Analyses the source code for R packages and provides best-practice recommendations. + tags: + - r +- name: google-java-format + url: "https://github.com/google/google-java-format" + description: Google Style Reformat + tags: + - java +- name: goreporter + url: "https://github.com/360EntSecGroup-Skylar/goreporter" + description: concurrently runs many linters and normalises their output to a report. + tags: + - go +- name: goroutine-inspect + url: "https://github.com/linuxerwang/goroutine-inspect" + description: An interactive tool to analyze Golang goroutine dump. + tags: + - go +- name: gosec (gas) + url: "https://github.com/GoASTScanner/gas" + description: Inspects source code for security problems by scanning the Go AST. + tags: + - go +- name: gosimple + url: "https://godoc.org/github.com/surullabs/lint/gosimple" + description: Simplifies code. + tags: + - go +- name: gotype + url: "https://golang.org/x/tools/cmd/gotype" + description: Syntactic and semantic analysis similar to the Go compiler. + tags: + - go +- name: GraphMyCSS.com + url: "https://graphmycss.com" + description: CSS Specificity Graph Generator + tags: + - css +- name: graudit + url: "https://github.com/wireghoul/graudit" + description: "Grep rough audit - source code auditing tool - C/C++, PHP, ASP, C#, Java, Perl, Python, Ruby" + tags: + - c + - cpp + - java + - php +- name: GrumPHP + url: "https://github.com/phpro/grumphp" + description: checks code on every commit + tags: + - php +- name: haml-lint + url: "https://github.com/brigade/haml-lint" + description: Tool for writing clean and consistent HAML + tags: + - template +- name: Haskell Dockerfile Linter + url: "https://github.com/lukasmartinelli/hadolint" + description: A smarter Dockerfile linter that helpsyou build best practice Docker images + tags: + - container +- name: Haxe Checkstyle + url: "https://github.com/HaxeCheckstyle/haxe-checkstyle" + description: A static analysis tool to help developers write Haxe code that adheres to a coding standard. + tags: + - haxe +- name: Helix QAC + url: "https://www.perforce.com/products/helix-qac" + description: "Enterprise-grade static analysis for embedded software. Supports MISRA, CERT, and AUTOSAR coding standards." + tags: + - c + - cpp + proprietary: true +- name: herbie + url: "https://github.com/mcarton/rust-herbie-lint" + description: Adds warnings or errors to your crate when using a numerically unstable floating point expression. + tags: + - rust +- name: HLint + url: "https://github.com/ndmitchell/hlint" + description: HLint is a tool for suggesting possible improvements to Haskell code. + tags: + - haskell +- name: Hopper + url: "https://github.com/cuplv/hopper" + description: A static analysis tool written in scala for languages that run on JVM + tags: + - java +- name: Hound CI + url: "https://houndci.com/" + description: "Comments on style violations in GitHub pull requests. Supports Coffeescript, Go, HAML, JavaScript, Ruby, SCSS and Swift." + tags: + - c + - cpp + - java + - php +- name: HTML Inspector + url: "https://github.com/philipwalton/html-inspector" + description: HTML Inspector is a code quality tool to help you and your team write better markup. + tags: + - html +- name: HTML Tidy + url: "http://www.html-tidy.org/" + description: Corrects and cleans up HTML and XML documents by fixing markup errors and upgrading legacy code to modern standards. + tags: + - html +- name: HTMLHint + url: "https://github.com/yaniswang/HTMLHint" + description: A Static Code Analysis Tool for HTML + tags: + - html +- name: HuntBugs + url: "https://github.com/amaembo/huntbugs" + description: Bytecode static analyzer tool based on Procyon Compiler Tools aimed to supersede FindBugs. + tags: + - java + deprecated: true +- name: i-Code CNES for Fortran + url: "https://github.com/lequal/i-CodeCNES" + description: "An open source static code analysis tool for Fortran 77, Fortran 90 and Shell." + tags: + - fortran +- name: i-Code CNES for Shell + url: "https://github.com/lequal/i-CodeCNES" + description: An open source static code analysis tool for Shell and Fortran (77 and 90). + tags: + - shell +- name: IKOS + url: "https://github.com/nasa-sw-vnv/ikos" + description: a sound static analyzer for C/C++ code based on LLVM + tags: + - c + - cpp +- name: imhotep + url: "https://github.com/justinabrahms/imhotep" + description: Comment on commits coming into your repository and check for syntactic errors and general lint warnings. + tags: + - c + - cpp + - java + - php +- name: include-gardener + url: "https://github.com/feddischson/include_gardener" + description: "a multi-language static analyzer for C/C++/Obj-C/Python/Ruby to create a graph (in dot or graphml format) which shows all `#include` relations of a given set of files." + tags: + - c + - cpp +- name: include-gardener + url: "https://github.com/feddischson/include_gardener" + description: "a multi-language static analyzer for C/C++/Obj-C/Python/Ruby to create a graph (in dot or graphml format) which shows all `#include` relations of a given set of files." + tags: + - python +- name: include-gardener + url: "https://github.com/feddischson/include_gardener" + description: "a multi-language static analyzer for C/C++/Obj-C/Python/Ruby to create a graph (in dot or graphml format) which shows all `#include` relations of a given set of files." + tags: + - ruby +- name: ineffassign + url: "https://github.com/gordonklaus/ineffassign" + description: Detect ineffectual assignments in Go code + tags: + - go +- name: Infer + url: "https://github.com/facebook/infer" + description: "A static analyzer for Java, C and Objective-C" + tags: + - c + - cpp + - java + - php +- name: IntelliJ IDEA + url: "https://www.jetbrains.com/idea/" + description: "Comes bundled with a lot of inspections for Java and Kotlin and includes tools for refactoring, formatting and more." + tags: + - ide +- name: interfacer + url: "https://github.com/mvdan/interfacer" + description: Suggest narrower interfaces that can be used. + tags: + - go +- name: Jakstab + url: "https://github.com/jkinder/jakstab" + description: "Jakstab is an Abstract Interpretation-based, integrated disassembly and static analysis framework for designing analyses on executables and recovering reliable control flow graphs." + tags: + - binary +- name: JArchitect + url: "https://www.jarchitect.com" + description: "Measure, query and visualize your code and avoid unexpected issues, technical debt and complexity." + tags: + - java + proprietary: true +- name: JBMC + url: "http://www.cprover.org/jbmc/" + description: "bounded model-checker for Java (bytecode), verifies user-defined assertions, standard assertions, several coverage metric analyses" + tags: + - java +- name: jedi + url: "https://github.com/davidhalter/jedi" + description: autocompletion/static analysis library for Python + tags: + - python +- name: jshint + url: "https://github.com/jshint/jshint" + description: "detect errors and potential problems in JavaScript code and enforce your team's coding conventions" + tags: + - javascript + deprecated: true +- name: JSLint + url: "https://github.com/douglascrockford/JSLint" + description: The JavaScript Code Quality Tool + tags: + - javascript + deprecated: true +- name: JSPrime + url: "https://github.com/dpnishant/jsprime" + description: static security analysis tool + tags: + - javascript +- name: Kiuwan + url: "https://www.kiuwan.com/code-security-sast/" + description: "Identify and remediate cyber threats in a blazingly fast, collaborative environment, with seamless integration in your SDLC. Python, C\\C++, Java, C#, PHP and more" + tags: + - c + - cpp + - java + - php + proprietary: true +- name: kiuwan + url: "https://www.kiuwan.com/" + description: Software Analytics in the Cloud supporting more than 22 programming languages. + tags: + - service + proprietary: true +- name: Klocwork + url: "http://www.klocwork.com/products-services/klocwork" + description: "Quality and Security Static analysis for C/C++, Java and C#" + tags: + - c + - cpp + - java + - php + proprietary: true +- name: ktlint + url: "https://github.com/shyiko/ktlint" + description: An anti-bikeshedding Kotlin linter with built-in formatter + tags: + - kotlin +- name: kube-score + url: "https://github.com/zegl/kube-score" + description: Static code analysis of your Kubernetes object definitions. + tags: + - container +- name: lacheck + url: "https://www.ctan.org/pkg/lacheck" + description: A tool for finding common mistakes in LaTeX documents. + tags: + - latex +- name: Landscape + url: "https://landscape.io/" + description: Static code analysis for Python + tags: + - service + proprietary: true +- name: languagetool + url: "https://github.com/languagetool-org/languagetool" + description: Style and grammar checker for 25+ languages. It finds many errors that a simple spell checker cannot detect. + tags: + - writing +- name: laser + url: "https://github.com/michaeledgar/laser" + description: Static analysis and style linter for Ruby code. + tags: + - ruby +- name: Layered Insight + url: "https://layeredinsight.com/" + description: Container native application protection to provide visibility and control of containerized applications. + tags: + - service + proprietary: true +- name: LDRA + url: "https://ldra.com/" + description: "a tool suite including static analysis (TBVISION) to various standards including MISRA C & C++, JSF++ AV, CWE, CERT C, CERT C++ & Custom Rules." + tags: + - c + - cpp + proprietary: true +- name: LGTM.com + url: "https://lgtm.com/" + description: Deep code analysis for GitHub and Bitbucket to find security vulnerabilities and critical code quality issues (using Semmle QL). Automatic code review for pull requests; free for public repositories. + tags: + - service + proprietary: true +- name: LibVCS4j + url: "https://github.com/uni-bremen-agst/libvcs4j" + description: A Java library that allows existing tools to analyse the evolution of software systems by providing a common API for different version control systems and issue trackers. + tags: + - support +- name: linter + url: "https://github.com/HairyFotr/linter" + description: "Linter is a Scala static analysis compiler plugin which adds compile-time checks for various possible bugs, inefficiencies, and style problems." + tags: + - scala +- name: linter-rust + url: "https://github.com/AtomLinter/linter-rust" + description: "Linting your Rust-files in Atom, using rustc and cargo" + tags: + - rust +- name: lintian + url: "https://github.com/Debian/lintian" + description: Static analysis tool for Debian packages + tags: + - package +- name: lintr + url: "https://github.com/jimhester/lintr" + description: Static Code Analysis for R. + tags: + - r +- name: linty fresh + url: "https://github.com/lyft/linty_fresh" + description: parse lint errors and report them to Github as comments on a pull request + tags: + - python +- name: lll + url: "https://github.com/walle/lll" + description: Report long lines. + tags: + - go +- name: luacheck + url: "https://github.com/mpeterv/luacheck" + description: A tool for linting and static analysis of Lua code. + tags: + - lua +- name: maligned + url: "https://github.com/mdempsky/maligned" + description: Detect structs that would take less memory if their fields were sorted. + tags: + - go +- name: Manalyze + url: "https://github.com/JusticeRage/Manalyze" + description: "A static analyzer, which checks portable executables for malicious content." + tags: + - binary +- name: markdownlint + url: "https://github.com/DavidAnson/markdownlint" + description: Node.js -based style checker and lint tool for Markdown/CommonMark files. + tags: + - markdown +- name: mccabe + url: "https://github.com/PyCQA/mccabe" + description: check McCabe complexity + tags: + - python +- name: mdl + url: "https://github.com/mivok/markdownlint" + description: A tool to check Markdown files and flag style issues. + tags: + - markdown +- name: MIRAI + url: "https://github.com/facebookexperimental/MIRAI" + description: "And abstract interpreter operating on Rust's mid-level intermediate language, and providing warnings based on taint analysis." + tags: + - rust +- name: misspell + url: "https://github.com/client9/misspell" + description: Finds commonly misspelled English words. + tags: + - go +- name: misspell-fixer + url: "https://github.com/vlajos/misspell-fixer" + description: "Quick tool for fixing common misspellings, typos in source code" + tags: + - writing +- name: Misspelled Words In Context + url: "https://github.com/jwilk/mwic" + description: a spell-checker that groups possible misspellings and shows them in their contexts + tags: + - writing +- name: mlint + url: "https://de.mathworks.com/help/matlab/ref/mlint.html" + description: Check MATLAB code files for possible problems. + tags: + - matlab + proprietary: true +- name: Mondrian + url: "https://github.com/Trismegiste/Mondrian" + description: a set of static analysis and refactoring tools which use graph theory + tags: + - php +- name: multilint + url: "https://github.com/adamchainz/multilint" + description: "a wrapper around `flake8`, `isort` and `modernize`" + tags: + - pythonwrapper +- name: mypy + url: "https://github.com/python/mypy" + description: "a static type checker that aims to combine the benefits of duck typing and static typing, frequently used with [MonkeyType](https://github.com/Instagram/MonkeyType)" + tags: + - python +- name: Nagelfar + url: "https://sourceforge.net/projects/nagelfar/" + description: A static syntax checker for Tcl + tags: + - tcl +- name: nakedret + url: "https://github.com/alexkohler/nakedret" + description: Finds naked returns. + tags: + - go +- name: nargs + url: "https://github.com/alexkohler/nargs" + description: Finds unused arguments in function declarations. + tags: + - go +- name: NDepend + url: "http://www.ndepend.com/" + description: "Measure, query and visualize your code and avoid unexpected issues, technical debt and complexity." + tags: + - csharp + proprietary: true +- name: Nitpick CI + url: "https://nitpick-ci.com" + description: Automated PHP code review + tags: + - service + proprietary: true +- name: NodeJSScan + url: "https://github.com/ajinabraham/NodeJsScan" + description: NodeJsScan is a static security code scanner for Node.js applications. + tags: + - javascript +- name: NullAway + url: "https://github.com/uber/NullAway" + description: "Type-based null-pointer checker with low build-time overhead; an [Error Prone](http://errorprone.info/) plugin" + tags: + - java +- name: oclint + url: "http://oclint.org/" + description: static analysis of C/C++ code + tags: + - c + - cpp +- name: oclint + url: "https://github.com/oclint/oclint" + description: "A static source code analysis tool to improve quality and reduce defects for C, C++ and Objective-C" + tags: + - c + - cpp + - java + - php +- name: OWASP Dependency Check + url: "https://www.owasp.org/index.php/OWASP_Dependency_Check" + description: "Checks dependencies for known, publicly disclosed, vulnerabilities." + tags: + - java +- name: paprika + url: "https://github.com/GeoffreyHecht/paprika" + description: A toolkit to detect some code smells in analyzed Android applications. + tags: + - mobile +- name: parallel-lint + url: "https://github.com/php-parallel-lint/PHP-Parallel-Lint" + description: This tool checks syntax of PHP files faster than serial check with a fancier output. + tags: + - php +- name: Parker + url: "https://github.com/katiefenn/parker" + description: Stylesheet analysis tool + tags: + - css +- name: Parse + url: "https://github.com/psecio/parse" + description: A Static Security Scanner + tags: + - php +- name: Pascal Analyzer + url: "https://peganza.com/products_pal.html" + description: A static code analysis tool with numerous reports. A free _Lite_ version is available with limited reporting. + tags: + - delphi + proprietary: true +- name: Pascal Expert + url: "https://peganza.com/products_pex.html" + description: IDE plugin for code analysis. Includes a subset of Pascal Analyzer reporting capabilities and is available for Delphi versions 2007 and later. + tags: + - delphi + proprietary: true +- name: pdepend + url: "https://pdepend.org/" + description: Calculates software metrics like cyclomatic complexity for PHP code. + tags: + - php +- name: pelusa + url: "https://github.com/codegram/pelusa" + description: Static analysis Lint-type tool to improve your OO Ruby code + tags: + - ruby +- name: "Perl::Critic" + url: "https://metacpan.org/pod/Perl::Critic" + description: Critique Perl source code for best-practices. + tags: + - perl +- name: pfff + url: "https://github.com/facebook/pfff" + description: "Facebook's tools for code analysis, visualizations, or style-preserving source transformation for many languages" + tags: + - c + - cpp + - java + - php +- name: phan + url: "https://github.com/etsy/phan" + description: a modern static analyzer from etsy + tags: + - php +- name: Phasar + url: "https://github.com/secure-software-engineering/phasar" + description: A LLVM-based static analysis framework which comes with a taint and type state analysis. + tags: + - c + - cpp +- name: PHP Architecture Tester + url: "https://github.com/carlosas/phpat" + description: Easy to use architecture testing tool for PHP. + tags: + - php +- name: PHP Assumptions + url: "https://github.com/rskuipers/php-assumptions" + description: Checks for weak assumptions + tags: + - php +- name: PHP Coding Standards Fixer + url: "http://cs.sensiolabs.org/" + description: "Fixes your code according to standards like PSR-1, PSR-2, and the Symfony standard." + tags: + - php +- name: Php Inspections (EA Extended) + url: "https://github.com/kalessil/phpinspectionsea" + description: A Static Code Analyzer for PHP. + tags: + - php +- name: PHP Refactoring Browser + url: "https://github.com/QafooLabs/php-refactoring-browser" + description: Refactoring helper + tags: + - php +- name: PHP Semantic Versioning Checker + url: "https://github.com/tomzx/php-semver-checker" + description: Suggests a next version according to semantic versioning + tags: + - php +- name: PHP-Parser + url: "https://github.com/nikic/PHP-Parser" + description: A PHP parser written in PHP + tags: + - php +- name: PHP-Token-Reflection + url: "https://github.com/Andrewsville/PHP-Token-Reflection" + description: Library emulating the PHP internal reflection + tags: + - php +- name: php7cc + url: "https://github.com/sstalle/php7cc" + description: PHP 7 Compatibility Checker + tags: + - php +- name: php7mar + url: "https://github.com/Alexia/php7mar" + description: assist developers in porting their code quickly to PHP 7 + tags: + - php +- name: PHP_CodeSniffer + url: "https://github.com/squizlabs/PHP_CodeSniffer" + description: detects violations of a defined set of coding standards + tags: + - php +- name: phpca + url: "https://github.com/wapmorgan/PhpCodeAnalyzer" + description: Finds usage of non-built-in extensions + tags: + - php +- name: phpcf + url: "http://wapmorgan.github.io/PhpCodeFixer/" + description: Finds usage of deprecated PHP features + tags: + - php +- name: phpcpd + url: "https://github.com/sebastianbergmann/phpcpd" + description: Copy/Paste Detector for PHP code. + tags: + - php +- name: phpdcd + url: "https://github.com/sebastianbergmann/phpdcd" + description: Dead Code Detector (DCD) for PHP code. + tags: + - php +- name: PhpDependencyAnalysis + url: "https://github.com/mamuz/PhpDependencyAnalysis" + description: builds a dependency graph for a project + tags: + - php +- name: phpdoc-to-typehint + url: "https://github.com/dunglas/phpdoc-to-typehint" + description: Add scalar type hints and return types to existing PHP projects using PHPDoc annotations + tags: + - php +- name: phpDocumentor + url: "https://www.phpdoc.org/" + description: Analyzes PHP source code to generate documentation + tags: + - php +- name: PHPMD + url: "https://phpmd.org/" + description: finds possible bugs in your code + tags: + - php +- name: PhpMetrics + url: "http://www.phpmetrics.org/" + description: Calculates and visualizes various code quality metrics + tags: + - php +- name: phpmnd + url: "https://github.com/povils/phpmnd" + description: Helps to detect magic numbers + tags: + - php +- name: PHPQA + url: "https://github.com/EdgedesignCZ/phpqa" + description: "A tool for running QA tools (phploc, phpcpd, phpcs, pdepend, phpmd, phpmetrics)" + tags: + - php +- name: phpqa - jakzal + url: "https://github.com/jakzal/phpqa" + description: Many tools for PHP static analysis in one container + tags: + - php +- name: phpqa - jmolivas + url: "https://github.com/jmolivas/phpqa" + description: PHPQA all-in-one Analyzer CLI tool + tags: + - php +- name: phpsa + url: "https://github.com/ovr/phpsa" + description: Static analysis tool for PHP. + tags: + - php +- name: PHPStan + url: "https://github.com/phpstan/phpstan" + description: PHP Static Analysis Tool - discover bugs in your code without running it! + tags: + - php +- name: plato + url: "https://github.com/es-analysis/plato" + description: Visualize JavaScript source complexity + tags: + - javascript +- name: PMD + url: "https://pmd.github.io/" + description: "A source code analyzer for Java, Javascript, PLSQL, XML, XSL and others" + tags: + - c + - cpp + - java + - php +- name: Polymer-analyzer + url: "https://github.com/Polymer/polymer-analyzer" + description: A static analysis framework for Web Components. + tags: + - html +- name: Polyspace Bug Finder + url: "https://www.mathworks.com/products/polyspace-bug-finder.html" + description: "identifies run-time errors, concurrency issues, security vulnerabilities, and other defects in C and C++ embedded software." + tags: + - c + - cpp + proprietary: true +- name: Polyspace Code Prover + url: "https://www.mathworks.com/products/polyspace-code-prover.html" + description: "provide code verification that proves the absence of overflow, divide-by-zero, out-of-bounds array access, and certain other run-time errors in C and C++ source code." + tags: + - c + - cpp + proprietary: true +- name: Polyspace for Ada + url: "https://www.mathworks.com/products/polyspace-ada.html" + description: "provide code verification that proves the absence of overflow, divide-by-zero, out-of-bounds array access, and certain other run-time errors in source code." + tags: + - ada + proprietary: true +- name: portlint + url: "https://www.freebsd.org/cgi/man.cgi?query=portlint&sektion=1&manpath=FreeBSD+8.1-RELEASE+and+Ports" + description: A verifier for FreeBSD and DragonFlyBSD port directories. + tags: + - make +- name: pre-commit + url: "https://github.com/pre-commit/pre-commit" + description: A framework for managing and maintaining multi-language pre-commit hooks. + tags: + - c + - cpp + - java + - php +- name: prealloc + url: "https://github.com/alexkohler/prealloc" + description: Finds slice declarations that could potentially be preallocated. + tags: + - go +- name: Prettier + url: "https://github.com/prettier/prettier" + description: An opinionated code formatter. + tags: + - javascript +- name: Primitive Erlang Security Tool (PEST) + url: "https://github.com/okeuday/pest" + description: A tool to do a basic scan of Erlang source code and report any function calls that may cause Erlang source code to be insecure. + tags: + - erlang +- name: Progpilot + url: "https://github.com/designsecurity/progpilot" + description: A static analysis tool for security purposes + tags: + - php +- name: Project Wallace CSS Analyzer + url: "https://github.com/projectwallace/css-analyzer" + description: "Analytics for CSS, part of [Project Wallace](https://www.projectwallace.com)" + tags: + - css +- name: Pronto + url: "https://github.com/prontolabs/pronto" + description: "Quick automated code review of your changes. Supports more than 40 runners for various languages, including Clang, Elixir, JavaSCript, PHP, Ruby and more" + tags: + - c + - cpp + - java + - php +- name: proselint + url: "https://github.com/amperser/proselint/" + description: a linter for English prose with a focus on writing style instead of grammar. + tags: + - writing +- name: prospector + url: "https://github.com/PyCQA/prospector" + description: "a wrapper around `pylint`, `pep8`, `mccabe` and others" + tags: + - pythonwrapper +- name: protolint + url: "https://github.com/yoheimuta/protolint" + description: Pluggable linter and fixer to enforce Protocol Buffer style and conventions. + tags: + - protobuf +- name: Psalm + url: "https://getpsalm.org/" + description: Static analysis tool for finding type errors in PHP applications + tags: + - php +- name: PT.PM + url: "https://github.com/PositiveTechnologies/PT.PM" + description: "An engine for searching patterns in the source code, based on Unified AST or UST. At present time C#, Java, PHP, PL/SQL, T-SQL, and JavaScript are supported. Patterns can be described within the code or using a DSL." + tags: + - c + - cpp + - java + - php +- name: PullRequest + url: "https://www.pullrequest.com" + description: Code review as a service with built-in static analysis + tags: + - service + proprietary: true +- name: Puma Scan + url: "https://github.com/pumasecurity/puma-scan" + description: "Puma Scan provides real time secure code analysis for common vulnerabilities (XSS, SQLi, CSRF, LDAPi, crypto, deserialization, etc.) as development teams write code in Visual Studio." + tags: + - csharp +- name: Puma Scan + url: "https://github.com/pumasecurity/puma-scan" + description: "Puma Scan provides real time secure code analysis for common vulnerabilities (XSS, SQLi, CSRF, LDAPi, crypto, deserialization, etc.) as development teams write code in Visual Studio." + tags: + - ide +- name: Puppet Lint + url: "https://github.com/rodjek/puppet-lint" + description: Check that your Puppet manifests conform to the style guide. + tags: + - configmanagement +- name: PVS-Studio + url: "https://www.viva64.com/en/pvs-studio/" + description: "a ([conditionally free](https://www.viva64.com/en/b/0614/) for FOSS and individual developers) static analysis of C, C++, C# and Java code. For advertising purposes [you can propose a large FOSS project for analysis by PVS employees](https://github.com/viva64/pvs-studio-check-list). Supports CWE mapping, MISRA and CERT coding standards." + tags: + - c + - cpp + - java + - php + proprietary: true +- name: py-find-injection + url: "https://github.com/uber/py-find-injection" + description: find SQL injection vulnerabilities in Python code + tags: + - python +- name: pycodestyle + url: "https://github.com/PyCQA/pycodestyle" + description: "(formerly `pep8`) check Python code against some of the style conventions in PEP 8" + tags: + - python +- name: pydocstyle + url: "https://github.com/PyCQA/pydocstyle" + description: check compliance with Python docstring conventions + tags: + - python +- name: pyflakes + url: "https://github.com/pyflakes/pyflakes/" + description: check Python source files for errors + tags: + - python +- name: pylint + url: "https://github.com/PyCQA/pylint" + description: "looks for programming errors, helps enforcing a coding standard and sniffs for some code smells. It additionally includes `pyreverse` (an UML diagram generator) and `symilar` (a similarities checker)." + tags: + - python +- name: pyre-check + url: "https://github.com/facebook/pyre-check" + description: "A fast, scalable type checker for large Python codebases" + tags: + - python +- name: pyright + url: "https://github.com/Microsoft/pyright" + description: "Static type checker for Python, created to address gaps in existing tools like mypy." + tags: + - python +- name: pyroma + url: "https://github.com/regebro/pyroma" + description: "rate how well a Python project complies with the best practices of the Python packaging ecosystem, and list issues that could be improved" + tags: + - python +- name: PyT - Python Taint + url: "https://github.com/python-security/pyt" + description: A static analysis tool for detecting security vulnerabilities in Python web applications. + tags: + - python +- name: pytype + url: "https://github.com/google/pytype" + description: A static type analyzer for Python code. + tags: + - python +- name: Qafoo Quality Analyzer + url: "https://github.com/Qafoo/QualityAnalyzer" + description: Visualizes metrics and source code + tags: + - php +- name: qark + url: "https://github.com/linkedin/qark" + description: Tool to look for several security related Android application vulnerabilities + tags: + - mobile +- name: quality + url: "https://github.com/jden/quality" + description: zero configuration code and module linting + tags: + - javascript +- name: quality + url: "https://github.com/apiology/quality" + description: "Runs quality checks on your code using community tools, and makes sure your numbers don't get any worse over time." + tags: + - ruby +- name: QuantifiedCode + url: "https://www.quantifiedcode.com/" + description: Automated code review & repair + tags: + - service +- name: Querly + url: "https://github.com/soutaro/querly" + description: Pattern Based Checking Tool for Ruby + tags: + - ruby +- name: qulice + url: "https://www.qulice.com/" + description: "combines a few (pre-configured) static analysis tools (checkstyle, PMD, Findbugs, ...)." + tags: + - java +- name: radon + url: "https://github.com/rubik/radon" + description: a Python tool that computes various metrics from the source code + tags: + - python +- name: Railroader + url: "https://railroader.org/" + description: An open source static analysis security vulnerability scanner for Ruby on Rails applications. + tags: + - ruby +- name: reek + url: "https://github.com/troessner/reek" + description: Code smell detector for Ruby + tags: + - ruby +- name: Refactoring Essentials + url: "http://vsrefactoringessentials.com/" + description: "The free Visual Studio 2015 extension for C# and VB.NET refactorings, including code best practice analyzers." + tags: + - csharp +- name: remark-lint + url: "https://github.com/remarkjs/remark-lint" + description: Pluggable Markdown code style linter written in JavaScript. + tags: + - markdown +- name: ReSharper + url: "https://www.jetbrains.com/resharper/" + description: "Extends Visual Studio with on-the-fly code inspections for C#, VB.NET, ASP.NET, JavaScript, TypeScript and other technologies." + tags: + - csharp + proprietary: true +- name: Reshift + url: "https://softwaresecured.com/reshift/" + description: A source code analysis tool for detecting and managing Java security vulnerabilities. + tags: + - service + proprietary: true +- name: retire.js + url: "https://github.com/RetireJS/retire.js" + description: Scanner detecting the use of JavaScript libraries with known vulnerabilities + tags: + - javascript +- name: Reviewdog + url: "https://github.com/haya14busa/reviewdog" + description: A tool for posting review comments from any linter in any code hosting service. + tags: + - c + - cpp + - java + - php +- name: revive + url: "https://github.com/mgechev/revive" + description: "Fast, configurable, extensible, flexible, and beautiful linter for Go. Drop-in replacement of golint." + tags: + - go +- name: RIPS + url: "https://www.ripstech.com/" + description: A static source code analyser for vulnerabilities in PHP scripts + tags: + - php + proprietary: true +- name: Roslyn Analyzers + url: "https://github.com/dotnet/roslyn-analyzers" + description: Roslyn-based implementation of FxCop analyzers. + tags: + - csharp +- name: Roslyn Security Guard + url: "https://dotnet-security-guard.github.io/" + description: "Project that focuses on the identification of potential vulnerabilities such as SQL injection, cross-site scripting (XSS), CSRF, cryptography weaknesses, hardcoded passwords and many more." + tags: + - csharp +- name: Roslynator + url: "https://github.com/JosefPihrt/Roslynator/" + description: "A collection of 190+ analyzers and 190+ refactorings for C#, powered by Roslyn." + tags: + - csharp +- name: rpmlint + url: "https://github.com/rpm-software-management/rpmlint" + description: Tool for checking common errors in rpm packages + tags: + - package +- name: RuboCop + url: "https://github.com/rubocop-hq/rubocop" + description: "A Ruby static code analyzer, based on the community Ruby style guide." + tags: + - ruby +- name: Rubrowser + url: "https://github.com/blazeeboy/rubrowser" + description: Ruby classes interactive dependency graph generator. + tags: + - ruby +- name: ruby-lint + url: "https://github.com/YorickPeterse/ruby-lint" + description: Static code analysis for Ruby + tags: + - ruby +- name: rubycritic + url: "https://github.com/whitesmith/rubycritic" + description: A Ruby code quality reporter + tags: + - ruby +- name: Rust Language Server + url: "https://github.com/rust-lang-nursery/rls" + description: "Supports functionality such as 'goto definition', symbol search, reformatting, and code completion, and enables renaming and refactorings." + tags: + - rust +- name: rustfix + url: "https://github.com/killercup/rustfix" + description: "read and apply the suggestions made by rustc (and third-party lints, like those offered by clippy)." + tags: + - rust +- name: safesql + url: "https://github.com/stripe/safesql" + description: Static analysis tool for Golang that protects against SQL injections. + tags: + - go +- name: SandiMeter + url: "https://github.com/makaroni4/sandi_meter" + description: "Static analysis tool for checking Ruby code for Sandi Metz' rules." + tags: + - ruby +- name: sass-lint + url: "https://github.com/sasstools/sass-lint" + description: A Node-only Sass linter for both sass and scss syntax. + tags: + - css +- name: Scalastyle + url: "http://www.scalastyle.org" + description: Scalastyle examines your Scala code and indicates potential problems with it. + tags: + - scala +- name: scan-build + url: "https://clang-analyzer.llvm.org/scan-build.html" + description: Analyzes C/C++ code using LLVM at compile-time + tags: + - c + - cpp +- name: scapegoat + url: "https://github.com/sksamuel/scapegoat" + description: Scala compiler plugin for static code analysis + tags: + - scala +- name: Scrutinizer + url: "https://scrutinizer-ci.com/" + description: A proprietary code quality checker that can be integrated with GitHub + tags: + - service + proprietary: true +- name: scsslint + url: "https://github.com/brigade/scss-lint" + description: Linter for SCSS files + tags: + - css +- name: Security Code Scan + url: "https://security-code-scan.github.io/" + description: "Security code analyzer for C# and VB.NET. Detects various security vulnerability patterns: SQLi, XSS, CSRF, XXE, Open Redirect, etc." + tags: + - csharp +- name: Security Code Scan + url: "https://security-code-scan.github.io/" + description: "Security code analyzer for C# and VB.NET that integrates into Visual Studio 2015 and newer. Detects various security vulnerability patterns: SQLi, XSS, CSRF, XXE, Open Redirect, etc." + tags: + - ide +- name: Security Code Scan + url: "https://security-code-scan.github.io/" + description: "Security code analyzer for C# and VB.NET. Detects various security vulnerability patterns: SQLi, XSS, CSRF, XXE, Open Redirect, etc." + tags: + - c + - cpp + - java + - php +- name: Semmle QL and LGTM + url: "https://semmle.com/" + description: "Find security vulnerabilities, variants, and critical code quality issues using queries over source code. Automatic PR code review; free for public GitHub/Bitbucket repo: [LGTM.com](https://LGTM.com)." + tags: + - c + - cpp + - java + - php + proprietary: true +- name: SensioLabs Insight + url: "https://insight.sensiolabs.com/" + description: "Detect security risks, find bugs and provide actionable metrics for PHP projects" + tags: + - service + proprietary: true +- name: shellcheck + url: "https://github.com/koalaman/shellcheck" + description: "ShellCheck, a static analysis tool that gives warnings and suggestions for bash/sh shell scripts" + tags: + - shell +- name: shipshape + url: "https://github.com/google/shipshape" + description: Static program analysis platform that allows custom analyzers to plug in through a common interface + tags: + - c + - cpp + - java + - php +- name: Sider + url: "https://sider.review" + description: "An automated code reviewing tool. Improving developers' productivity." + tags: + - service + proprietary: true +- name: slim-lint + url: "https://github.com/sds/slim-lint" + description: Configurable tool for analyzing Slim templates + tags: + - template +- name: slither + url: "https://github.com/trailofbits/slither" + description: "Static analysis framework that runs a suite of vulnerability detectors, prints visual information about contract details, and provides an API to easily write custom analyses" + tags: + - solidity +- name: SmartDec Scanner + url: "https://smartdecscanner.com/" + description: "SAST tool which is capable of identifying vulnerabilities and undocumented features. The analyzer scans the source code and executables without debug info (i.e. binaries). Supports: Java/Scala/Kotlin, PHP, C#, JavaScript, TypeScript, VBScript, HTML5, Python, Perl, C/C++, Objective-C/Swift, PL/SQL, T-SQL, ABAP, 1C, Apex, Go, Ruby, Groovy, Delphi, VBA, Visual Basic 6, Solidity, Vyper, COBOL." + tags: + - c + - cpp + - java + - php + proprietary: true +- name: Snyk + url: "https://snyk.io/" + description: Vulnerability scanner for dependencies of node.js apps (free for Open Source Projects) + tags: + - service + proprietary: true +- name: sobelow + url: "https://github.com/nccgroup/sobelow" + description: Security-focused static analysis for the Phoenix Framework + tags: + - elixir +- name: solium + url: "https://github.com/duaraghav8/Solium" + description: Solium is a linter to identify and fix style and security issues in Solidity smart contracts + tags: + - solidity +- name: SonarCloud + url: "https://sonarcloud.io" + description: "Multilanguage cloud-based static code analysis. History, trends, security hot-spots, pull request analysis and more. Free for open source." + tags: + - service + proprietary: true +- name: SonarLint for Visual Studio + url: "https://vs.sonarlint.org/" + description: SonarLint is an extension for Visual Studio 2015 and 2017 that provides on-the-fly feedback to developers on new bugs and quality issues injected into .NET code. + tags: + - csharp +- name: SonarQube + url: "http://www.sonarqube.org/" + description: SonarQube is an open platform to manage code quality. + tags: + - c + - cpp + - java + - php +- name: Soot + url: "https://sable.github.io/soot/" + description: A framework for analyzing and transforming Java and Android applications. + tags: + - java +- name: Sorbet + url: "https://github.com/sorbet/sorbet" + description: "A fast, powerful type checker designed for Ruby" + tags: + - ruby +- name: SourceMeter + url: "https://www.sourcemeter.com/resources/rpg/" + description: Static Code Analysis for RPG III and RPG IV versions (including free-form) + tags: + - rpg + proprietary: true +- name: SPARK + url: "http://www.spark-2014.org/about" + description: Static analysis and formal verification toolset for Ada + tags: + - ada + proprietary: true +- name: Specificity Graph + url: "https://github.com/pocketjoso/specificity-graph" + description: CSS Specificity Graph Generator + tags: + - css +- name: splint + url: "https://github.com/ravenexp/splint" + description: Annotation-assisted static program checker + tags: + - c + - cpp +- name: Spoon + url: "https://github.com/INRIA/spoon" + description: Library to write your own static analyses and architectural rule checkers for Java. Can be integrated in Maven and Gradle. + tags: + - java +- name: SpotBugs + url: "https://spotbugs.github.io/" + description: "SpotBugs is FindBugs' successor. A tool for static analysis to look for bugs in Java code." + tags: + - java +- name: sqlcheck + url: "https://github.com/jarulraj/sqlcheck-old" + description: Automatically identify anti-patterns in SQL queries + tags: + - sql +- name: sqlint + url: "https://github.com/purcell/sqlint" + description: Simple SQL linter + tags: + - sql +- name: standard + url: "http://standardjs.com/" + description: An npm module that checks for Javascript Styleguide issues + tags: + - javascript +- name: staticcheck + url: "https://staticcheck.io/" + description: "A suite of static analysis tools for Go, similar to ReSharper for C#. It specialises on bug finding, code simplicity, performance and editor integration." + tags: + - go +- name: STOKE + url: "https://github.com/StanfordPL/stoke" + description: a programming-language agnostic stochastic optimizer for the x86_64 instruction set. It uses random search to explore the extremely high-dimensional space of all possible program transformations + tags: + - c + - cpp + - java + - php +- name: structcheck + url: "https://gitlab.com/opennota/check" + description: Find unused struct fields. + tags: + - go +- name: Stylelint + url: "http://stylelint.io/" + description: Linter for SCSS/CSS files + tags: + - css +- name: styler + url: "https://styler.r-lib.org/" + description: Formatting of R source code files and pretty-printing of R code. + tags: + - r +- name: SVF + url: "https://github.com/SVF-tools/SVF" + description: a static tool that enables scalable and precise interprocedural dependence analysis for C and C++ programs. + tags: + - c + - cpp +- name: SwiftFormat + url: "https://github.com/nicklockwood/SwiftFormat" + description: A library and command-line formatting tool for reformatting Swift code + tags: + - swift +- name: SwiftLint + url: "https://github.com/realm/SwiftLint" + description: A tool to enforce Swift style and conventions + tags: + - swift +- name: Synopsys + url: "https://www.synopsys.com/software-integrity/security-testing/static-analysis-sast.html" + description: "A commercial static analysis platform that allows for scanning of multiple languages (C/C++, Android, C#, Java, JS, PHP, Python, Node.JS, Ruby, Fortran, and Swift)" + tags: + - c + - cpp + - java + - php + proprietary: true +- name: Tailor + url: "https://github.com/sleekbyte/tailor" + description: "A static analysis and lint tool for source code written in Apple's Swift programming language." + tags: + - swift + deprecated: true +- name: tclchecker + url: "https://github.com/ActiveState/tdk/blob/master/docs/3.0/TDK_3.0_Checker.txt" + description: "A static syntax analysis module (as part of [TDK](https://github.com/ActiveState/tdk))." + tags: + - tcl +- name: Teamscale + url: "http://www.teamscale.com/" + description: Static and dynamic analysis tool supporting more than 25 languages and direct IDE integration. Free hosting for Open Source projects available on request. Free academic licenses available. + tags: + - service + proprietary: true +- name: tern + url: "https://github.com/ternjs/tern" + description: "A JavaScript code analyzer for deep, cross-editor language support" + tags: + - javascript +- name: terraform-compliance + url: "https://terraform-compliance.com" + description: "a lightweight, compliance and security focused, BDD test framework against Terraform." + tags: + - configmanagement +- name: terrascan + url: "https://github.com/cesar-rodriguez/terrascan" + description: Collection of security and best practice tests for static code analysis of Terraform templates. + tags: + - configmanagement +- name: test + url: "http://golang.org/pkg/testing/" + description: Show location of test failures from the stdlib testing module. + tags: + - go +- name: Test Design Studio + url: "http://patterson-consulting.net/tds" + description: A full IDE with static code analysis for Micro Focus Unified Functional Testing VBScript-based automated tests. + tags: + - vbscript + proprietary: true +- name: tflint + url: "https://github.com/wata727/tflint" + description: "A Terraform linter for detecting errors that can not be detected by `terraform plan`." + tags: + - configmanagement +- name: TscanCode + url: "https://github.com/Tencent/TscanCode" + description: "A fast and accurate static analysis solution for C/C++, C#, Lua codes provided by Tencent. Using GPLv3 license." + tags: + - c + - cpp + - java + - php +- name: tslint-clean-code + url: "https://github.com/Glavin001/tslint-clean-code" + description: A set of TSLint rules inspired by the Clean Code handbook. + tags: + - typescript +- name: tslint-microsoft-contrib + url: "https://github.com/Microsoft/tslint-microsoft-contrib" + description: A set of tslint rules for static code analysis of TypeScript projects maintained by Microsoft. + tags: + - typescript +- name: tsqllint + url: "https://github.com/tsqllint/tsqllint" + description: T-SQL-specific linter + tags: + - sql +- name: TSqlRules + url: "https://github.com/ashleyglee/TSqlRules" + description: TSQL Static Code Analysis Rules for SQL Server + tags: + - sql +- name: Tuli + url: "https://github.com/ircmaxell/Tuli" + description: A static analysis engine + tags: + - php +- name: twig-lint + url: "https://github.com/asm89/twig-lint" + description: twig-lint is a lint tool for your twig files. + tags: + - php +- name: Twiggy + url: "https://github.com/rustwasm/twiggy" + description: "Analyzes a binary's call graph to profile code size. The goal is to slim down binaries." + tags: + - binary +- name: unconvert + url: "https://github.com/mdempsky/unconvert" + description: Detect redundant type conversions. + tags: + - go +- name: Undebt + url: "https://github.com/Yelp/undebt" + description: "Language-independent tool for massive, automatic, programmable refactoring based on simple pattern definitions" + tags: + - c + - cpp + - java + - php +- name: Understand + url: "https://scitools.com/ada-programming-essential/" + description: "IDE that provides code analysis, standards testing, metrics, graphing, dependency analysis and more for Ada and VHDL." + tags: + - ada + proprietary: true +- name: Unibeautify + url: "https://unibeautify.com/" + description: "Universal code beautifier with a GitHub app. Supports HTML, CSS, JavaScript, TypeScript, JSX, Vue, C++, Go, Objective-C, Java, Python, PHP, GraphQL, Markdown, and more." + tags: + - c + - cpp + - java + - php +- name: unimport + url: "https://github.com/alexkohler/unimport" + description: Finds unnecessary import aliases + tags: + - go +- name: unparam + url: "https://github.com/mvdan/unparam" + description: Find unused function parameters. + tags: + - go +- name: unused + url: "https://github.com/dominikh/go-tools/tree/master/cmd/unused" + description: Find unused variables. + tags: + - go +- name: Upsource + url: "https://www.jetbrains.com/upsource/" + description: "Code review tool with static code analysis and code-aware navigation for Java, PHP, JavaScript and Kotlin." + tags: + - service + proprietary: true +- name: vale + url: "https://github.com/ValeLint/vale" + description: "A customizable, syntax-aware linter for prose." + tags: + - writing +- name: varcheck + url: "https://gitlab.com/opennota/check" + description: Find unused global variables and constants. + tags: + - go +- name: vera++ + url: "https://bitbucket.org/verateam/vera/wiki/Introduction" + description: "Vera++ is a programmable tool for verification, analysis and transformation of C++ source code." + tags: + - c + - cpp +- name: Veracode + url: "http://www.veracode.com/products/static-analysis-sast/static-code-analysis" + description: "Find flaws in binaries and bytecode without requiring source. Support all major programming languages: Java, .NET, JavaScript, Swift, Objective-C, C, C++ and more." + tags: + - c + - cpp + - java + - php + proprietary: true +- name: vint + url: "https://github.com/Kuniwak/vint" + description: Fast and Highly Extensible Vim script Language Lint implemented by Python. + tags: + - ide +- name: Violations Lib + url: "https://github.com/tomasbjerre/violations-lib" + description: "Java library for parsing report files from static code analysis. Used by a bunch of Jenkins, Maven and Gradle plugins." + tags: + - support +- name: VSDiagnostics + url: "https://github.com/Vannevelj/VSDiagnostics" + description: A collection of static analyzers based on Roslyn that integrates with VS. + tags: + - csharp +- name: vulture + url: "https://github.com/jendrikseipp/vulture" + description: "find unused classes, functions and variables in Python code" + tags: + - python +- name: WALA + url: "http://wala.sourceforge.net/wiki/index.php/Main_Page" + description: static analysis capabilities for Java bytecode and related languages and for JavaScript + tags: + - c + - cpp + - java + - php +- name: WAP + url: "https://www.owasp.org/index.php/OWASP_WAP-Web_Application_Protection" + description: Tool to detect and correct input validation vulnerabilities in PHP (4.0 or higher) web applications and predicts false positives by combining static analysis and data mining. + tags: + - php +- name: WartRemover + url: "https://github.com/puffnfresh/wartremover" + description: a flexible Scala code linting tool. + tags: + - scala +- name: Weeder + url: "https://github.com/ndmitchell/weeder" + description: A tool for detecting dead exports or package imports in Haskell code. + tags: + - haskell +- name: wemake-python-styleguide + url: "https://github.com/wemake-services/wemake-python-styleguide" + description: the strictest and most opinionated python linter ever + tags: + - python +- name: WhiteHat Application Security Platform + url: "https://www.whitehatsec.com/products/static-application-security-testing/" + description: "WhiteHat Scout (for Developers) combined with WhiteHat Sentinel Source (for Operations) supporting WhiteHat Top 40 and OWASP Top 10. Language support for: Java, C#(.NET), ASP.NET, PHP, JavaScript, Node.js, Objective-C, Android, HTML5, TypeScript." + tags: + - c + - cpp + - java + - php + proprietary: true +- name: wily + url: "https://github.com/tonybaloney/wily" + description: "a command-line tool for archiving, exploring and graphing the complexity of Python source code" + tags: + - python +- name: Wintellect.Analyzers + url: "https://github.com/Wintellect/Wintellect.Analyzers" + description: ".NET Compiler Platform (\"Roslyn\") diagnostic analyzers and code fixes." + tags: + - csharp +- name: Wotan + url: "https://github.com/fimbullinter/wotan" + description: Pluggable TypeScript and JavaScript linter + tags: + - c + - cpp + - java + - php +- name: write-good + url: "https://github.com/btford/write-good" + description: "A linter with a focus on eliminating \"weasel words\"." + tags: + - writing +- name: wsl + url: "https://github.com/bombsimon/wsl" + description: Enforces empty lines at the right places. + tags: + - go +- name: Xanitizer + url: "https://xanitizer.com/" + description: Xanitizer finds security vulnerabilities in Java/Scala web applications. + tags: + - java +- name: Xanitizer + url: "https://xanitizer.com/" + description: Xanitizer finds security vulnerabilities in Java/Scala web applications. + tags: + - scala +- name: XCode + url: "https://developer.apple.com/xcode/" + description: "XCode provides a pretty decent UI for [Clang's](http://clang-analyzer.llvm.org/xcode.html) static code analyzer (C/C++, Obj-C)" + tags: + - c + - cpp + - java + - php + proprietary: true +- name: xenon + url: "https://github.com/rubik/xenon" + description: "monitor code complexity using [`radon`](https://github.com/rubik/radon)" + tags: + - python +- name: xo + url: "https://github.com/xojs/xo" + description: Opinionated but configurable ESLint wrapper with lots of goodies included. Enforces strict and readable code. + tags: + - javascript +- name: yamllint + url: "https://github.com/adrienverge/yamllint" + description: "Checks YAML files for syntax validity, key repetition and cosmetic problems such as lines length, trailing spaces, and indentation." + tags: + - template +- name: yardstick + url: "https://github.com/calmh/yardstick" + description: Javascript code metrics + tags: + - javascript + deprecated: true diff --git a/data/render/.gitignore b/data/render/.gitignore new file mode 100644 index 000000000..eb5a316cb --- /dev/null +++ b/data/render/.gitignore @@ -0,0 +1 @@ +target diff --git a/data/render/Cargo.lock b/data/render/Cargo.lock new file mode 100644 index 000000000..35bcd42e8 --- /dev/null +++ b/data/render/Cargo.lock @@ -0,0 +1,695 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "aho-corasick" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "autocfg" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "bstr" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "byteorder" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "chrono" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "chrono-tz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "parse-zoneinfo 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-channel" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-utils" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "deunicode" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "dtoa" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fnv" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "generic-array" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "getrandom" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "globset" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "bstr 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "globwalk" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ignore 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "humansize" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ignore" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-channel 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "globset 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "itoa" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "libc" +version = "0.2.67" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "linked-hash-map" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "log" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "num-integer" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-traits" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "parse-zoneinfo" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "pest" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-trie 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_derive" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_generator 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_generator" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_meta 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pest_meta" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "sha-1 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "proc-macro2" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "quote" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "redox_syscall" +version = "0.1.56" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "regex" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.6.16" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "render" +version = "0.1.0" +dependencies = [ + "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tera 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ryu" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde_derive" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_json" +version = "1.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_yaml" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "sha-1" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slug" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "deunicode 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "syn" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tera" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono-tz 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "globwalk 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "humansize 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", + "slug 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "unic-segment 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "time" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "typenum" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ucd-trie" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unic-char-range 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unic-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unic-ucd-segment 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unic-ucd-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unic-char-property 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unic-char-range 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unic-ucd-version 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unic-common 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "unicode-xid" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "walkdir" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "yaml-rust" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[metadata] +"checksum aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada" +"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" +"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +"checksum block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +"checksum bstr 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "502ae1441a0a5adb8fbd38a5955a6416b9493e92b465de5e4a9bde6a539c2c48" +"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +"checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" +"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +"checksum chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2" +"checksum chrono-tz 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e0e430fad0384e4defc3dc6b1223d1b886087a8bf9b7080e5ae027f73851ea15" +"checksum crossbeam-channel 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "cced8691919c02aac3cb0a1bc2e9b73d89e832bf9a06fc579d4e71b68a2da061" +"checksum crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" +"checksum deunicode 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690" +"checksum digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +"checksum dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3" +"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" +"checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" +"checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" +"checksum globset 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "925aa2cac82d8834e2b2a4415b6f6879757fb5c0928fc445ae76461a12eed8f2" +"checksum globwalk 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d9db17aec586697a93219b19726b5b68307eba92898c34b170857343fe67c99d" +"checksum humansize 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b6cab2627acfc432780848602f3f558f7e9dd427352224b0d9324025796d2a5e" +"checksum ignore 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "522daefc3b69036f80c7d2990b28ff9e0471c683bad05ca258e0a01dd22c5a1e" +"checksum itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" +"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +"checksum libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)" = "eb147597cdf94ed43ab7a9038716637d2d1bf2bc571da995d0028dec06bd3018" +"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83" +"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" +"checksum maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" +"checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" +"checksum memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" +"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" +"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" +"checksum opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" +"checksum parse-zoneinfo 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "feece9d0113b400182a7d00adcff81ccf29158c49c5abd11e2eed8589bf6ff07" +"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +"checksum pest 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +"checksum pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" +"checksum pest_generator 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "27e5277315f6b4f27e0e6744feb5d5ba1891e7164871033d3c8344c6783b349a" +"checksum pest_meta 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" +"checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" +"checksum proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435" +"checksum quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f" +"checksum rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +"checksum rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +"checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" +"checksum regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "322cf97724bea3ee221b78fe25ac9c46114ebb51747ad5babd51a2fc6a8235a8" +"checksum regex-syntax 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)" = "1132f845907680735a84409c3bebc64d1364a5683ffbce899550cd09d5eaefc1" +"checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" +"checksum same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +"checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" +"checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" +"checksum serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)" = "9371ade75d4c2d6cb154141b9752cf3781ec9c05e0e5cf35060e1e70ee7b9c25" +"checksum serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)" = "691b17f19fc1ec9d94ec0b5864859290dff279dbd7b03f017afda54eb36c3c35" +"checksum sha-1 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" +"checksum slug 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373" +"checksum syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)" = "123bd9499cfb380418d509322d7a6d52e5315f064fe4b3ad18a53d6b92c07859" +"checksum tera 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5422f81514a243fc63f0c895adba9efcfce24d53ca6e746fc26c12d7a5d7c98d" +"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" +"checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" +"checksum ucd-trie 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8f00ed7be0c1ff1e24f46c3d2af4859f7e863672ba3a6e92e7cff702bf9f06c2" +"checksum unic-char-property 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +"checksum unic-char-range 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" +"checksum unic-common 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" +"checksum unic-segment 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" +"checksum unic-ucd-segment 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" +"checksum unic-ucd-version 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" +"checksum walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" +"checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" +"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" +"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4ccfbf554c6ad11084fb7517daca16cfdcaccbdadba4fc336f032a8b12c2ad80" +"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +"checksum yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65923dd1784f44da1d2c3dbbc5e822045628c590ba72123e1c73d3c230c4434d" diff --git a/data/render/Cargo.toml b/data/render/Cargo.toml new file mode 100644 index 000000000..ff87e0f35 --- /dev/null +++ b/data/render/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "render" +version = "0.1.0" +authors = ["Matthias Endler "] +edition = "2018" + +[dependencies] +serde = "1.0.104" +serde_derive = "1.0.104" +serde_yaml = "0.8.11" +tera = "1.1.0" diff --git a/data/render/src/lints.rs b/data/render/src/lints.rs new file mode 100644 index 000000000..6ea3b0a23 --- /dev/null +++ b/data/render/src/lints.rs @@ -0,0 +1,26 @@ +use std::error::Error; + +use crate::types::Entry; + +pub fn filename(entry: &Entry) -> Result<(), Box> { + match entry.name.len() <= 50 { + true => Ok(()), + false => Err(format!( + "Name of entry may be at most 50 characters long, but {} is {} long", + entry.name, + entry.name.len() + ) + .into()), + } +} + +pub fn min_one_tag(entry: &Entry) -> Result<(), Box> { + match entry.tags.is_empty() { + true => Err(format!( + "{} must have at least one tag from `categories.yml`.", + entry.name + ) + .into()), + false => Ok(()), + } +} diff --git a/data/render/src/main.rs b/data/render/src/main.rs new file mode 100644 index 000000000..148977278 --- /dev/null +++ b/data/render/src/main.rs @@ -0,0 +1,111 @@ +#[macro_use] +extern crate serde_derive; + +use std::env; +use std::error::Error; + +mod lints; +mod render; +mod types; + +use render::render; +use std::collections::BTreeMap; +use types::{Catalog, Categories, Entry}; + +fn valid(entry: &Entry) -> Result<(), Box> { + let lints = [lints::filename, lints::min_one_tag]; + lints.iter().map(|lint| Ok(lint(&entry)?)).collect() +} + +fn get_files() -> Result<(String, String), Box> { + let files: Vec<_> = env::args().skip(1).collect(); + if files.len() != 2 { + return Err("Expected a two input files, `data.yml` and `categories.yml`".into()); + } + Ok((files[0].clone(), files[1].clone())) +} + +fn read_categories(file: String) -> Result> { + let f = std::fs::File::open(file)?; + Ok(serde_yaml::from_reader(f)?) +} + +fn read_entries(file: String) -> Result, Box> { + let f = std::fs::File::open(file)?; + Ok(serde_yaml::from_reader(f)?) +} + +fn validate(categories: &Categories, entries: &Vec) -> Result<(), Box> { + for entry in entries { + for tag in &entry.tags { + if !categories.contains(tag) { + return Err(format!( + "Unknown tag `{}` for entry `{}`. It might be missing from the `categories.yml` file.", + tag , entry.name + ) + .into()); + } + } + if let Err(e) = valid(&entry) { + return Err(e); + } + } + Ok(()) +} + +fn group(categories: &Categories, entries: Vec) -> Result> { + let mut linters = BTreeMap::new(); + + // Move tools that support multiple languages into their own category + let (multi, entries): (Vec, Vec) = entries.into_iter().partition(|entry| { + entry.tags.len() > 1 + && entry.tags + != ["c".to_string(), "cpp".to_string()] + .iter() + .cloned() + .collect() + }); + + for language in &categories.languages { + let list: Vec = entries + .iter() + .filter(|e| e.tags.contains(&language.tag)) + .map(|e| e.clone()) + .collect(); + if !list.is_empty() { + linters.insert(language.name.clone(), list); + } + } + + let mut others = BTreeMap::new(); + for other in &categories.other { + let list: Vec = entries + .iter() + .filter(|e| e.tags.contains(&other.tag)) + .map(|e| e.clone()) + .collect(); + if !list.is_empty() { + others.insert(other.name.clone(), list); + } + } + + Ok(Catalog { + linters, + others, + multi, + }) +} + +fn main() -> Result<(), Box> { + let (categories, data) = get_files()?; + let categories = read_categories(categories)?; + let mut entries = read_entries(data)?; + entries.sort(); + validate(&categories, &entries)?; + + let catalog = group(&categories, entries)?; + let template = std::fs::read_to_string("src/templates/README.md")?; + let rendered = render(&template, catalog, categories)?; + println!("{}", rendered); + Ok(()) +} diff --git a/data/render/src/render.rs b/data/render/src/render.rs new file mode 100644 index 000000000..2ebf51fc3 --- /dev/null +++ b/data/render/src/render.rs @@ -0,0 +1,14 @@ +use crate::types::{Catalog, Categories}; +use std::error::Error; +use tera::{Context, Tera}; + +pub fn render( + template: &str, + catalog: Catalog, + categories: Categories, +) -> Result> { + let mut context = Context::new(); + context.insert("catalog", &catalog); + context.insert("categories", &categories); + Ok(Tera::one_off(template, &context, true)?) +} diff --git a/data/render/src/templates/README.md b/data/render/src/templates/README.md new file mode 100644 index 000000000..c5590d5a7 --- /dev/null +++ b/data/render/src/templates/README.md @@ -0,0 +1,83 @@ +![Logo](awesome.png) + +> Static program analysis is the analysis of computer software that is performed without actually executing programs — [Wikipedia](https://en.wikipedia.org/wiki/Static_program_analysis) + +![CI](https://github.com/analysis-tools-dev/static-analysis/workflows/CI/badge.svg) + +This is a collection of static analysis tools and code quality checkers. Pull requests are very welcome! + +* :copyright: stands for proprietary software. All other tools are Open Source. +* :warning: indicates that the community does not recommend to use this tool for + new projects anymore as it is outdated or no longer maintained. + +Also check out the sister project, [awesome-dynamic-analysis](https://github.com/mre/awesome-dynamic-analysis). + +# Table of Contents + +#### [Programming Languages](#programming-languages-1) + +
    + Show languages + +
      + {% for language in categories.languages -%} + {% if catalog.linters is containing(language.name) -%} +
    • {{ language.name }}
    • + {% endif -%} + {% endfor -%} +
    +
    + +#### [Multiple languages](#multiple-languages-1) + +#### [Other](#other-1) + +{% for other in categories.other -%} +- [{{ other.name }}](#{{ other.tag }}) +{% endfor %} + +--- + +# Programming Languages +{% for language, linters in catalog.linters %} +## {{ language }} + +{% for linter in linters -%} + +* [{{linter.name }}]({{linter.url | safe }}) + {%- if linter.deprecated %} :warning:{% endif %} {% if linter.proprietary %}:copyright: {% endif %}- {{linter.description | safe }} +{% endfor -%} +{% endfor %} + +# Multiple languages + +{% for linter in catalog.multi -%} + +* [{{linter.name }}]({{linter.url | safe }}) + {%- if linter.deprecated %} :warning:{% endif %} {% if linter.proprietary %}:copyright: {% endif %}- {{linter.description | safe }} +{% endfor %} + +# Other +{% for category, others in catalog.others %} +## {{ category }} + +{% for other in others -%} + +* [{{ other.name }}]({{ other.url | safe }}) - {{ other.description | safe }} +{% endfor -%} +{% endfor %} + +# More collections + +* [go-tools](https://github.com/dominikh/go-tools) - A collection of tools and libraries for working with Go code, including linters and static analysis +* [linters](https://github.com/mcandre/linters) - An introduction to static code analysis +* [php-static-analysis-tools](https://github.com/exakat/php-static-analysis-tools) - A reviewed list of useful PHP static analysis tools +* [Tools for C/C++](https://www.peerlyst.com/posts/a-list-of-static-analysis-tools-for-c-c-peerlyst?utm_source=twitter&utm_medium=social&utm_content=peerlyst_post&utm_campaign=peerlyst_resources) - A list of static analysis tools for C/C++ +* [Wikipedia](http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis) - A list of tools for static code analysis. + +## License + +[![CC0](https://i.creativecommons.org/p/zero/1.0/88x31.png)](https://creativecommons.org/publicdomain/zero/1.0/) + +To the extent possible under law, [Matthias Endler](https://endler.dev) has waived all copyright and related or neighboring rights to this work. +Title image [Designed by Freepik](http://www.freepik.com). \ No newline at end of file diff --git a/data/render/src/types.rs b/data/render/src/types.rs new file mode 100644 index 000000000..33495e652 --- /dev/null +++ b/data/render/src/types.rs @@ -0,0 +1,80 @@ +use std::cmp::Ordering; +use std::collections::{BTreeMap, HashSet}; + +#[derive(Clone, Debug, Serialize, Deserialize, Eq)] +pub struct Category { + pub name: String, + pub tag: String, +} + +impl Ord for Category { + fn cmp(&self, other: &Category) -> Ordering { + self.tag.to_lowercase().cmp(&other.tag.to_lowercase()) + } +} + +impl PartialOrd for Category { + fn partial_cmp(&self, other: &Category) -> Option { + Some(self.cmp(other)) + } +} + +impl PartialEq for Category { + fn eq(&self, other: &Category) -> bool { + self.tag.to_lowercase() == other.tag.to_lowercase() + } +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Categories { + pub languages: Vec, + pub other: Vec, +} + +impl Categories { + pub fn contains(&self, tag: &str) -> bool { + self.languages.iter().any(|lang| lang.tag == tag) + || self.other.iter().any(|lang| lang.tag == tag) + } +} + +pub type Tags = HashSet; + +#[derive(Clone, Debug, Serialize, Deserialize, Eq)] +pub struct Entry { + pub name: String, + pub url: String, + pub description: String, + // TODO #[validate(length(min = 1))] + pub tags: Tags, + pub proprietary: Option, + pub deprecated: Option, + pub wrapper: Option, +} + +impl PartialEq for Entry { + fn eq(&self, other: &Entry) -> bool { + self.name.to_lowercase() == other.name.to_lowercase() + } +} + +impl PartialOrd for Entry { + fn partial_cmp(&self, other: &Entry) -> Option { + Some(self.cmp(other)) + } +} + +impl Ord for Entry { + fn cmp(&self, other: &Entry) -> Ordering { + self.name.to_lowercase().cmp(&other.name.to_lowercase()) + } +} + +pub type EntryMap = BTreeMap>; + +#[derive(Debug, Serialize, Deserialize)] +pub struct Catalog { + pub linters: EntryMap, + pub others: EntryMap, + pub multi: Vec, +}