Skip to content
CAI
Software that uses CAICheck a score

j-mie6/parsley

66.9

Adequate · 20 September 2026

28.4k

lines of production code

Scala

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

Parsley is a cross-platform parser combinator library for Scala that supports JVM, JavaScript, and Native targets. It provides core tools for building parsers, including lexing, error reporting, and expression precedence handling. The system also includes a runtime debugger that allows users to inspect parser execution paths and results via debug trees and frontend interfaces.

How it got here

2017–2022 — Initial release and test coverage

12 changes.

This period established the Parsley parser combinator library for Scala with its initial v4.0.0 release, including cross-platform build infrastructure and core parsing features. It focused on comprehensive test coverage for lexer internals, tokenization, and error handling to ensure correctness across Scala versions and platforms.

2023 — debugger infrastructure and test coverage

6 changes.

This period focused on establishing the foundational infrastructure for a cross-platform runtime parser debugger, including exception handling abstractions and weak-keyed maps. Concurrently, significant effort was dedicated to expanding test coverage through property-based testing for internal data structures, token descriptions, and error handling, as well as verifying the deep-embedding visitor pattern.

Features

Initial implementation of cross-platform debugger infrastructure

This change introduces the foundational internal components for the new runtime parser debugger, specifically adding cross-platform abstractions for exception handling and weak-keyed maps. The diff adds \XException\ wrappers to normalize \UnsupportedOperationException\ and \IllegalStateException\ across JVM, Native, and JavaScript targets, and implements \XWeakMap\ to provide a consistent interface for weak references (using \WeakHashMap\ on JVM and the ECMA 6 \WeakMap\ on JS). It also includes platform-specific \XCollector\ implementations: a reflection-based collector for Scala 2 on the JVM, and dummy/no-op stubs for Scala 3 on the JVM and for JavaScript/Native targets where reflection is unavailable. These files establish the internal data structures and collection mechanisms required for the debugger feature.

(repo-wide) · high confidence

Initial repository setup and project configuration

The repository has been initialized with essential project files, including a BSD 3-Clause License, a Contributor Code of Conduct, and a comprehensive README documenting the Parsley parser combinator library for Scala (version 4.6.0) and its integration with cats. Build and development tooling is established via a new build.sbt, a scalastyle configuration for code quality checks, and a Code Climate configuration to exclude specific patterns like tests and generated code. Additionally, JVM options are set to allocate 4GB of heap space, and the .gitignore file is updated to exclude IDE-specific directories (IntelliJ, VS Code, Metals, Bloop) and build artifacts.

(repo-wide) · high confidence

Parsley parser library initial release (v4.0.0)

This change introduces the Parsley parser combinator library, providing a comprehensive set of tools for building parsers in Scala. The release includes core combinators for sequencing, branching, and mapping results, as well as specialized modules for handling character and string parsing, expression precedence tables, and token-based lexing. It also features robust error reporting with configurable error builders and labels, and ensures cross-version compatibility across Scala 2.12, 2.13, and 3 through dedicated compatibility layers.

parsley/shared/src/main · high confidence

Runtime parser debugger with debug tree and frontend support

This change introduces a runtime debugger for Parsley parsers, allowing users to inspect the execution path and results of a parse. It adds combinators like \attachDebugger\ and \attachWithFrontend\ to instrument parsers, which produce a \DebugTree\ representing the parser's execution. The debugger includes a \Collector\ utility to automatically map parser fields to names in the debug tree, and a \DebugFrontend\ interface for processing or visualizing the debug output. Internal components like \DebugContext\ and \ParseAttempt\ manage the state and details of parse attempts during execution.

parsley-debug/shared · high confidence

Behavioural changes

File parsing moved to Parsley extension on JVM/Native

On JVM and Native platforms, the \parseFile\ method is now available directly on \Parsley\ values via an implicit extension class in \PlatformSpecific\, replacing the previous \io.ParseFromIO\ class. The old \io\ object and its \parseFromFile\ method are deprecated as of version 4.5.0 and will be removed in 5.0.0. JS builds no longer include file I/O support, as indicated by the empty \PlatformSpecific\ class in the JS source tree.

