tek/splain
56.7
Adequate · 20 September 2026
1.9k
lines of production code
Scala
primary language
1
measurement over time
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.