RFCs for changes to Rust
This report summarizes scanner evidence for rust-lang/rfcs, a Markdown project with 6,626 GitHub stars. SynthScan examined 204,287 lines of code across 662 source files, recording 136 pattern matches distributed across 2 syntactic categories. The legacy adjusted pattern signal is 0.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.
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.
Can maintainers explain intent, assumptions, and trade-offs? 135 finding(s).
Are imports declared and package/API names verified? 0 finding(s).
Are wrappers, guards, and repeated structures necessary? 1 finding(s).
Which changes need focused human review? 136 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 136 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | text/1194-set-recovery.md | 61 | // At this point, the user enters commands and receives output like: | COMMENT |
| LOW | text/2788-standard-lazy-types.md | 61 | COMMENT | |
| LOW | text/3467-unsafe-pinned.md | 221 | /// However, even if you define your type like `pub struct Wrapper(UnsafePinned<...>)`, | COMMENT |
| LOW | text/3467-unsafe-pinned.md | 281 | pub fn get_mut_pinned(self: Pin<&mut Self>) -> *mut T { | COMMENT |
| LOW | text/1696-discriminant.md | 41 | /// in the middle, or (in the case of a C-like enum) if explicitly set discriminants are changed. | COMMENT |
| LOW | text/1845-shared-from-slice.md | 181 | /// The allocated space of the `Vec<T>` is not reused, | COMMENT |
| LOW | text/1845-shared-from-slice.md | 221 | /// # Examples | COMMENT |
| LOW | text/1845-shared-from-slice.md | 241 | /// | COMMENT |
| LOW | text/1845-shared-from-slice.md | 261 | } | COMMENT |
| LOW | text/1845-shared-from-slice.md | 281 | /// assert_eq!(rc.len(), arr.len()); // The length is the same. | COMMENT |
| LOW | text/1845-shared-from-slice.md | 301 | slice_to_rc(slice, |p| p, <[T]>::copy_from_slice) | COMMENT |
| LOW | text/1845-shared-from-slice.md | 321 | /// assert_eq!(rc.as_ref(), slice); // The elements match. | COMMENT |
| LOW | text/1845-shared-from-slice.md | 341 | /// #![feature(ptr_eq)] | COMMENT |
| LOW | text/1845-shared-from-slice.md | 361 | /// | COMMENT |
| LOW | text/1845-shared-from-slice.md | 401 | /// | COMMENT |
| LOW | text/1328-global-panic-handler.md | 41 | those values in the future. | COMMENT |
| LOW | text/1892-uninitialized-uninhabited.md | 201 | } | COMMENT |
| LOW | text/1974-global-allocators.md | 101 | /// Windows, for example. | COMMENT |
| LOW | text/3458-unsafe-fields.md | 421 | /// | COMMENT |
| LOW | text/3458-unsafe-fields.md | 481 | type Target = T; | COMMENT |
| LOW | text/3458-unsafe-fields.md | 501 | impl<T> DerefMut for UniqueArc<T> { | COMMENT |
| LOW | text/1574-more-api-documentation-conventions.md | 81 | COMMENT | |
| LOW | text/1574-more-api-documentation-conventions.md | 161 | //! slices, not ranges for sub-slices. | COMMENT |
| LOW | text/1574-more-api-documentation-conventions.md | 181 | /// | COMMENT |
| LOW | text/1574-more-api-documentation-conventions.md | 201 | /// | COMMENT |
| LOW | text/1574-more-api-documentation-conventions.md | 221 | /// # Safety | COMMENT |
| LOW | text/1574-more-api-documentation-conventions.md | 241 | } | COMMENT |
| LOW | text/1574-more-api-documentation-conventions.md | 261 | /// | COMMENT |
| LOW | text/1574-more-api-documentation-conventions.md | 461 | COMMENT | |
| LOW | text/1574-more-api-documentation-conventions.md | 521 | Below is a full crate, with documentation following these rules. I am loosely basing | COMMENT |
| LOW | text/1574-more-api-documentation-conventions.md | 541 | //! | COMMENT |
| LOW | text/1574-more-api-documentation-conventions.md | 561 | /// let x = &5; | COMMENT |
| LOW | text/1574-more-api-documentation-conventions.md | 581 | pub fn ref_slice<T>(s: &T) -> &[T] { | COMMENT |
| LOW | text/1574-more-api-documentation-conventions.md | 601 | /// ``` | COMMENT |
| LOW | text/1574-more-api-documentation-conventions.md | 621 | //! | COMMENT |
| LOW | text/1574-more-api-documentation-conventions.md | 641 | /// let slice = option::ref_slice(x); | COMMENT |
| LOW | text/0503-prelude-stabilization.md | 41 | // Boxes are a ubiquitous type in Rust used for representing an allocation with | COMMENT |
| LOW | text/0503-prelude-stabilization.md | 61 | // for the inclusion of these traits in the prelude. | COMMENT |
| LOW | text/0503-prelude-stabilization.md | 81 | // are all included in the prelude by default. Note, however, that the exact | COMMENT |
| LOW | text/0503-prelude-stabilization.md | 101 | // The `Option` type is one of Rust's most common and ubiquitous types, | COMMENT |
| LOW | text/0503-prelude-stabilization.md | 121 | COMMENT | |
| LOW | text/0503-prelude-stabilization.md | 181 | pub use ascii::{Ascii, AsciiCast, OwnedAsciiCast, AsciiStr}; | COMMENT |
| LOW | text/0503-prelude-stabilization.md | 201 | // Actual usage of the `Ordering` enumeration and its variants is quite rare in | COMMENT |
| LOW | text/0503-prelude-stabilization.md | 221 | COMMENT | |
| LOW | text/0503-prelude-stabilization.md | 241 | // This function is included in the prelude as a convenience function for the | COMMENT |
| LOW | text/2116-alloc-me-maybe.md | 241 | /// capacity is already sufficient. | COMMENT |
| LOW | text/3498-lifetime-capture-rules-2024.md | 561 | // `T`. Additionally, we have captured the lifetime `'x` using | COMMENT |
| LOW | text/3128-io-safety.md | 101 | // Construct a `File` from an arbitrary integer value. This type checks, | COMMENT |
| LOW | text/3834-export-visibility.md | 821 | COMMENT | |
| LOW | text/2592-futures.md | 201 | terms of global functions and state, on top of reference counted objects, or | COMMENT |
| LOW | text/2592-futures.md | 221 | pub data: *const (), | COMMENT |
| LOW | text/2592-futures.md | 241 | COMMENT | |
| LOW | text/2592-futures.md | 341 | /// - [`Poll::Ready(val)`] with the result `val` of this future if it | COMMENT |
| LOW | text/2592-futures.md | 361 | /// Futures alone are *inert*; they must be *actively* `poll`ed to make | COMMENT |
| LOW | text/1398-kinds-of-allocators.md | 1441 | /// | COMMENT |
| LOW | text/1398-kinds-of-allocators.md | 1481 | COMMENT | |
| LOW | text/1398-kinds-of-allocators.md | 1541 | Some(padded_size) => padded_size, | COMMENT |
| LOW | text/1398-kinds-of-allocators.md | 1581 | } | COMMENT |
| LOW | text/1398-kinds-of-allocators.md | 1621 | /// Creates a layout describing the record for `self` followed by | COMMENT |
| LOW | text/1398-kinds-of-allocators.md | 1641 | pub unsafe fn repeat_unchecked(&self, n: usize) -> (Self, usize) { | COMMENT |
| 75 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | text/3935-Project-Goals-2026.md | 103 | match map.get_mut(&key) { // ──────────────────┐ 'r only needs to | CODE |