Skip to content
CAI
Software that uses CAICheck a score

tek/splain

56.7

Adequate · 20 September 2026

1.9k

lines of production code

Scala

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

Splain is a Scala compiler plugin that enhances diagnostic output by providing detailed type information and implicit resolution diagnostics. It supports Scala 2.13.7+ and earlier 2.13.x versions, offering features such as structured tree visualizations for diverging implicit errors and configurable type detail levels. The system is designed to integrate with sbt and Gradle to improve the clarity of compilation errors for developers.

How it got here

2016–2021 — Scala 2.13 plugin development and testing

16 changes.

The project focused on building and refining a compiler plugin for Scala 2.13.7+ to enhance implicit resolution diagnostics and error reporting. This period involved implementing core analysis features, establishing comprehensive acceptance tests, and modernizing the build infrastructure to support these capabilities.

2022 — Test infrastructure and coverage expansion

4 changes.

This period focused on building comprehensive testing infrastructure for the Scala compiler tool, introducing a new test fixtures module and a \splain.test\ package with runtime and compile-time compilation utilities. The work included implementing \TryCompile\ engines and macros to simulate real-world compilation scenarios, alongside extensive acceptance tests to verify static error reporting and implicit resolution diagnostics.

Features

Added Scala 2.13.7+ compiler plugin for improved type and implicit error messages

This change introduces the 'splain' compiler plugin for Scala 2.13.7 and later, which enhances compiler error messages by providing more detailed type information and implicit resolution diagnostics. The plugin replaces the default analyzer with a custom \SplainAnalyzer\ that includes specialized formatters for functions, tuples, Shapeless records, and refined types, and optionally includes debug output when enabled. It also handles migration of deferred package object openings to ensure compatibility with the compiler's internal state.

core/src/main/scala-2.13.7+ · high confidence

Initial project scaffolding and configuration

The repository is initialized with the core structure for the Splain Scala compiler plugin, including the MIT License, a comprehensive README detailing usage for Scala 2.12/2.13 and integration with sbt/Gradle, and configuration files for code formatting (Scalafmt) and static analysis (Scalafix). The setup also includes a Travis CI build script, Git attributes for line-ending consistency, and a Gradle wrapper to ensure reproducible builds.

(repo-wide) · high confidence

New development and CI automation scripts

The dev directory now includes a suite of shell scripts to streamline local development and continuous integration workflows. These scripts automate key tasks: CI execution (test.sh, .CI.sh, CI-latest.sh), code formatting and static analysis (format-code.sh), dependency management and Gradle wrapper updates (gradle-versions.sh), build logging and dependency tree generation (log-make-all.sh, make-all.sh), and publishing artifacts to Maven Local or Sonatype (publish-all.sh, publishM2-all.sh, publish.sh, publishM2.sh, publish.template.sh). This provides developers with standardized, reusable commands for common build and release operations.

dev · high confidence

Removals

Removal of Scala 2.10 compiler plugin support

The \splain\ compiler plugin implementation for Scala 2.10 has been removed, as indicated by the deletion of \splain/src/plugin.scala\. This change deactivates the plugin for Scala 2.10 due to incompatibilities with that version, meaning users on Scala 2.10 will no longer receive implicit resolution error formatting from this tool.

splain · high confidence

Removal of basic type-triple definitions

The \unit/src/basic.scala\ file, which defined the \\\\*\ type-triple operator and associated type aliases (\T1\, \T2\, \T3\) along with implicit conversions, has been removed from the codebase.

unit · high confidence

Removal of legacy Tryp build infrastructure

The project has removed its legacy Tryp-based build system, deleting the \project/build.scala\ definition, the nested \project/project\ bootstrapping files, and the \tryp.sbt\ plugin configuration files. This cleanup eliminates the dependency on the external \tryp-build\ plugin and the associated Bintray resolver, simplifying the build structure.

project · high confidence

Behavioural changes

Added internal error handling and message definitions for the Scala 2.13.6 analyzer plugin

The splain analyzer plugin now includes a dedicated error class (SplainInternalError) to report internal bugs with a link to the issue tracker, and a Messages object defining specific warning and error strings for implicit expansion diagnostics. These additions support the new capability to explain diverging implicit expansion errors in Scala 2.13.6.

core/src/main/scala/splain · high confidence

Centralized version management for Scala artifacts