parsley/jvm-native · high confidence

Test coverage

Added comprehensive test suite for Parsley parser combinators; Added property-based tests for the immutable Trie collection; Added property-based tests for token description generation and shrinking; Added test coverage for lexer internals and token descriptions; Added tests for internal error defunctionalization and hint handling; Added tests for lexer character, string, and escape sequence handling; Added tests for lexer name token parsing and optimization preservation; Added tests for numeric token parsing; Added tests for symbol tokenization and semantic preservation; Added tests for the LazyParsley visitor pattern; Added tests for token extractor error handling.

Dependencies

Initial build configuration with Scala 2.12, 2.13, and 3 support

The project now uses a new \build.sbt\ file to manage its build process, establishing support for Scala versions 2.12.18, 2.13.16, and 3.3.1. This configuration introduces cross-compilation for JVM, JavaScript, and Native platforms, sets the base version to 4.6, and includes test dependencies on ScalaTest 3.2.19 and ScalaCheck 3.2.19.0.

(dependencies) · high confidence

New SBT build system with sbt-typelevel and Laika documentation site

The project has migrated to a new SBT build infrastructure, upgrading \sbt\ to version 1.11.3 and adopting the \sbt-typelevel\ plugin (version 0.8.0) along with \sbt-typelevel-site\. This change introduces a new documentation site built with Laika and Helium, featuring a custom landing page, versioned navigation, and specific styling. The build also adds support for Scala Native (0.5.6) and Scala.js (1.16.0), integrates MiMA for binary compatibility checks via \mima.scala\, and includes plugins for code style, dependency updates, and coverage.

project · 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 67.

Lenses

  • Code Health 94
  • Architecture 100
  • Maturity 66
  • Readiness 61
  • Security 65

Changes since last survey

  • 300 commits — 265 feature/other, 35 fixes

By area

  • parsley/shared — 100 commits
  • (root) — 78 commits
  • src/main — 72 commits
  • .github/workflows — 17 commits
  • (repo) — 10 commits
  • src/test — 6 commits
  • docs/tutorial — 4 commits
  • docs/api-guide — 3 commits
  • docs/cheatsheet.md — 2 commits
  • project/ParsleySitePlugin.scala — 2 commits
  • .github/PULL_REQUEST_TEMPLATE — 1 commit
  • docs/guide — 1 commit
  • docs/laika — 1 commit
  • js/src — 1 commit
  • jvm/src — 1 commit
  • parsley-debug/shared — 1 commit

Notable commits

  • fix: Added fix for #242 for 4.5
  • fix: Another MiMA fix
  • fix: Documentation fixes [skip ci]
  • fix: Documentation fixes [skip ci]
  • fix: Documentation link fix
  • fix: Fixed #95 by excluding case-insensitive Specific nodes from tablification (#96)
  • fix: Fixed Scala 3 errors
  • fix: Fixed a ridiculous multi-line string bug in the error messages
  • fix: Fixed accidentally removed assumption
  • fix: Fixed bug where mutual recursion would be unwound
  • fix: Fixed build badge according to https://github.com/badges/shields/issues/8671 [skip ci]
  • fix: Fixed caret not appearing for EOF (#181)
  • fix: Fixed missing cases in hint translation
  • fix: Fixed missing wider caret for unexpectedless trivial errors (#137)
  • fix: Fixed overwide carets in trivial errors, hints from adjusting unexpected size to 0, and hints from getting reborn during an iterative combinator (#174)
  • fix: Fixed the skipping so that it never skips pull-request CI [no release]
  • fix: Fixed up the operations
  • fix: Hint fix (#108)
  • fix: Label bug (#72)
  • fix: Refactor/fix-warnings (#203)
  • …and 280 more

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

Survey your own repository

j-mie6/parsley 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 de25f0ecd2d58dd967769e34409b7a03eb7a4996 — 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.