AI Slop Code Risk Monitor

rust-lang/rust-analyzer

SlopCodeMonitor badge for rust-lang/rust-analyzer Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

A Rust compiler front-end for IDEs

1.7 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for rust-lang/rust-analyzer, a Rust project with 16,959 GitHub stars. SynthScan examined 615,350 lines of code across 1790 source files, recording 962 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 1.7 (Low 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.

1.7
Adjusted Signal
1.7
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
17.0K
Stars
Rust
Language
615.4K
Lines of Code
1.8K
Files
962
Pattern Hits
2026-10-31
Scan Date
0.00
HC Hit Rate

Risk Review · Payload v1

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

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 7.5/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.5/100 · LOW

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

Agent Over-Engineering Ratio 0.4/100 · LOW

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

PR Review Velocity Impact 8.2/100 · LOW

Which changes need focused human review? 962 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 6HIGH 1MEDIUM 15LOW 940

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 962 distinct pattern matches across 11 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 Block909 hits · 902 pts
SeverityFileLineSnippetContext
LOWCargo.toml201# subjectiveCOMMENT
LOWcrates/hir-def/src/item_scope.rs141 unnamed_consts: ThinVec<ConstId>,COMMENT
LOWcrates/hir-def/src/import_map.rs21COMMENT
LOWcrates/hir-def/src/dyn_map.rs1//! This module defines a `DynMap` -- a container for heterogeneous maps.COMMENT
LOWcrates/hir-def/src/expr_store.rs121 /// top level expression, it will not be listed in here.COMMENT
LOWcrates/hir-def/src/expr_store.rs141 /// // this repeat expr is anon const #1, and *only it* appears in this list.COMMENT
LOWcrates/hir-def/src/expr_store.rs301COMMENT
LOWcrates/hir-def/src/lib.rs1//! `hir_def` crate contains everything between macro expansion and typeCOMMENT
LOWcrates/hir-def/src/lib.rs541#[derive(PartialOrd, Ord)]COMMENT
LOWcrates/hir-def/src/lib.rs1181pub trait HasModule {COMMENT
LOWcrates/hir-def/src/lib.rs1221// N: ItemTreeModItemNode,COMMENT
LOWcrates/hir-def/src/lib.rs1481}COMMENT
LOWcrates/hir-def/src/lib.rs1501// which means the trait itself may still be flyimported but its methods won't, andCOMMENT
LOWcrates/hir-def/src/hir.rs1//! This module describes hir-level representation of expressions.COMMENT
LOWcrates/hir-def/src/item_tree.rs1//! A simplified AST that only contains items.COMMENT
LOWcrates/hir-def/src/item_tree.rs21//! resolution has not yet been performed. `ItemTree`s are per-file, while rustc's AST and HIR areCOMMENT
LOWcrates/hir-def/src/nameres.rs1//! This module implements import-resolution/macro expansion algorithm.COMMENT
LOWcrates/hir-def/src/nameres.rs21//!COMMENT
LOWcrates/hir-def/src/nameres.rs161COMMENT
LOWcrates/hir-def/src/nameres.rs181 /// The prelude module for this crate. This either comes from an importCOMMENT
LOWcrates/hir-def/src/attrs.rs1//! Attributes for anything that is not name resolution.COMMENT
LOWcrates/hir-def/src/resolver.rs581 /// tells for each ident what it resolves to.COMMENT
LOWcrates/hir-def/src/resolver.rs601 /// The shadowing is accounted for: inCOMMENT
LOWcrates/hir-def/src/macro_expansion_tests/mbe.rs541// STMT_LIST@7..17COMMENT
LOWcrates/hir-def/src/macro_expansion_tests/mbe.rs661// L_CURLY@9..10 "{"COMMENT
LOWcrates/hir-def/src/macro_expansion_tests/mbe.rs741 a = 10+1;COMMENT
LOWcrates/hir-def/src/macro_expansion_tests/mbe.rs761// BIN_EXPR@9..13COMMENT
LOWcrates/hir-def/src/macro_expansion_tests/mbe.rs1741 K::(C("0"));COMMENT
LOWcrates/hir-def/src/macro_expansion_tests/mbe.rs1761// IDENT@6..7 "K"COMMENT
LOWcrates/hir-def/src/macro_expansion_tests/proc_macros.rs1//! Tests for user-defined procedural macros.COMMENT
LOWcrates/hir-def/src/macro_expansion_tests/proc_macros.rs41 #![cfg_attr(true, doc = "123...", attr2)]COMMENT
LOWcrates/hir-def/src/macro_expansion_tests/proc_macros.rs61 );COMMENT
LOW…es/hir-def/src/macro_expansion_tests/mbe/regression.rs941// PARAM_LIST@8..10COMMENT
LOW…es/hir-def/src/macro_expansion_tests/mbe/regression.rs961// GENERIC_ARG_LIST@22..28COMMENT
LOWcrates/hir-def/src/attrs/docs.rs41}COMMENT
LOWcrates/hir-def/src/attrs/docs.rs241 self.push_doc_lines(doc, Some(offset_in_ast), comment_kind, indent);COMMENT
LOWcrates/hir-def/src/expr_store/body.rs61/// An item body together with the mapping from syntax nodes to HIR expressionCOMMENT
LOWcrates/hir-def/src/expr_store/path.rs61 /// This specifies whether the args contain a Self type as the firstCOMMENT
LOWcrates/hir-def/src/expr_store/lower.rs1101 body: ExprId,COMMENT
LOWcrates/hir-def/src/expr_store/lower.rs2381 /// }COMMENT
LOWcrates/hir-def/src/expr_store/lower.rs2421 syntax_ptr,COMMENT
LOWcrates/hir-def/src/expr_store/lower.rs2521 syntax_ptr,COMMENT
LOWcrates/hir-def/src/nameres/collector.rs241 unresolved_imports: Vec<ImportDirective>,COMMENT
LOWcrates/hir-def/src/nameres/collector.rs601 }COMMENT
LOWcrates/hir-def/src/nameres/collector.rs661 /// mod m { macro_rules! foo { () => {} } }COMMENT
LOWcrates/hir-def/src/nameres/collector.rs701COMMENT
LOWcrates/hir-def/src/nameres/path_resolution.rs1//! This module implements a function to resolve a path `foo::bar::baz` to aCOMMENT
LOWcrates/hir-def/src/nameres/tests/incremental.rs321 "file_item_tree_query",COMMENT
LOWcrates/hir-def/src/nameres/tests/incremental.rs341// $0COMMENT
LOWcrates/hir-def/src/nameres/tests/incremental.rs461COMMENT
LOWcrates/hir-def/src/item_tree/attrs.rs121 // - If `self` and `other` are both `AttrsOrCfg::Enabled`, the result is a newCOMMENT
LOWcrates/base-db/src/input.rs81COMMENT
LOWcrates/base-db/src/input.rs381/// information needs to be recomputed.COMMENT
LOWcrates/base-db/src/input.rs501 pub data: BuiltCrateData,COMMENT
LOWcrates/base-db/src/input.rs981/// rust-analyzer will continue working OK in the presence of cycle,COMMENT
LOWcrates/hir-ty/src/variance.rs1//! Module for inferring the variance of type and lifetime parameters. See the [rustc dev guide]COMMENT
LOWcrates/hir-ty/src/specialization.rs21// cannot create a cycle, but a cycle handler is required nevertheless.COMMENT
LOWcrates/hir-ty/src/infer.rs1//! Type inference, i.e. the process of walking through the code and determiningCOMMENT
LOWcrates/hir-ty/src/infer.rs561///COMMENT
LOWcrates/hir-ty/src/infer.rs581/// Borrow(AutoBorrow::Ref) -> &[i32; 4],COMMENT
849 more matches not shown…
Hallucination Indicators6 hits · 60 pts
SeverityFileLineSnippetContext
CRITICALcrates/hir-ty/src/infer/coerce.rs1094 if !coerce.delegate.0.result.expr_adjustments.contains_key(&new) {CODE
CRITICALcrates/hir-ty/src/next_solver/infer/snapshot/fudge.rs186 let idx = vid.as_usize() - self.snapshot_vars.type_vars.0.start.as_usize();CODE
CRITICALcrates/hir-ty/src/next_solver/infer/snapshot/fudge.rs231 let idx = vid.index() - self.snapshot_vars.region_vars.0.start.index();CODE
CRITICALcrates/hir-ty/src/next_solver/infer/snapshot/fudge.rs247 let idx = vid.index() - self.snapshot_vars.const_vars.0.start.index();CODE
CRITICALcrates/hir-ty/src/lower/path.rs814 GenericParamId::ConstParamId(_) => self.ctx.ctx.types.consts.error.into(),CODE
CRITICALcrates/hir-ty/src/lower/path.rs815 GenericParamId::LifetimeParamId(_) => self.ctx.ctx.types.regions.error.into(),CODE
Hyper-Verbose Identifiers16 hits · 16 pts
SeverityFileLineSnippetContext
LOWeditors/code/src/commands.ts567function predicateEvaluationValidationMessage(CODE
LOWeditors/code/src/commands.ts614function viewFileUsingTextDocumentContentProvider(CODE
LOWeditors/code/src/commands.ts1197export function applySnippetWorkspaceEditCommand(_ctx: CtxInit): Cmd {CODE
LOWeditors/code/src/main.ts241function checkConflictingExtensions() {CODE
LOWeditors/code/src/toolchain.ts177async function getPathForExecutableWithEnv(CODE
LOWeditors/code/src/snippets.ts7export async function applySnippetWorkspaceEdit(CODE
LOWeditors/code/src/debug.ts410async function recompileTestFromDebuggingSession(session: vscode.DebugSession, ctx: Ctx) {CODE
LOWeditors/code/src/debug.ts432export function initializeDebugSessionTrackingAndRebuild(ctx: Ctx) {CODE
LOWeditors/code/src/client.ts372function assertIsCodeActionWithoutEditsAndCommands(CODE
LOWeditors/code/src/config.ts561function substituteVSCodeVariableInString(val: string): string {CODE
LOWeditors/code/src/new_project.ts84async function promptForNewProjectTemplate(): Promise<NewProjectKind | undefined> {CODE
LOWeditors/code/src/new_project.ts91async function promptForNewProjectParentFolder(): Promise<vscode.Uri | undefined> {CODE
LOWeditors/code/src/new_project.ts238export function determineNewProjectOpenAction(CODE
LOWeditors/code/src/new_project.ts255async function promptForNewProjectOpenAction(CODE
LOWeditors/code/src/new_project.ts284async function executeNewProjectOpenAction(CODE
LOWeditors/code/src/bootstrap.ts191async function hasToolchainFileWithRaDeclared(uri: vscode.Uri): Promise<boolean> {CODE
Decorative Section Separators5 hits · 15 pts
SeverityFileLineSnippetContext
MEDIUM⚡crates/ide/src/extend_selection.rs665 r#"fn main() { let x = "═$0═══════"; }"#,CODE
MEDIUM⚡crates/ide/src/extend_selection.rs667 r#""════════""#,CODE
MEDIUM⚡crates/ide/src/extend_selection.rs668 r#"let x = "════════";"#,CODE
MEDIUM⚡crates/ide/src/extend_selection.rs669 r#"{ let x = "════════"; }"#,CODE
MEDIUM⚡crates/ide/src/extend_selection.rs670 r#"fn main() { let x = "════════"; }"#,CODE
AI Slop Vocabulary6 hits · 14 pts
SeverityFileLineSnippetContext
MEDIUMcrates/hir-ty/src/next_solver/ty.rs353 // Definitely absolutely not copy.COMMENT
MEDIUMcrates/ide-assists/src/lib.rs40//! * Make assists robust. If the assist depends on results of type-inference tooCOMMENT
MEDIUMcrates/rust-analyzer/src/config.rs1012 /// [custom test harness](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#the-harness-field),COMMENT
LOWcrates/hir-expand/src/builtin/derive_macro.rs1202 // Regardless of the only type param being designed as `#[pointee]` or not, we can just use it as such.COMMENT
MEDIUMeditors/code/package-lock.json6159 "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",CODE
MEDIUMeditors/code/package.json3023 "markdownDescription": "Additional arguments to be passed through Cargo to launched tests, benchCODE
Excessive Try-Catch Wrapping8 hits · 10 pts
SeverityFileLineSnippetContext
LOWlib/smol_str/src/gdb_smolstr_printer.py32 except Exception:CODE
LOWlib/smol_str/src/gdb_smolstr_printer.py54 except Exception:CODE
LOWlib/smol_str/src/gdb_smolstr_printer.py71 except Exception as e:CODE
LOWlib/smol_str/src/gdb_smolstr_printer.py78 except Exception as e:CODE
LOWlib/smol_str/src/gdb_smolstr_printer.py97 except Exception as e:CODE
LOWlib/smol_str/src/gdb_smolstr_printer.py117 except Exception:CODE
MEDIUMlib/smol_str/src/gdb_smolstr_printer.py29def _read_utf8(mem):CODE
MEDIUMlib/smol_str/src/gdb_smolstr_printer.py51def to_string(self):CODE
Modern AI Meta-Vocabulary3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUM…s/ide-assists/src/handlers/add_missing_impl_members.rs19// Adds scaffold for required impl members.COMMENT
MEDIUM…s/ide-assists/src/handlers/add_missing_impl_members.rs64// Adds scaffold for overriding default impl members.COMMENT
MEDIUMlib/lsp-server/src/lib.rs1//! A language server scaffold, exposing a synchronous crossbeam-channel based API.COMMENT
Slop Phrases5 hits · 8 pts
SeverityFileLineSnippetContext
LOWcrates/hir-ty/src/infer.rs1636 // don't forget to handle them here.COMMENT
LOWcrates/ide/src/typing.rs36// Don't forget to add new trigger characters to `server_capabilities` in `caps.rs`.COMMENT
LOWcrates/ide/src/syntax_highlighting/tags.rs44// Don't forget to adjust the feature description in crates/ide/src/syntax_highlighting.rs.COMMENT
LOW…s/src/handlers/convert_named_struct_to_tuple_struct.rs60 // are to lift this limitation, don't forget to make `edit_struct_def()` consider macro filesCOMMENT
LOW.vscode/launch.json105 // Don't forget to set `debug = 2` in `Cargo.toml` before building the serverCOMMENT
Empty Error Handlers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHlib/smol_str/src/gdb_smolstr_printer.py117except Exception:CODE
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWCargo.toml30# Set this to 1 or 2 to get more useful backtraces in debugger.COMMENT
LOW.github/workflows/ci.yaml364 # Check if all jobs that we depend on (in the needs array) were successful (or have been skipped).COMMENT
Structural Annotation Overuse1 hit · 2 pts
SeverityFileLineSnippetContext
LOWcrates/syntax/src/ast/token_ext.rs346 // NOTE: This method should only be used for highlighting ranges. The unescapedCOMMENT