Skip to content
CAI
Software that uses CAICheck a score

G-Research/fsharp-analyzers

67.3

Adequate · 3 October 2026

1.2k

lines of production code

F#

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a library of static code analyzers for the F\# programming language, designed to detect common pitfalls and enforce best practices. It provides rules for validating logging templates, string method usage, interpolated strings, immutable collection equality, and JSON serialization options. The project includes a comprehensive test suite to validate these analyzer behaviors against specific code baselines.

Features

Initial project setup and repository configuration

The repository has been initialized with the core structure for the G-Research F\# Analyzers project. This includes the solution file, build scripts (build.fsx, format.fsx), and a comprehensive CHANGELOG.md documenting the history of analyzer updates and fixes. Configuration files such as .editorconfig, .fantomasignore, and .gitattributes establish consistent code formatting and line-ending policies for F\# files. Additionally, Directory.Build.props defines common packaging properties, and the README.md provides updated usage instructions for consuming the analyzers via NuGet.

(repo-wide) · high confidence

New F\# code analyzers for logging, strings, and collections

The FSharp.Analyzers library now includes several new static analysis rules to help catch common pitfalls. The LoggingTemplateMissingValuesAnalyzer warns when log message placeholders do not match the provided arguments, while the LoggingArgFuncNotFullyAppliedAnalyzer detects partially applied functions passed to ILogger methods. String analysis has been extended to cover LastIndexOf in addition to StartsWith, EndsWith, and IndexOf, all of which now warn when called with a single string argument to encourage explicit overloads. Additionally, the TypedInterpolatedStringsAnalyzer flags interpolated string holes missing type specifiers, the ImmutableCollectionEqualityAnalyzer warns against using structural equality on immutable collections that lack it, the JsonSerializerOptionsAnalyzer suggests caching JsonSerializerOptions instances, and the UnionCaseAnalyzer recommends RequireQualifiedAccess to avoid name clashes with FSharp.Core union cases.

src/FSharp.Analyzers · high confidence

Test coverage

Added test data for F\# analyzer rules; Added test suite for F\# analyzers.

Dependencies

Initial project setup with .NET 10 and centralized package management

The repository is initialized with a new project structure targeting .NET 10.0, utilizing centralized package version management via Directory.Packages.props. Key dependencies include FSharp.Analyzers.SDK 0.39.0, FSharp.Core 10.1.400, NUnit 4.6.1, and the associated test SDK and adapter packages.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 68 → 67 (-0.6)
  • Rubric changed (rubric-2026.09.15 → rubric-2026.10.1) — scores are not directly comparable.

Lenses

  • Code Health 97 → 97 (+0.0)
  • Architecture 100 → 96 (-3.7)
  • Maturity 56 → 56 (-0.0)
  • Readiness 66 → 66 (-0.1)
  • Security 85 → 82 (-3.0)

Resolved (2)

  • Documentation: no contributor guidance (README.md)
  • Off-boarding risk: anonymized user #1

New (3)

  • Off-boarding risk: anonymized user #1
  • Outdated: Ionide.KeepAChangelog.Tasks
  • Outdated: NUnit

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

G-Research/fsharp-analyzers was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 3 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 7ab2d8906209560ed96808a27e57f41fe05000fa — the exact code this score is about.
  • Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-4f4226d619ea.