AI Slop Code RIsk Monitor

dtolnay/proc-macro-workshop

Learn to write Rust procedural macros  [Rust Latam conference, Montevideo Uruguay, March 2019]

24.6 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for dtolnay/proc-macro-workshop, a Rust project with 4,864 GitHub stars. SynthScan examined 2,840 lines of code across 71 source files, recording 62 pattern matches distributed across 2 syntactic categories. The legacy adjusted pattern signal is 24.6 (Elevated 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.

24.6
Adjusted Signal
24.6
Raw Pattern Score
100%
Time Factor
2026-08-06
Last Push
4.9K
Stars
Rust
Language
2.8K
Lines of Code
71
Files
62
Pattern Hits
2026-10-12
Scan Date
0.00
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 64.0/100 · HIGH

Can maintainers explain intent, assumptions, and trade-offs? 58 finding(s).

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

Are imports declared and package/API names verified? 0 finding(s).

Agent Over-Engineering Ratio 19.0/100 · LOW

Are wrappers, guards, and repeated structures necessary? 4 finding(s).

PR Review Velocity Impact 70.8/100 · HIGH

Which changes need focused human review? 62 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

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.

Severity Breakdown

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.

CRITICAL 0HIGH 0MEDIUM 4LOW 58

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 62 distinct pattern matches across 2 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.

Over-Commented Block58 hits · 58 pts
SeverityFileLineSnippetContext
LOWmain.rs1// Write code here.COMMENT
LOWseq/tests/05-repeat-section.rs1// So far our macro has repeated the entire loop body. This is not sufficientCOMMENT
LOWseq/tests/05-repeat-section.rs21// enum Interrupt {COMMENT
LOWseq/tests/03-expand-four-errors.rs1// Now construct the generated code! Produce the output TokenStream by repeatingCOMMENT
LOWseq/tests/01-parse-header.rs1// This test looks for a function-like macro with the right name to exist. ForCOMMENT
LOWseq/tests/02-parse-body.rs1// The macro invocation in the previous test case contained an empty loop bodyCOMMENT
LOWseq/tests/08-ident-span.rs1// The procedural macro API uses a type called Span to attach source locationCOMMENT
LOWseq/tests/09-interaction-with-macrorules.rs1// Suppose we wanted a seq invocation in which the upper bound is given by theCOMMENT
LOWseq/tests/progress.rs1#[test]COMMENT
LOWseq/tests/04-paste-ident.rs1// One of the big things callers will want to do with the sequential indices NCOMMENT
LOWbitfield/tests/07-optional-discriminant.rs1// For bitfield use limited to a single binary, such as a space optimization forCOMMENT
LOWbitfield/tests/01-specifier-types.rs1// Our design for #[bitfield] (see the readme) involves marker types B1 throughCOMMENT
LOWbitfield/tests/01-specifier-types.rs21// Physical = 0,COMMENT
LOWbitfield/tests/01-specifier-types.rs41// Create a trait called bitfield::Specifier with an associated constant BITS,COMMENT
LOWbitfield/tests/06-enums.rs1// For some bitfield members, working with them as enums will make more sense toCOMMENT
LOWbitfield/tests/06-enums.rs21// explicit discriminant that is an integer literal. We will relax thisCOMMENT
LOWbitfield/tests/03-accessors.rs1// Generate getters and setters that manipulate the right range of bitsCOMMENT
LOWbitfield/tests/progress.rs1#[test]COMMENT
LOWbitfield/tests/12-accessors-edge.rs1// This test is equivalent to 03-accessors but with some fields spanning acrossCOMMENT
LOWbitfield/tests/10-bits-attribute.rs1// One downside of the way we have implemented enum support so far is that itCOMMENT
LOWbitfield/tests/04-multiple-of-8bits.rs1// Make it so that a bitfield with a size not a multiple of 8 bits will notCOMMENT
LOWbitfield/tests/04-multiple-of-8bits.rs21//COMMENT
LOWbitfield/tests/02-storage.rs1// Write an attribute macro that replaces the struct in its input with a byteCOMMENT
LOWbitfield/src/lib.rs1// Crates that have the "proc-macro" crate type are only allowed to exportCOMMENT
LOWsorted/tests/02-not-enum.rs1// The #[sorted] macro is only defined to work on enum types, so this is a testCOMMENT
LOWsorted/tests/03-out-of-order.rs1// At this point we have an enum and we need to check whether the variantsCOMMENT
LOWsorted/tests/06-pattern-path.rs1// When we checked enum definitions for sortedness, it was sufficient to compareCOMMENT
LOWsorted/tests/05-match-expr.rs1// Get ready for a challenging step -- this test case is going to be a muchCOMMENT
LOWsorted/tests/05-match-expr.rs21//COMMENT
LOWsorted/tests/05-match-expr.rs41// before.COMMENT
LOWsorted/tests/progress.rs1#[test]COMMENT
LOWsorted/tests/01-parse-enum.rs1// This test checks that an attribute macro #[sorted] exists and is importedCOMMENT
LOWbuilder/tests/06-optional-field.rs1// Some fields may not always need to be specified. Typically these would beCOMMENT
LOWbuilder/tests/06-optional-field.rs21// In the context of the current test case, all of this means that there isn'tCOMMENT
LOWbuilder/tests/06-optional-field.rs41// AngleBracketedGenericArguments {COMMENT
LOWbuilder/tests/09-redefined-prelude-types.rs1// Does your macro still work if some of the standard library prelude item namesCOMMENT
LOWbuilder/tests/02-create-builder.rs1// Have the macro produce a struct for the builder state, and a `builder`COMMENT
LOWbuilder/tests/02-create-builder.rs21// }COMMENT
LOWbuilder/tests/progress.rs1#[test]COMMENT
LOWbuilder/tests/08-unrecognized-attribute.rs1// Ensure that your macro reports a reasonable error message when the callerCOMMENT
LOWbuilder/tests/07-repeated-field.rs1// The std::process::Command builder handles args in a way that is potentiallyCOMMENT
LOWbuilder/tests/07-repeated-field.rs21// If the new one-at-a-time builder method is given the same name as the field,COMMENT
LOWbuilder/tests/03-call-setters.rs1// Generate methods on the builder for setting a value of each of the structCOMMENT
LOWbuilder/tests/01-parse.rs1// This test looks for a derive macro with the right name to exist. For now theCOMMENT
LOWbuilder/tests/04-call-build.rs1// Generate a `build` method to go from builder to original struct.COMMENT
LOWdebug/tests/07-associated-type.rs1// This test case covers one more heuristic that is often worth incorporatingCOMMENT
LOWdebug/tests/04-type-parameter.rs1// Figure out what impl needs to be generated for the Debug impl of Field<T>.COMMENT
LOWdebug/tests/08-escape-hatch.rs1// There are some cases where no heuristic would be sufficient to infer theCOMMENT
LOWdebug/tests/progress.rs1#[test]COMMENT
LOWdebug/tests/05-phantom-data.rs1// Some generic types implement Debug even when their type parameters do not.COMMENT
LOWdebug/tests/05-phantom-data.rs21// in other application-specific special cases.COMMENT
LOWdebug/tests/03-custom-format.rs1// Look for a field attribute #[debug = "..."] on each field. If present, find aCOMMENT
LOWdebug/tests/02-impl-debug.rs1// Emit an implementation of std::fmt::Debug for a basic struct with namedCOMMENT
LOWdebug/tests/01-parse.rs1// This test looks for a derive macro with the right name to exist. For now theCOMMENT
LOWdebug/tests/06-bound-trouble.rs1// This test case should not require any code change in your macro if you haveCOMMENT
LOWdebug/tests/06-bound-trouble.rs21// T: Debug,COMMENT
LOWdebug/tests/06-bound-trouble.rs41//COMMENT
LOWdebug/tests/06-bound-trouble.rs61// -->COMMENT
Decorative Section Separators4 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUMbitfield/tests/03-accessors.rs6// ╟───────────────╫───────────────╫───────────────╫───────────────╢COMMENT
MEDIUMbitfield/tests/03-accessors.rs8// ╟─╫─────╫───────╫───────────────────────────────────────────────╢COMMENT
MEDIUMbitfield/tests/12-accessors-edge.rs7// ╟───────────────╫───────────────╫───────────────╫───────────────╢COMMENT
MEDIUMbitfield/tests/12-accessors-edge.rs9// ╟─────────────────╫───────────╫─────────────────────────╫───────╢COMMENT