An async ORM for Rust
This report summarizes scanner evidence for tokio-rs/toasty, a Rust project with 3,233 GitHub stars. SynthScan examined 197,930 lines of code across 1053 source files, recording 1189 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 6.2 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 1089 finding(s).
Are imports declared and package/API names verified? 79 finding(s).
Are wrappers, guards, and repeated structures necessary? 21 finding(s).
Which changes need focused human review? 1189 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1189 distinct pattern matches across 8 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | compose.yaml | 1 | # Docker Compose file to start all database management systems supported by Toasty. | COMMENT |
| LOW | crates/toasty-cli/src/config.rs | 1 | use crate::migration::MigrationConfig; | COMMENT |
| LOW | crates/toasty-cli/src/config.rs | 21 | /// MigrationConfig::new() | COMMENT |
| LOW | crates/toasty-cli/src/lib.rs | 1 | #![warn(missing_docs)] | COMMENT |
| LOW | crates/toasty-cli/src/lib.rs | 21 | //! read and write the TOML history that tracks which migrations exist. | COMMENT |
| LOW | crates/toasty-cli/src/lib.rs | 41 | pub use migration::{ | COMMENT |
| LOW | crates/toasty-cli/src/migration/config.rs | 1 | use serde::{Deserialize, Serialize}; | COMMENT |
| LOW | crates/toasty-cli/src/migration/config.rs | 21 | /// .prefix_style(MigrationPrefixStyle::Timestamp); | COMMENT |
| LOW | crates/toasty-cli/src/migration/config.rs | 41 | /// Style of migration file prefixes | COMMENT |
| LOW | crates/toasty-cli/src/migration/config.rs | 61 | /// # Examples | COMMENT |
| LOW | crates/toasty-cli/src/migration/generate.rs | 21 | /// the most recent snapshot. If there are differences, generates a SQL | COMMENT |
| LOW | …es/toasty-driver-integration-suite-macros/src/parse.rs | 41 | /// A `Capability` states what a backend can do, and the engine reads it to | COMMENT |
| LOW | crates/toasty-core/tests/stmt_eval_project.rs | 241 | expr.eval(ConstInput::new()).unwrap(), | COMMENT |
| LOW | crates/toasty-core/tests/stmt_eval_unimplemented.rs | 1 | //! Tests for expression variants that either: | COMMENT |
| LOW | crates/toasty-core/src/stmt.rs | 1 | //! Statement AST types for Toasty's query compilation pipeline. | COMMENT |
| LOW | crates/toasty-core/src/stmt.rs | 341 | pub mod visit; | COMMENT |
| LOW | crates/toasty-core/src/error.rs | 41 | use invalid_type_conversion::InvalidTypeConversion; | COMMENT |
| LOW | crates/toasty-core/src/error.rs | 61 | /// | COMMENT |
| LOW | crates/toasty-core/src/error.rs | 81 | /// This is used by [`Error::context`] to accept either an `Error` directly or | COMMENT |
| LOW | crates/toasty-core/src/error.rs | 121 | ReadOnlyTransaction(ReadOnlyTransaction), | COMMENT |
| LOW | crates/toasty-core/src/error.rs | 141 | /// Panics if `consequent` already has a cause attached. | COMMENT |
| LOW | crates/toasty-core/src/lib.rs | 1 | //! Core types and abstractions for the Toasty ORM. | COMMENT |
| LOW | crates/toasty-core/src/lib.rs | 41 | /// Schema definitions spanning the app layer, database layer, and the mapping | COMMENT |
| LOW | crates/toasty-core/src/lib.rs | 61 | /// return Err(toasty_core::Error::invalid_schema("name must not be empty")); | COMMENT |
| LOW | crates/toasty-core/src/schema.rs | 1 | //! Schema representation for Toasty, split into three layers. | COMMENT |
| LOW | crates/toasty-core/src/schema.rs | 41 | mod name; | COMMENT |
| LOW | crates/toasty-core/src/schema.rs | 61 | /// for (id, model) in &schema.app.models { | COMMENT |
| LOW | crates/toasty-core/src/schema.rs | 81 | /// | COMMENT |
| LOW | crates/toasty-core/src/schema.rs | 101 | /// | COMMENT |
| LOW | crates/toasty-core/src/migration.rs | 1 | use crate::{Error, Result}; | COMMENT |
| LOW | crates/toasty-core/src/migration.rs | 21 | /// ``` | COMMENT |
| LOW | crates/toasty-core/src/migration.rs | 41 | #[derive(Debug, Clone, Serialize, Deserialize)] | COMMENT |
| LOW | crates/toasty-core/src/migration.rs | 61 | /// | COMMENT |
| LOW | crates/toasty-core/src/migration.rs | 121 | /// | COMMENT |
| LOW | crates/toasty-core/src/driver.rs | 1 | //! Database driver interface for Toasty. | COMMENT |
| LOW | crates/toasty-core/src/driver.rs | 21 | //! | COMMENT |
| LOW | crates/toasty-core/src/driver.rs | 41 | //! the remaining idle connections and drops any that also fail. Any | COMMENT |
| LOW | crates/toasty-core/src/driver.rs | 81 | COMMENT | |
| LOW | crates/toasty-core/src/driver.rs | 101 | /// and consult it on every operation. | COMMENT |
| LOW | crates/toasty-core/src/driver.rs | 121 | /// assert!(capability.sql()); | COMMENT |
| LOW | crates/toasty-core/src/driver.rs | 141 | /// this is `Some(1)` for the in-memory SQLite driver which cannot be pooled. | COMMENT |
| LOW | crates/toasty-core/src/driver.rs | 161 | /// # Examples | COMMENT |
| LOW | crates/toasty-core/src/driver.rs | 181 | /// mappings) is an engine concept that a driver never consults. | COMMENT |
| LOW | crates/toasty-core/src/driver.rs | 201 | /// to the idle set. A `false` result causes the slot to be dropped | COMMENT |
| LOW | crates/toasty-core/src/driver.rs | 221 | /// When `pool_pre_ping` is enabled, the pool also calls it on every | COMMENT |
| LOW | crates/toasty-core/src/macros.rs | 1 | /// Constructs a [`stmt::Path`](crate::stmt::Path) from a dot-separated | COMMENT |
| LOW | crates/toasty-core/src/stmt/expr_all_op.rs | 1 | use super::{BinaryOp, Expr}; | COMMENT |
| LOW | crates/toasty-core/src/stmt/source_table.rs | 1 | use crate::stmt::{ExprArg, Source, SourceTableId, TableFactor}; | COMMENT |
| LOW | crates/toasty-core/src/stmt/func_json_extract.rs | 1 | use super::{Expr, ExprFunc, Type}; | COMMENT |
| LOW | crates/toasty-core/src/stmt/join.rs | 1 | use super::{Expr, SourceTableId}; | COMMENT |
| LOW | crates/toasty-core/src/stmt/join.rs | 21 | pub table: SourceTableId, | COMMENT |
| LOW | crates/toasty-core/src/stmt/func_count.rs | 1 | use super::{Expr, ExprFunc}; | COMMENT |
| LOW | crates/toasty-core/src/stmt/expr_func.rs | 1 | use super::{Expr, FuncCount, FuncJsonExtract, FuncLastInsertId}; | COMMENT |
| LOW | crates/toasty-core/src/stmt/limit.rs | 1 | use super::Expr; | COMMENT |
| LOW | crates/toasty-core/src/stmt/limit.rs | 21 | /// Cursor-based pagination parameters. | COMMENT |
| LOW | crates/toasty-core/src/stmt/expr_set_op.rs | 1 | use super::{ExprSet, SetOp}; | COMMENT |
| LOW | crates/toasty-core/src/stmt/expr_reference.rs | 1 | use crate::{ | COMMENT |
| LOW | crates/toasty-core/src/stmt/expr_reference.rs | 21 | /// A reference to a column in a database-level statement. | COMMENT |
| LOW | crates/toasty-core/src/stmt/expr_reference.rs | 41 | /// | COMMENT |
| LOW | crates/toasty-core/src/stmt/num.rs | 1 | //! Numeric type support for [`Value`], [`Expr`], and [`Type`]. | COMMENT |
| 1021 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | README.md | 80 | name: "John Doe", | CODE |
| LOW | …tion-suite/src/tests/embed_enum_string_discriminant.rs | 151 | number: "555-0100".into(), | CODE |
| LOW | …tion-suite/src/tests/embed_enum_string_discriminant.rs | 160 | number: "555-0100".into() | CODE |
| LOW | …tion-suite/src/tests/embed_enum_string_discriminant.rs | 209 | number: "555-0100".into(), | CODE |
| LOW | …tion-suite/src/tests/embed_enum_string_discriminant.rs | 218 | number: "555-0100".into() | CODE |
| LOW | …tion-suite/src/tests/embed_enum_string_discriminant.rs | 265 | number: "555-0200".into(), | CODE |
| LOW⚡ | …tion-suite/src/tests/embed_enum_string_discriminant.rs | 283 | number: "555-0200".into() | CODE |
| LOW⚡ | …tion-suite/src/tests/embed_enum_string_discriminant.rs | 291 | number: "555-0300".into(), | CODE |
| LOW⚡ | …tion-suite/src/tests/embed_enum_string_discriminant.rs | 300 | number: "555-0300".into() | CODE |
| LOW | …river-integration-suite/src/tests/crud_batch_create.rs | 209 | .item(User::create().email("user@example.com")) | CODE |
| LOW | …river-integration-suite/src/tests/crud_batch_create.rs | 210 | .item(User::create().email("user@example.com")) | CODE |
| LOW | …r-integration-suite/src/tests/relation_has_one_crud.rs | 8 | let user = User::create().name("Jane Doe").exec(&mut db).await?; | CODE |
| LOW | …r-integration-suite/src/tests/relation_has_one_crud.rs | 302 | let user = User::create().name("Jane Doe").exec(&mut db).await?; | CODE |
| LOW | …-driver-integration-suite/src/tests/embed_enum_data.rs | 186 | number: "555-1234".to_string(), | CODE |
| LOW | …-driver-integration-suite/src/tests/embed_enum_data.rs | 204 | number: "555-1234".to_string() | CODE |
| LOW | …-driver-integration-suite/src/tests/embed_enum_data.rs | 472 | email: "user@example.com".to_string(), | CODE |
| LOW | …-driver-integration-suite/src/tests/embed_enum_data.rs | 480 | street: "123 Main St".to_string(), | CODE |
| LOW | …-driver-integration-suite/src/tests/embed_enum_data.rs | 491 | email: "user@example.com".to_string() | CODE |
| LOW | …-driver-integration-suite/src/tests/embed_enum_data.rs | 500 | street: "123 Main St".to_string(), | CODE |
| LOW | …ion-suite/src/tests/embed_enum_filter_variant_field.rs | 40 | number: "555-1234".to_string(), | CODE |
| LOW | …driver-integration-suite/src/tests/embed_enum_index.rs | 121 | number: "555-1234".to_string(), | CODE |
| LOW | …integration-suite/src/tests/select_projection_embed.rs | 30 | street: "123 Main St".to_string(), | CODE |
| LOW | …sty-driver-integration-suite/src/tests/embed_struct.rs | 162 | street: "123 Main St".to_string(), | CODE |
| LOW | …sty-driver-integration-suite/src/tests/embed_struct.rs | 170 | assert_eq!(found.address.street, "123 Main St"); | CODE |
| LOW | …sty-driver-integration-suite/src/tests/embed_struct.rs | 258 | ("USA", "Alice", "123 Main St", "Seattle", "98101"), | CODE |
| LOW | …sty-driver-integration-suite/src/tests/embed_struct.rs | 602 | street: "123 Main St".to_string(), | CODE |
| LOW | …sty-driver-integration-suite/src/tests/embed_struct.rs | 611 | street: "123 Main St", | CODE |
| LOW | …sty-driver-integration-suite/src/tests/embed_struct.rs | 624 | street: "123 Main St", | CODE |
| LOW | …sty-driver-integration-suite/src/tests/embed_struct.rs | 632 | street: "123 Main St", | CODE |
| LOW | …sty-driver-integration-suite/src/tests/embed_struct.rs | 648 | street: "123 Main St", | CODE |
| LOW | …sty-driver-integration-suite/src/tests/embed_struct.rs | 656 | street: "123 Main St", | CODE |
| LOW⚡ | …sty-driver-integration-suite/src/tests/embed_struct.rs | 1010 | street: "123 Main St".to_string(), | CODE |
| LOW⚡ | …sty-driver-integration-suite/src/tests/embed_struct.rs | 1020 | street: "123 Main St", | CODE |
| LOW⚡ | …sty-driver-integration-suite/src/tests/embed_struct.rs | 1030 | street: "123 Main St", | CODE |
| LOW | …sty-driver-integration-suite/src/tests/embed_struct.rs | 1099 | street: "123 Main St".to_string(), | CODE |
| LOW | …sty-driver-integration-suite/src/tests/embed_struct.rs | 1121 | street: "123 Main St", | CODE |
| LOW | …sty-driver-integration-suite/src/tests/embed_struct.rs | 1141 | street: "123 Main St", | CODE |
| LOW | …sty-driver-integration-suite/src/tests/embed_struct.rs | 1161 | street: "123 Main St", | CODE |
| LOW | …sty-driver-integration-suite/src/tests/embed_struct.rs | 1179 | street: "123 Main St".to_string(), | CODE |
| LOW | …sty-driver-integration-suite/src/tests/embed_struct.rs | 1196 | street: "123 Main St", | CODE |
| LOW | …sty-driver-integration-suite/src/tests/embed_struct.rs | 1213 | street: "123 Main St", | CODE |
| LOW⚡ | …oasty-driver-integration-suite/src/tests/crud_basic.rs | 400 | .email("user@example.com") | CODE |
| LOW⚡ | …oasty-driver-integration-suite/src/tests/crud_basic.rs | 401 | .name("John Doe") | CODE |
| LOW⚡ | …oasty-driver-integration-suite/src/tests/crud_basic.rs | 409 | user.update().name("Jane Doe").exec(&mut db).await?; | CODE |
| LOW⚡ | …oasty-driver-integration-suite/src/tests/crud_basic.rs | 411 | assert_eq!("Jane Doe", user.name); | CODE |
| LOW⚡ | …oasty-driver-integration-suite/src/tests/crud_basic.rs | 427 | email: "user@example.com", | CODE |
| LOW⚡ | …oasty-driver-integration-suite/src/tests/crud_basic.rs | 428 | name: "John Doe", | CODE |
| LOW⚡ | …oasty-driver-integration-suite/src/tests/crud_basic.rs | 437 | .email("user@example.com") | CODE |
| LOW⚡ | …oasty-driver-integration-suite/src/tests/crud_basic.rs | 438 | .name("Jane Doe") | CODE |
| LOW⚡ | …oasty-driver-integration-suite/src/tests/crud_basic.rs | 442 | assert_eq!("user@example.com", user.email); | CODE |
| LOW⚡ | …oasty-driver-integration-suite/src/tests/crud_basic.rs | 443 | assert_eq!("Jane Doe", user.name); | CODE |
| LOW⚡ | …oasty-driver-integration-suite/src/tests/crud_basic.rs | 461 | .name("John Doe") | CODE |
| LOW⚡ | …oasty-driver-integration-suite/src/tests/crud_basic.rs | 468 | .name("Jane Doe") | CODE |
| LOW⚡ | …oasty-driver-integration-suite/src/tests/crud_basic.rs | 473 | assert_eq!("Jane Doe", user.name); | CODE |
| LOW⚡ | …oasty-driver-integration-suite/src/tests/crud_basic.rs | 477 | assert_eq!("Jane Doe", user.name); | CODE |
| LOW | …oasty-driver-integration-suite/src/tests/crud_basic.rs | 498 | let user = User::create().name("John Doe").exec(&mut db).await?; | CODE |
| LOW | …y-driver-integration-suite/src/tests/deferred_embed.rs | 123 | number: "555-0100".to_string(), | CODE |
| LOW | …y-driver-integration-suite/src/tests/deferred_embed.rs | 150 | assert_eq!("555-0100", number); | CODE |
| LOW | …y-driver-integration-suite/src/tests/deferred_embed.rs | 168 | number: "555-0100".to_string(), | CODE |
| LOW | …river-integration-suite/src/tests/embed_enum_filter.rs | 19 | number: "555-1234".to_string(), | CODE |
| 15 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/toasty/src/engine/index/tests.rs | 294 | // ── key_values extraction ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/toasty/src/engine/lower/include.rs | 32 | //! └────────────────────────────────── └── enum → process_enum_arms | COMMENT |
| MEDIUM | tests/tests/dynamodb.rs | 105 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/tests/dynamodb.rs | 119 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/tests/dynamodb.rs | 121 | // ── Base table tests (composite partition + sort key) ──────────────────────── | COMMENT |
| MEDIUM | tests/tests/dynamodb.rs | 240 | // ── GSI tests (non-unique index on a UUID-keyed model) ─────────────────────── | COMMENT |
| MEDIUM | scripts/claude-triage-pr.sh | 5 | # ------------ | COMMENT |
| MEDIUM⚡ | scripts/claude-triage-pr.sh | 51 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/claude-triage-pr.sh | 53 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/claude-triage-pr.sh | 56 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/claude-triage-pr.sh | 63 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/claude-triage-pr.sh | 83 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/claude-triage-pr.sh | 87 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/claude-triage-pr.sh | 136 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/claude-triage-pr.sh | 139 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/claude-triage-pr.sh | 162 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/claude-triage-pr.sh | 164 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/claude-triage-pr.sh | 177 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/claude-triage-pr.sh | 180 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/claude-triage-pr.sh | 199 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/claude-triage-pr.sh | 201 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | crates/toasty/src/engine/plan/statement.rs | 1083 | let column = self.planner.engine.schema.db.column(column_id); | CODE |
| CRITICAL | crates/toasty/src/engine/plan/statement.rs | 1100 | let table = self.planner.engine.schema.db.table(target.table); | CODE |
| CRITICAL | crates/toasty/src/engine/plan/statement.rs | 2349 | let table = self.planner.engine.schema.db.table(table); | CODE |
| CRITICAL | crates/toasty/src/engine/plan/statement.rs | 2350 | let primary_key = self.planner.engine.schema.db.index(table.primary_key.index); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/toasty-driver-postgresql/src/lib.rs | 279 | // Step 1: Connect to the target DB and create a temp DB | COMMENT |
| LOW | crates/toasty-driver-postgresql/src/lib.rs | 291 | // Step 2: Connect to the temp DB, drop and recreate the target | COMMENT |
| LOW | crates/toasty-driver-postgresql/src/lib.rs | 312 | // Step 3: Connect back to the target and clean up the temp DB | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/toasty-driver-postgresql/src/lib.rs | 279 | // Step 1: Connect to the target DB and create a temp DB | COMMENT |
| LOW | crates/toasty-driver-postgresql/src/lib.rs | 291 | // Step 2: Connect to the temp DB, drop and recreate the target | COMMENT |
| LOW | crates/toasty-driver-postgresql/src/lib.rs | 312 | // Step 3: Connect back to the target and clean up the temp DB | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/toasty/src/engine/plan/statement.rs | 696 | // If targeting SQL, leverage the SQL query engine to handle most of the rewrite details. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/labels.yml | 3 | # This file is the source of truth for repository labels. It is synced by | COMMENT |