The build system now uses a centralized \Versions\ class to manage project metadata and Scala version parsing. This change introduces logic to dynamically determine Scala artifact suffixes based on the major version (using '3' for Scala 3 and the binary version for earlier releases) and validates that the Scala version follows the 'X.Y.Z' format, ensuring consistent dependency resolution across the build.

buildSrc · high confidence

Improved diverging implicit error reporting and formatting

The core module now provides enhanced diagnostics for diverging implicit expansion errors. A new \ImplicitsExtension\ tracks implicit search history to detect and limit repeated diverging errors, preventing excessive output. Additionally, \SplainFormattingExtension\ introduces structured tree visualization for implicit errors, allowing users to see the hierarchy of failed implicit searches with support for both verbose and compact views. These changes are controlled via new plugin settings (\Vimplicits-diverging\, \Vimplicits-diverging-max-depth\, \Vtype-detail\, \Vtype-diffs-detail\) that enable detailed type and diff information.

repository · high confidence

Test coverage

Added BasicFixture with Scala compiler test cases; Added acceptance tests for static compile-time error reporting; Added compile-time and runtime code compilation utilities for testing; Added test coverage for builtin implicit resolution scenarios; Added test coverage for plugin error reporting and type detail features; Added test infrastructure for Splain acceptance tests; Added test resources for implicit and type mismatch error reporting; Added test resources for implicit error scenarios; Added tests for TryCompile static and runtime behavior.

Dependencies

Gradle wrapper updated to version 8.14.3

The project's Gradle wrapper has been initialized or updated to use Gradle 8.14.3. This ensures that all developers and CI environments build the project using a consistent, specific version of the Gradle build tool, eliminating potential discrepancies caused by different locally installed Gradle versions.

gradle · high confidence

Upgrade to Scala 2.13.18 and update test dependencies

The project has upgraded its Scala version to 2.13.18 (previously 2.13.15/16 in earlier commits) and updated the ScalaTest dependency to version 3.2.11. Additionally, the JUnit platform and Jupiter dependencies were updated to version 5.13.4, and the scalatestplus-junit-5-13 adapter was updated to 3.2.19.2. The build configuration also reflects a move to the new Sonatype Central Repository (ossrh-staging-api.central) for publishing artifacts.

(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

Baseline

  • First survey — no prior run to compare against. CAI 57.

Lenses

  • Code Health 93
  • Architecture 100
  • Maturity 50
  • Readiness 50
  • Security 59

Changes since last survey

  • 300 commits — 273 feature/other, 27 fixes

By area

  • (root) — 132 commits
  • splain/version.sbt — 51 commits
  • splain/src — 21 commits
  • src/main — 21 commits
  • core/src — 19 commits
  • splain/tests — 8 commits
  • .github/workflows — 7 commits
  • project/build.scala — 7 commits
  • project/project — 7 commits
  • project/build.properties — 6 commits
  • dev/publish-all.sh — 3 commits
  • project/plugins.sbt — 3 commits
  • buildSrc/build — 2 commits
  • buildSrc/src — 2 commits
  • core/build.gradle.kts — 2 commits
  • splain/test-src — 2 commits
  • (repo) — 1 commit
  • src/test — 1 commit
  • tests/bounds — 1 commit
  • tests/byname — 1 commit

Notable commits

  • fix: 2nd attempt to fix JVM compatibility of the published artefact
  • fix: Fix SerializingLift.asCode for case objects
  • fix: TryCompile.UseReflect implementation was defective and won't report error, this has been fixed (#92)
  • fix: clean up versions, fix byname implicits
  • fix: first commit, demonstrating the following bug
  • fix: fix 2 disabled unit tests caused by using empty annotationMsg
  • fix: fix 2.10 compat
  • fix: fix NPE in bounds check
  • fix: fix a bug where control characters in implicit annotation wasn't parsed properly
  • fix: fix a compile warning by adding slf4j-simple
  • fix: fix all warning
  • fix: fix compat for Set.from
  • fix: fix compat instructions, bump
  • fix: fix for #100 (https://github.com/tek/splain/issues/100) (#107)
  • fix: fix for defective unlinked info at the end of DivergingImplicit error (#90)
  • fix: fix nonconformant bounds test
  • fix: fix pattern for RefinedType
  • fix: fix readme version
  • fix: fix specs
  • fix: fix version matcher in readme again
  • …and 280 more

Architecture

  • 0 containers · 1 bounded contexts · 0 dependency edges (baseline)

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

Survey your own repository

tek/splain 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 20 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 60c92b5e6422738087a1ed65c70e41a9ebefbc27 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-b51f968c9b10.