B2R2.FSLint
1.0.4
Prefix Reserved
dotnet tool install --global B2R2.FSLint --version 1.0.4
dotnet new tool-manifest
dotnet tool install --local B2R2.FSLint --version 1.0.4
#tool dotnet:?package=B2R2.FSLint&version=1.0.4
nuke :add-package B2R2.FSLint --version 1.0.4
FSLint
High-performance F# linter based on syntactic analysis, providing real-time feedback in IDEs and seamless CI/CD integration.
The Problem
Your F# codebase grows. Style inconsistencies creep in. Code reviews catch formatting issues instead of logic bugs. CI pipelines slow down waiting for linters that need full semantic analysis.
The Solution
FSLint gives you real-time style enforcement without the wait. No dependency resolution. No type checking overhead. Just instant feedback on what matters.
What You Get
Zero Setup — Install and start linting. No config files required.
Instant Feedback — See violations as you open and save, not after you push.
CI/CD Native — File-level analysis works in any pipeline, any environment.
Precise Rules — Based on F# official guidelines and B2R2 F# conventions.
Quick Start
Visual Studio
Extensions → Manage Extensions → Search "FSLint"
VS Code
ext install B2R2.fslint
Command Line (CI/CD)
dotnet tool install --global B2R2.FSLint
fslint check ./src
Open any .fs file. Violations appear instantly with visual indicators.
Why Syntactic Analysis?
FSLint analyzes your code structure, not its semantics. This means:
- No waiting for type inference
- No dependency graph resolution
- Works on incomplete code
- Scales to massive codebases
Perfect for catching style violations the moment you write them.
Built by Security Researchers
Developed at KAIST SoftSec Lab for the B2R2 binary analysis platform — a project with 700,000+ lines of F# that demands both speed and precision.
Requirements
- .NET SDK 10.0+
- F# source files (
.fs)
Extension Settings
fslint.enable— Toggle linting (default:true)fslint.trace.server— Debug LSP communication
Configuration
FSLint respects .editorconfig settings in your workspace:
[*.fs]
max_line_length = 120 # Default: 80
Release Notes
1.0.4
- Relax Tuple Convention rules to better handle cases with inline and trailing comments
- Refactor duplicated functions to improve maintainability and reduce redundancy
1.0.3
- Relax Declaration and ArrayOrList rules
- Use ParsedInput instead of source-aware algorithm
1.0.2
- Linting is no longer performed in real time and is now executed on file save.
Contributing
Found an issue? Have a suggestion? → GitHub Issues
License
MIT — Free for commercial and open source use.
Stop debating style in code reviews. Enforce it automatically.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.