A post-modern modal text editor.
This report summarizes scanner evidence for helix-editor/helix, a Rust project with 46,748 GitHub stars. SynthScan examined 518,991 lines of code across 667 source files, recording 578 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 1.6 (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? 449 finding(s).
Are imports declared and package/API names verified? 5 finding(s).
Are wrappers, guards, and repeated structures necessary? 126 finding(s).
Which changes need focused human review? 578 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 578 distinct pattern matches across 10 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 |
|---|---|---|---|---|
| MEDIUM | runtime/themes/modus_vivendi.toml | 7 | # ------------------- | COMMENT |
| MEDIUM | runtime/themes/modus_vivendi.toml | 60 | # -------------- | COMMENT |
| MEDIUM | runtime/themes/flynt_light.toml | 4 | # ── Syntax ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | runtime/themes/flynt_light.toml | 45 | # ── Markup ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | runtime/themes/flynt_light.toml | 70 | # ── Diff ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | runtime/themes/flynt_light.toml | 77 | # ── Diagnostics ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | runtime/themes/flynt_light.toml | 92 | # ── UI ──────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | runtime/themes/flynt_light.toml | 139 | # ── Palette ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | runtime/themes/ashen.toml | 2 | # ------------------- | COMMENT |
| MEDIUM⚡ | runtime/themes/ashen.toml | 6 | # ------------------- | COMMENT |
| MEDIUM⚡ | runtime/themes/ashen.toml | 13 | # ------------------- | COMMENT |
| MEDIUM | runtime/themes/ashen.toml | 84 | # -------------- | COMMENT |
| MEDIUM | runtime/themes/flynt_dark.toml | 4 | # ── Syntax ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | runtime/themes/flynt_dark.toml | 45 | # ── Markup ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | runtime/themes/flynt_dark.toml | 70 | # ── Diff ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | runtime/themes/flynt_dark.toml | 77 | # ── Diagnostics ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | runtime/themes/flynt_dark.toml | 92 | # ── UI ──────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | runtime/themes/flynt_dark.toml | 139 | # ── Palette ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | runtime/themes/atlas-ragnarok.toml | 10 | # ─── Syntax ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | runtime/themes/atlas-ragnarok.toml | 90 | # ─── UI ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | runtime/themes/atlas-ragnarok.toml | 145 | # ─── Palette ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | runtime/themes/neonotte84.toml | 10 | # --------------------------- | COMMENT |
| MEDIUM | runtime/themes/neonotte84.toml | 14 | # ----------------- | COMMENT |
| MEDIUM⚡ | runtime/themes/ataraxia.toml | 4 | # ------------------- | COMMENT |
| MEDIUM⚡ | runtime/themes/ataraxia.toml | 6 | # ------------------- | COMMENT |
| MEDIUM⚡ | runtime/themes/ataraxia.toml | 8 | # ------------------- | COMMENT |
| MEDIUM | runtime/themes/catppuccin_mocha.toml | 3 | # ------------------- | COMMENT |
| MEDIUM | runtime/themes/catppuccin_mocha.toml | 70 | # -------------- | COMMENT |
| MEDIUM | runtime/themes/sidra.toml | 9 | # =========================== | COMMENT |
| MEDIUM | runtime/themes/sidra.toml | 11 | # =========================== | COMMENT |
| MEDIUM | runtime/themes/sidra.toml | 93 | # =========================== | COMMENT |
| MEDIUM | runtime/themes/sidra.toml | 95 | # =========================== | COMMENT |
| MEDIUM | runtime/themes/sidra.toml | 161 | # =========================== | COMMENT |
| MEDIUM | runtime/themes/sidra.toml | 163 | # =========================== | COMMENT |
| MEDIUM | runtime/themes/modus_operandi.toml | 7 | # ------------------- | COMMENT |
| MEDIUM | runtime/themes/modus_operandi.toml | 60 | # -------------- | COMMENT |
| MEDIUM | runtime/themes/neonotte.toml | 7 | # ------------------- | COMMENT |
| MEDIUM | runtime/themes/neonotte.toml | 58 | # -------------- | COMMENT |
| MEDIUM | runtime/themes/sunset.toml | 6 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/themes/sunset.toml | 56 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | runtime/themes/sunset.toml | 84 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | book/src/guides/indent.md | 38 | matches!(some_hero, Hero { // ←─────────────────╮ | CODE |
| MEDIUM⚡ | book/src/guides/indent.md | 41 | sure: true, // │ ╰───── cursor ├─ traversal | CODE |
| MEDIUM⚡ | book/src/guides/indent.md | 42 | soon: true, // ╰──────── new line inserted │ start node | CODE |
| MEDIUM⚡ | book/src/guides/indent.md | 45 | // ╰───────────────────────────────────────────────╯ | COMMENT |
| MEDIUM | book/src/guides/indent.md | 62 | } // ←──────────────────────────────────────────────╯ | CODE |
| MEDIUM⚡ | book/src/guides/indent.md | 119 | // ├───────────────────────╮ indent level | COMMENT |
| MEDIUM⚡ | book/src/guides/indent.md | 120 | // @indent ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄ | COMMENT |
| MEDIUM⚡ | book/src/guides/indent.md | 124 | // ├───────────────────────┼─────┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄ | COMMENT |
| MEDIUM⚡ | book/src/guides/indent.md | 128 | })}; // ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄ | CODE |
| MEDIUM⚡ | book/src/guides/indent.md | 130 | } //╰┼┴──────────────────────────────────────────────┴┄┄┄┄┄┄┄┄┄┄┄┄┄┄ | CODE |
| MEDIUM⚡ | book/src/guides/indent.md | 199 | # │ ╰──────╯ │ │ | COMMENT |
| MEDIUM⚡ | book/src/guides/indent.md | 200 | # ╰─────────────────────╯ │ | COMMENT |
| MEDIUM⚡ | book/src/guides/indent.md | 209 | ) # ←─────────────────────────────────────────╯ | CODE |
| MEDIUM⚡ | book/src/guides/indent.md | 237 | self.is_soon = soon # │ │ ←───────────────╯ | CODE |
| MEDIUM⚡ | book/src/guides/indent.md | 239 | # │ ╰──────╯ │ | COMMENT |
| MEDIUM⚡ | book/src/guides/indent.md | 240 | # ╰─────────────────────╯ | COMMENT |
| MEDIUM | book/src/guides/indent.md | 271 | #←────────── where cursor should go on new line | COMMENT |
| MEDIUM⚡ | book/src/guides/indent.md | 335 | # │ ╰─────────────── start of map | COMMENT |
| MEDIUM⚡ | book/src/guides/indent.md | 336 | # ╰───────────────── start of list element | COMMENT |
| 64 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | helix-vcs/src/diff/line_cache.rs | 1 | //! This modules encapsulates a tiny bit of unsafe code that | COMMENT |
| LOW | helix-vcs/src/git/test.rs | 101 | COMMENT | |
| LOW | helix-loader/src/workspace_trust.rs | 1 | //! Workspace trust. | COMMENT |
| LOW | helix-loader/src/workspace_trust.rs | 21 | //! hash = sha256:abc123... | COMMENT |
| LOW | helix-loader/src/lib.rs | 161 | } | COMMENT |
| LOW | helix-loader/src/lib.rs | 181 | /// name = "toml" | COMMENT |
| LOW | helix-view/benches/texts/source_code.txt | 1 | // This sample is from Neovim's source code. | COMMENT |
| LOW | helix-view/benches/texts/source_code.txt | 21 | #include <stdbool.h> | COMMENT |
| LOW | helix-view/benches/texts/source_code.txt | 41 | #include "nvim/ex_cmds.h" | COMMENT |
| LOW | helix-view/benches/texts/source_code.txt | 61 | #include "nvim/garray.h" | COMMENT |
| LOW | helix-view/src/graphics.rs | 41 | // we could split this in 2 `if`s, | COMMENT |
| LOW | helix-view/src/graphics.rs | 221 | } | COMMENT |
| LOW | helix-view/src/graphics.rs | 241 | Rect { | COMMENT |
| LOW | helix-view/src/graphics.rs | 321 | } | COMMENT |
| LOW | helix-view/src/graphics.rs | 521 | /// Style let you control the main characteristics of the displayed elements. | COMMENT |
| LOW | helix-view/src/graphics.rs | 541 | /// Style::default().fg(Color::Yellow).remove_modifier(Modifier::ITALIC), | COMMENT |
| LOW | helix-view/src/graphics.rs | 561 | /// reset all properties until that point use [`Style::reset`]. | COMMENT |
| LOW | helix-view/src/graphics.rs | 641 | /// Changes the background color. | COMMENT |
| LOW | helix-view/src/graphics.rs | 661 | /// # use helix_view::graphics::{Color, Style}; | COMMENT |
| LOW | helix-view/src/graphics.rs | 681 | pub const fn underline_style(mut self, style: UnderlineStyle) -> Style { | COMMENT |
| LOW | helix-view/src/graphics.rs | 701 | self.sub_modifier.remove(modifier); | COMMENT |
| LOW | helix-view/src/graphics.rs | 721 | self.add_modifier.remove(modifier); | COMMENT |
| LOW | helix-view/src/tree.rs | 481 | // A child is not found. This could be because of either two scenarios | COMMENT |
| LOW | helix-view/src/keyboard.rs | 381 | /// Page down key. | COMMENT |
| LOW | helix-view/src/editor.rs | 181 | pub struct FilePickerConfig { | COMMENT |
| LOW | helix-view/src/editor.rs | 301 | /// Mouse support. Defaults to true. | COMMENT |
| LOW | helix-view/src/editor.rs | 321 | /// Automatic auto-completion, automatically pop up without user trigger. Defaults to true. | COMMENT |
| LOW | helix-view/src/editor.rs | 401 | /// confuse some file watching/hot reloading programs. Defaults to `true`. | COMMENT |
| LOW | helix-view/src/editor.rs | 621 | #[serde(default, rename_all = "kebab-case", deny_unknown_fields)] | COMMENT |
| LOW | helix-view/src/editor.rs | 1321 | pub last_completion: Option<CompleteAction>, | COMMENT |
| LOW | helix-view/src/document.rs | 261 | /// Inlay hints for a single `(Document, View)` combo. | COMMENT |
| LOW | helix-view/src/document.rs | 461 | // The documentation and implementation of this function should be up-to-date with | COMMENT |
| LOW | helix-view/src/document.rs | 481 | read_and_detect_encoding(reader, encoding, &mut buf)?; | COMMENT |
| LOW | helix-view/src/input.rs | 81 | /// of keys can be read easily. | COMMENT |
| LOW | helix-view/src/macros.rs | 1 | //! These are macros to make getting very nested fields in the `Editor` struct easier | COMMENT |
| LOW | helix-view/src/expansion.rs | 1 | use std::borrow::Cow; | COMMENT |
| LOW | helix-view/src/expansion.rs | 21 | #[derive(Debug, Clone, Copy, PartialEq, Eq)] | COMMENT |
| LOW | helix-view/src/view.rs | 161 | pub gutters: GutterConfig, | COMMENT |
| LOW | helix-view/src/view.rs | 661 | // match (start, end) { | COMMENT |
| LOW | helix-view/src/view.rs | 1121 | /// `JumpList::remove` dropped every entry belonging to a document (e.g. when | COMMENT |
| LOW | helix-view/src/view.rs | 1181 | let mut jumps = make(0); | COMMENT |
| LOW | helix-view/src/handlers/word_index.rs | 321 | .await | COMMENT |
| LOW | helix-lsp-types/src/folding_range.rs | 61 | pub struct FoldingRangeCapability { | COMMENT |
| LOW | helix-lsp-types/src/folding_range.rs | 81 | #[serde(skip_serializing_if = "Option::is_none")] | COMMENT |
| LOW | helix-lsp-types/src/folding_range.rs | 121 | /// The zero-based character offset from where the folded range starts. If not defined, defaults to the length of th | COMMENT |
| LOW | helix-lsp-types/src/request.rs | 261 | COMMENT | |
| LOW | helix-lsp-types/src/request.rs | 481 | /// The configuration section ask for is defined by the server and doesn’t necessarily need to correspond to | COMMENT |
| LOW | helix-lsp-types/src/lsif.rs | 61 | #[serde(rename_all = "camelCase")] | COMMENT |
| LOW | helix-lsp-types/src/lsif.rs | 81 | full_range: Range, | COMMENT |
| LOW | helix-lsp-types/src/document_diagnostic.rs | 121 | /// A diagnostic report with a full set of problems. | COMMENT |
| LOW | helix-lsp-types/src/document_diagnostic.rs | 181 | /// diagnostics in a file B which A depends on. An example of such a language is C/C++ where | COMMENT |
| LOW | helix-lsp-types/src/document_diagnostic.rs | 201 | /// | COMMENT |
| LOW | helix-lsp-types/src/document_diagnostic.rs | 241 | } | COMMENT |
| LOW | helix-lsp-types/src/document_link.rs | 41 | pub partial_result_params: PartialResultParams, | COMMENT |
| LOW | helix-lsp-types/src/color.rs | 101 | pub partial_result_params: PartialResultParams, | COMMENT |
| LOW | helix-lsp-types/src/lib.rs | 221 | COMMENT | |
| LOW | helix-lsp-types/src/lib.rs | 361 | /// The range at which the message applies. | COMMENT |
| LOW | helix-lsp-types/src/lib.rs | 381 | #[serde(skip_serializing_if = "Option::is_none")] | COMMENT |
| LOW | helix-lsp-types/src/lib.rs | 481 | lsp_enum! { | COMMENT |
| LOW | helix-lsp-types/src/lib.rs | 521 | /// A textual edit applicable to a text document. | COMMENT |
| 381 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | helix-term/src/handlers/completion.rs | 186 | let handle = cx.editor.handlers.completions.request_controller.restart(); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | helix-view/Cargo.toml | 14 | # Skip libtest benchmark harness, the benches use criterion. | COMMENT |
| MEDIUM | .cargo/config.toml | 6 | # specifying flags this way is more robust as they get merged | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/indent/python.py | 1 | CODE | |
| LOW | tests/indent/python.py | 2 | CODE | |
| LOW | tests/indent/python.py | 2 | CODE | |
| LOW | tests/query/highlights/python/constructs.py | 1 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/indent/python.py | 56 | CODE | |
| LOW | tests/indent/python.py | 64 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | runtime/themes/cyan_light.toml | 3 | # This theme has moved to jetbrains_cyan_light, make sure to update your configuration accordingly. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | helix-tui/src/backend/termina.rs | 329 | // Then request the current flags. We need to check if the terminal enabled | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | helix-term/src/commands.rs | 2094 | // TODO: implement a variant of that uses visual lines and respects virtual text | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/query/highlights/python/calls.py | 1 | def helper(): | CODE |