Terminal based IDE & text editor: easy, powerful and fast
This report presents the forensic synthetic code analysis of sinelaw/fresh, a Rust project with 7,858 GitHub stars. SynthScan v2.0 examined 781,991 lines of code across 1360 source files, recording 3526 pattern matches distributed across 19 syntactic categories. The overall adjusted score of 6.0 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 3526 distinct pattern matches across 19 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | Cargo.toml | 81 | COMMENT | |
| LOW | Cargo.toml | 101 | [profile.min-size] | COMMENT |
| LOW | crates/fresh-core/proptest-regressions/file_uri.txt | 1 | # Seeds for failure cases propance has generated in the past. It is | COMMENT |
| LOW | crates/fresh-core/src/display_width.rs | 1 | //! Display width calculation for Unicode text. | COMMENT |
| LOW | crates/fresh-core/src/file_explorer.rs | 41 | #[ts(export)] | COMMENT |
| LOW | crates/fresh-core/src/file_explorer.rs | 61 | /// Optional tooltip shown when hovering the trailing slot. | COMMENT |
| LOW | crates/fresh-core/src/file_explorer.rs | 81 | #[serde(default)] | COMMENT |
| LOW | crates/fresh-core/src/file_uri.rs | 461 | // %2f is lowercase hex for '/', but it appears within a segment (not a separator) | COMMENT |
| LOW | crates/fresh-core/src/config.rs | 21 | #[schemars(extend("x-display-field" = "/enabled"))] | COMMENT |
| LOW | crates/fresh-core/src/command.rs | 1 | use serde::{Deserialize, Serialize}; | COMMENT |
| LOW | crates/fresh-core/src/command.rs | 21 | pub description: String, | COMMENT |
| LOW | crates/fresh-core/src/command.rs | 41 | #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ts_rs::TS)] | COMMENT |
| LOW | crates/fresh-core/src/command.rs | 61 | /// plain `description` text — letting a plugin highlight a portion | COMMENT |
| LOW | crates/fresh-core/src/text_property.rs | 1 | //! Text properties for embedding metadata in text ranges | COMMENT |
| LOW | crates/fresh-core/src/text_property.rs | 61 | } | COMMENT |
| LOW | crates/fresh-core/src/text_property.rs | 101 | /// Start offset within the entry's text. See `unit`. | COMMENT |
| LOW | crates/fresh-core/src/text_property.rs | 121 | /// computing byte/char offsets for overlays themselves. The host | COMMENT |
| LOW | crates/fresh-core/src/text_property.rs | 141 | } | COMMENT |
| LOW | crates/fresh-core/src/text_property.rs | 161 | pub inline_overlays: Vec<InlineOverlay>, | COMMENT |
| LOW | crates/fresh-core/src/lib.rs | 61 | /// Unique identifier for a terminal session | COMMENT |
| LOW | crates/fresh-core/src/lib.rs | 81 | /// | COMMENT |
| LOW | crates/fresh-core/src/services.rs | 61 | /// Get the persistent data directory path (DirectoryContext::data_dir). | COMMENT |
| LOW | crates/fresh-core/src/hooks.rs | 121 | COMMENT | |
| LOW | crates/fresh-core/src/hooks.rs | 141 | /// can read the new label via `editor.getAuthorityLabel()`. | COMMENT |
| LOW | crates/fresh-core/src/hooks.rs | 221 | locations: Vec<LspLocation>, | COMMENT |
| LOW | crates/fresh-core/src/hooks.rs | 261 | MouseClick { | COMMENT |
| LOW | crates/fresh-core/src/hooks.rs | 321 | /// The language that failed | COMMENT |
| LOW | crates/fresh-core/src/hooks.rs | 341 | missing_servers: Vec<String>, | COMMENT |
| LOW | crates/fresh-core/src/hooks.rs | 381 | /// (like Orchestrator) use this to reconcile their per-session | COMMENT |
| LOW | crates/fresh-core/src/hooks.rs | 401 | ActiveWindowChanged { | COMMENT |
| LOW | crates/fresh-core/src/hooks.rs | 421 | /// Editor window that owns this terminal (matches `WindowId.0`). | COMMENT |
| LOW | crates/fresh-core/src/hooks.rs | 441 | /// Editor window that owned this terminal (matches `WindowId.0`). | COMMENT |
| LOW | crates/fresh-core/src/hooks.rs | 501 | /// A widget mounted via `MountWidgetPanel` emitted a semantic event. | COMMENT |
| LOW | crates/fresh-core/src/menu.rs | 41 | } | COMMENT |
| LOW | crates/fresh-core/src/menu.rs | 61 | checkbox: Option<String>, | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 1 | //! Plugin API: Safe interface for plugins to interact with the editor | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 21 | //! ``` | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 141 | #[serde(rename_all = "camelCase")] | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 361 | pub selection: Option<Range<usize>>, | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 401 | COMMENT | |
| LOW | crates/fresh-core/src/api.rs | 421 | /// sessions, the launch session, sessions created outside the | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 441 | /// *and* for dormant (not-yet-connected / disconnected) sessions, so | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 461 | /// Short human identity for the row (e.g. `deploy@build-01`, | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 481 | /// Whether the buffer has been modified | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 501 | /// Whether this tab was opened in "preview" (ephemeral) mode — true when | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 541 | COMMENT | |
| LOW | crates/fresh-core/src/api.rs | 561 | /// Left column offset (horizontal scroll) | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 581 | /// Buffer currently shown in this split. | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 601 | /// Ctrl held. | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 621 | #[ts(optional)] | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 641 | #[ts(export)] | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 701 | #[ts(export, rename_all = "camelCase")] | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 721 | #[serde(default)] | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 741 | /// share the bg's colour without repainting unrelated tokens. | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 781 | /// payload when the user picks the row. `kind` is an optional | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 861 | COMMENT | |
| LOW | crates/fresh-core/src/api.rs | 901 | #[serde(default)] | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 921 | pub remove_bg: Option<[u8; 3]>, | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 941 | /// Number of lines in old buffer | COMMENT |
| LOW | crates/fresh-core/src/api.rs | 961 | } | COMMENT |
| 2468 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/fresh-core/src/file_uri.rs | 222 | // ── Basic functionality ────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-core/src/file_uri.rs | 280 | // ── Percent-encoding edge cases ───────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-core/src/file_uri.rs | 366 | // ── Unicode ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-core/src/file_uri.rs | 405 | // ── lsp_types::Uri compatibility ──────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-core/src/file_uri.rs | 431 | // ── file_uri_to_path edge cases ───────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-core/src/file_uri.rs | 605 | // ── Windows verbatim (\\?\) path handling ───────────────── | COMMENT |
| MEDIUM | crates/fresh-core/src/file_uri.rs | 752 | // ── Property tests ────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-core/src/api.rs | 13 | //! ─────────── ──────────────────── | COMMENT |
| MEDIUM | crates/fresh-core/src/api.rs | 2125 | /// ╭─ Label ──────────────────╮ | COMMENT |
| MEDIUM | crates/fresh-core/src/api.rs | 2127 | /// ╰──────────────────────────╯ | COMMENT |
| MEDIUM | crates/fresh-core/src/api.rs | 5169 | // ── Tests for FromJs / IntoJs impls ──────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-core/src/api.rs | 6559 | // ── PluginApi dispatch / mutation tests ──────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/fresh-plugin-runtime/src/ts_export.rs | 512 | // ── lifecycle ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/fresh-plugin-runtime/src/ts_export.rs | 520 | // ── buffer lifecycle ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/fresh-plugin-runtime/src/ts_export.rs | 525 | // ── file I/O ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-plugin-runtime/src/ts_export.rs | 539 | // ── text edits ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-plugin-runtime/src/ts_export.rs | 564 | // ── cursor & viewport ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-plugin-runtime/src/ts_export.rs | 582 | // ── rendering ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/fresh-plugin-runtime/src/ts_export.rs | 607 | // ── commands ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/fresh-plugin-runtime/src/ts_export.rs | 613 | // ── prompts ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/fresh-plugin-runtime/src/ts_export.rs | 619 | // ── mouse ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/fresh-plugin-runtime/src/ts_export.rs | 624 | // ── LSP ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-plugin-runtime/src/ts_export.rs | 653 | // ── UI events ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/fresh-plugin-runtime/src/ts_export.rs | 667 | // ── PTY terminals (see crates/fresh-core/src/hooks.rs) ─────────────────── | COMMENT |
| MEDIUM⚡ | crates/fresh-plugin-runtime/src/ts_export.rs | 675 | // ── filesystem watching (watchPath plugin API) ──────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/fresh-plugin-runtime/src/ts_export.rs | 683 | // ── editor sessions (Orchestrator; see orchestrator-sessions-design.md) ──────── | COMMENT |
| MEDIUM⚡ | crates/fresh-plugin-runtime/src/ts_export.rs | 688 | // ── widget runtime ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …es/fresh-plugin-runtime/src/backend/quickjs_backend.rs | 831 | // ─── Helpers for the defineConfigX methods ──────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/asm-lsp.ts | 135 | // ── .asm-lsp.toml config offer ────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/live_grep.ts | 132 | // ── Scopes (Universal Search) ───────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/live_grep.ts | 188 | // ── Search modes ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/live_grep.ts | 260 | // ── Registry ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/live_grep.ts | 431 | // ── Built-in providers ────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/live_grep.ts | 643 | // ── Wiring ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/orchestrator.ts | 1196 | // ╭────────────────────────────────────╮ | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/orchestrator.ts | 1199 | // ╰────────────────────────────────────╯ | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/dashboard.ts | 4 | // ═════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/dashboard.ts | 42 | // ═════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/dashboard.ts | 95 | // ── Public section API ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/dashboard.ts | 198 | // ── Internal state ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/dashboard.ts | 237 | // ── Drawing primitives ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/dashboard.ts | 320 | // ── Sections (sentinel / placeholder factories) ──────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/dashboard.ts | 338 | // ── Section registry + DashboardContext factory ──────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/dashboard.ts | 449 | // ── Frame + section renderer ─────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/dashboard.ts | 609 | // ── Paint the buffer ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/dashboard.ts | 823 | // ── Data fetchers ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/dashboard.ts | 1446 | // ── Lifecycle ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/dashboard.ts | 1615 | // ── Editor event handlers ───────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/lib/fresh.d.ts | 3727 | // ── lifecycle ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/lib/fresh.d.ts | 3738 | // ── buffer lifecycle ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/lib/fresh.d.ts | 3748 | // ── file I/O ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/lib/fresh.d.ts | 3774 | // ── text edits ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/lib/fresh.d.ts | 3806 | // ── cursor & viewport ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/lib/fresh.d.ts | 3823 | // ── rendering ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/lib/fresh.d.ts | 3854 | // ── commands ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/lib/fresh.d.ts | 3868 | // ── prompts ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/lib/fresh.d.ts | 3886 | // ── mouse ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/lib/fresh.d.ts | 3900 | // ── LSP ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/lib/fresh.d.ts | 3939 | // ── UI events ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/lib/fresh.d.ts | 3972 | // ── PTY terminals (see crates/fresh-core/src/hooks.rs) ─────────────────── | COMMENT |
| 287 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | crates/fresh-editor/tests/focused_bug_test.rs | 78 | // Step 1: Enter | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/focused_bug_test.rs | 88 | // Step 2: Type "a0" | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/focused_bug_test.rs | 96 | // Step 3: Left | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/focused_bug_test.rs | 104 | // Step 4: Home | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/focused_bug_test.rs | 112 | // Step 5: Type "b" | COMMENT |
| LOW | …fresh-editor/tests/undo_redo_marker_roundtrip_tests.rs | 635 | // Step 1: Insert "XX" at 1 → "aXXbcdef" | COMMENT |
| LOW | …fresh-editor/tests/undo_redo_marker_roundtrip_tests.rs | 647 | // Step 2: Delete "de" at 5..7 → "aXXbcf" | COMMENT |
| LOW⚡ | …esh-editor/tests/semantic/migrated_marker_roundtrip.rs | 381 | // Step 1: type 'X' at cursor → "Xaa\nbb" | COMMENT |
| LOW⚡ | …esh-editor/tests/semantic/migrated_marker_roundtrip.rs | 382 | // Step 2: MoveLineDown of line 1 → "bb\nXaa" | COMMENT |
| LOW⚡ | …esh-editor/tests/semantic/migrated_marker_roundtrip.rs | 400 | // Step 1: type 'X' → "Xaa\nbb" | COMMENT |
| LOW⚡ | …esh-editor/tests/semantic/migrated_marker_roundtrip.rs | 409 | // Step 2: MoveLineDown → "bb\nXaa" | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 138 | // Step 1: default empty buffer. | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 141 | // Step 2: type "hello". | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 145 | // Step 3: Save As to a fresh path inside the temp project. | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 150 | // Step 4: type more text past the save point. | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 154 | // Step 5: Undo back to the save point. | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 185 | // Step 1: start empty. | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 187 | // Step 2: type "hello" — 5 InsertChar events. | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 190 | // Step 3: Save As. | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 202 | // Step 4: type " world" past the save point. | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 206 | // Step 5: Undo all the way back to empty (cap at 20 Undos — | COMMENT |
| LOW | crates/fresh-editor/tests/semantic/migrated_macros.rs | 72 | // Step 1: open register prompt. Step 2 (events): type | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/e2e/markdown_compose.rs | 202 | // Step 1: buffer edit. invalidate_layouts_for_buffer clears | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/e2e/markdown_compose.rs | 211 | // Step 2: semantic wait for the post-edit transient to clear. | COMMENT |
| LOW | …esh-editor/tests/e2e/issue_1574_wrapped_down_scroll.rs | 514 | // Step 1: navigate to the end of paragraph one ("... data as UTF-8."). | COMMENT |
| LOW | …esh-editor/tests/e2e/issue_1574_wrapped_down_scroll.rs | 526 | // Step 2: one Down — cursor should be on the empty separator line. | COMMENT |
| LOW | …esh-editor/tests/e2e/issue_1574_wrapped_down_scroll.rs | 546 | // Step 3: Ctrl+Up until the cursor is on the last visible row AND | COMMENT |
| LOW | …esh-editor/tests/e2e/issue_1574_wrapped_down_scroll.rs | 617 | // Step 4: THE TEST — press Down once and inspect the cursor's row. | COMMENT |
| LOW | …esh-editor/tests/e2e/issue_1574_wrapped_down_scroll.rs | 684 | // Step 1: navigate to end of paragraph one, then Down to the empty | COMMENT |
| LOW | …esh-editor/tests/e2e/issue_1574_wrapped_down_scroll.rs | 714 | // Step 2: Ctrl+Down pushes the viewport forward, moving the cursor's | COMMENT |
| LOW | …esh-editor/tests/e2e/issue_1574_wrapped_down_scroll.rs | 796 | // Step 3: press Up once. The cursor should move to paragraph one's | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/e2e/lsp_toggle_desync.rs | 211 | // Step 1: Open the test file (triggers didOpen) | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/e2e/lsp_toggle_desync.rs | 221 | // Step 2: Type some text (triggers didChange) | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/e2e/lsp_toggle_desync.rs | 230 | // Step 3: Toggle LSP OFF (Alt+T) | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/e2e/lsp_toggle_desync.rs | 240 | // Step 4: Edit while LSP is disabled - type more text | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/e2e/lsp_toggle_desync.rs | 244 | // Step 5: Toggle LSP back ON (Alt+T) | COMMENT |
| LOW | crates/fresh-editor/tests/e2e/tab_drag.rs | 812 | // Step 1: drag the first tab to the right edge to create a new split. | COMMENT |
| LOW | crates/fresh-editor/tests/e2e/tab_drag.rs | 834 | // Step 2: identify the new (right) split and pick a tab in the | COMMENT |
| LOW | crates/fresh-editor/tests/e2e/tab_drag.rs | 880 | // Step 3: drag the other tab onto the new split's tab bar. | COMMENT |
| LOW | crates/fresh-editor/tests/e2e/tab_drag.rs | 893 | // Step 4: type a character. Without the fix, this panics in | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 63 | // Step 1: Type some text to create buffers in the buffers vec | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 68 | // Step 2: Toggle comment on the current line -> creates a BulkEdit event | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 91 | // Step 4: Type more text after save. This creates a new Added(1) buffer | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 99 | // Step 5: Undo everything back past the BulkEdit. | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 152 | // Step 2: Indent selection (Tab) -> creates a BulkEdit | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 156 | // Step 3: Save | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 162 | // Step 4: Type after save (creates new buffers after consolidation) | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 167 | // Step 5: Undo everything | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 211 | // Step 1: Toggle comment (BulkEdit) | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 220 | // Step 2: Save -> consolidate_after_save() replaces buffers | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 226 | // Step 3: Undo -> should restore original content | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 259 | // Step 1: Move line down (Alt+Down) - this is a BulkEdit | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 269 | // Step 2: Save | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 275 | // Step 3: Undo -> should restore original content | COMMENT |
| LOW | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 79 | // Step 3: Save the file -> consolidate_after_save() replaces self.buffers | COMMENT |
| LOW | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 141 | // Step 1: Select multiple lines | COMMENT |
| LOW⚡ | …s/fresh-editor/tests/e2e/undo_redo_marker_roundtrip.rs | 491 | // Step 1: Type "X" at start → "Xaa\nbb" | COMMENT |
| LOW⚡ | …s/fresh-editor/tests/e2e/undo_redo_marker_roundtrip.rs | 496 | // Step 2: MoveLineDown (BulkEdit) → should swap lines | COMMENT |
| LOW | crates/fresh-editor/tests/e2e/sessions.rs | 56 | // Step 2: createSession / setActiveSession / closeSession lifecycle. | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/e2e/menu_bar.rs | 669 | // Step 1: Menu bar should be visible initially (default) | COMMENT |
| 167 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | crates/fresh-editor/tests/focused_bug_test.rs | 78 | // Step 1: Enter | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/focused_bug_test.rs | 88 | // Step 2: Type "a0" | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/focused_bug_test.rs | 96 | // Step 3: Left | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/focused_bug_test.rs | 104 | // Step 4: Home | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/focused_bug_test.rs | 112 | // Step 5: Type "b" | COMMENT |
| LOW | …fresh-editor/tests/undo_redo_marker_roundtrip_tests.rs | 635 | // Step 1: Insert "XX" at 1 → "aXXbcdef" | COMMENT |
| LOW | …fresh-editor/tests/undo_redo_marker_roundtrip_tests.rs | 647 | // Step 2: Delete "de" at 5..7 → "aXXbcf" | COMMENT |
| LOW⚡ | …esh-editor/tests/semantic/migrated_marker_roundtrip.rs | 381 | // Step 1: type 'X' at cursor → "Xaa\nbb" | COMMENT |
| LOW⚡ | …esh-editor/tests/semantic/migrated_marker_roundtrip.rs | 382 | // Step 2: MoveLineDown of line 1 → "bb\nXaa" | COMMENT |
| LOW⚡ | …esh-editor/tests/semantic/migrated_marker_roundtrip.rs | 400 | // Step 1: type 'X' → "Xaa\nbb" | COMMENT |
| LOW⚡ | …esh-editor/tests/semantic/migrated_marker_roundtrip.rs | 409 | // Step 2: MoveLineDown → "bb\nXaa" | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 138 | // Step 1: default empty buffer. | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 141 | // Step 2: type "hello". | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 145 | // Step 3: Save As to a fresh path inside the temp project. | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 150 | // Step 4: type more text past the save point. | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 154 | // Step 5: Undo back to the save point. | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 185 | // Step 1: start empty. | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 187 | // Step 2: type "hello" — 5 InsertChar events. | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 190 | // Step 3: Save As. | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 202 | // Step 4: type " world" past the save point. | COMMENT |
| LOW⚡ | …resh-editor/tests/semantic/migrated_undo_save_point.rs | 206 | // Step 5: Undo all the way back to empty (cap at 20 Undos — | COMMENT |
| LOW | crates/fresh-editor/tests/semantic/migrated_macros.rs | 72 | // Step 1: open register prompt. Step 2 (events): type | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/e2e/markdown_compose.rs | 202 | // Step 1: buffer edit. invalidate_layouts_for_buffer clears | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/e2e/markdown_compose.rs | 211 | // Step 2: semantic wait for the post-edit transient to clear. | COMMENT |
| LOW | …esh-editor/tests/e2e/issue_1574_wrapped_down_scroll.rs | 514 | // Step 1: navigate to the end of paragraph one ("... data as UTF-8."). | COMMENT |
| LOW | …esh-editor/tests/e2e/issue_1574_wrapped_down_scroll.rs | 526 | // Step 2: one Down — cursor should be on the empty separator line. | COMMENT |
| LOW | …esh-editor/tests/e2e/issue_1574_wrapped_down_scroll.rs | 546 | // Step 3: Ctrl+Up until the cursor is on the last visible row AND | COMMENT |
| LOW | …esh-editor/tests/e2e/issue_1574_wrapped_down_scroll.rs | 617 | // Step 4: THE TEST — press Down once and inspect the cursor's row. | COMMENT |
| LOW | …esh-editor/tests/e2e/issue_1574_wrapped_down_scroll.rs | 684 | // Step 1: navigate to end of paragraph one, then Down to the empty | COMMENT |
| LOW | …esh-editor/tests/e2e/issue_1574_wrapped_down_scroll.rs | 714 | // Step 2: Ctrl+Down pushes the viewport forward, moving the cursor's | COMMENT |
| LOW | …esh-editor/tests/e2e/issue_1574_wrapped_down_scroll.rs | 796 | // Step 3: press Up once. The cursor should move to paragraph one's | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/e2e/lsp_toggle_desync.rs | 211 | // Step 1: Open the test file (triggers didOpen) | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/e2e/lsp_toggle_desync.rs | 221 | // Step 2: Type some text (triggers didChange) | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/e2e/lsp_toggle_desync.rs | 230 | // Step 3: Toggle LSP OFF (Alt+T) | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/e2e/lsp_toggle_desync.rs | 240 | // Step 4: Edit while LSP is disabled - type more text | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/e2e/lsp_toggle_desync.rs | 244 | // Step 5: Toggle LSP back ON (Alt+T) | COMMENT |
| LOW | crates/fresh-editor/tests/e2e/tab_drag.rs | 812 | // Step 1: drag the first tab to the right edge to create a new split. | COMMENT |
| LOW | crates/fresh-editor/tests/e2e/tab_drag.rs | 834 | // Step 2: identify the new (right) split and pick a tab in the | COMMENT |
| LOW | crates/fresh-editor/tests/e2e/tab_drag.rs | 880 | // Step 3: drag the other tab onto the new split's tab bar. | COMMENT |
| LOW | crates/fresh-editor/tests/e2e/tab_drag.rs | 893 | // Step 4: type a character. Without the fix, this panics in | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 63 | // Step 1: Type some text to create buffers in the buffers vec | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 68 | // Step 2: Toggle comment on the current line -> creates a BulkEdit event | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 91 | // Step 4: Type more text after save. This creates a new Added(1) buffer | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 99 | // Step 5: Undo everything back past the BulkEdit. | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 152 | // Step 2: Indent selection (Tab) -> creates a BulkEdit | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 156 | // Step 3: Save | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 162 | // Step 4: Type after save (creates new buffers after consolidation) | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 167 | // Step 5: Undo everything | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 211 | // Step 1: Toggle comment (BulkEdit) | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 220 | // Step 2: Save -> consolidate_after_save() replaces buffers | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 226 | // Step 3: Undo -> should restore original content | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 259 | // Step 1: Move line down (Alt+Down) - this is a BulkEdit | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 269 | // Step 2: Save | COMMENT |
| LOW⚡ | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 275 | // Step 3: Undo -> should restore original content | COMMENT |
| LOW | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 79 | // Step 3: Save the file -> consolidate_after_save() replaces self.buffers | COMMENT |
| LOW | …es/fresh-editor/tests/e2e/undo_bulk_edit_after_save.rs | 141 | // Step 1: Select multiple lines | COMMENT |
| LOW⚡ | …s/fresh-editor/tests/e2e/undo_redo_marker_roundtrip.rs | 491 | // Step 1: Type "X" at start → "Xaa\nbb" | COMMENT |
| LOW⚡ | …s/fresh-editor/tests/e2e/undo_redo_marker_roundtrip.rs | 496 | // Step 2: MoveLineDown (BulkEdit) → should swap lines | COMMENT |
| LOW | crates/fresh-editor/tests/e2e/sessions.rs | 56 | // Step 2: createSession / setActiveSession / closeSession lifecycle. | COMMENT |
| LOW⚡ | crates/fresh-editor/tests/e2e/menu_bar.rs | 669 | // Step 1: Menu bar should be visible initially (default) | COMMENT |
| 161 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/fresh-core/src/api.rs | 1264 | /// Currently we isolate by plugin name, but we may want a more robust approach | COMMENT |
| MEDIUM | crates/fresh-core/src/api.rs | 2957 | /// Used for Typora-style seamless markdown: hiding syntax markers like `**`, `[](url)`, etc. | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/git_blame.ts | 495 | // line number rather than the byte position so the jump is robust to | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/k8s-workspace.ts | 268 | // temp file? Keep it robust: apply the file path directly after the | COMMENT |
| MEDIUM | crates/fresh-editor/tests/kube_fake_kubectl.rs | 254 | // the "pod"). Use `sh -c` so it's robust across systems. | COMMENT |
| MEDIUM | crates/fresh-editor/tests/common/harness.rs | 583 | // (issue #1722), but the harness keeps the directory-presence | COMMENT |
| MEDIUM | crates/fresh-editor/tests/common/harness.rs | 676 | // failures. A robust fix means either moving rust_i18n locale into | COMMENT |
| MEDIUM | …h-editor/tests/semantic/migrated_cursor_under_popup.rs | 72 | // at width 80, default config). To keep the assertion robust | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/file_explorer.rs | 1365 | // For a more robust test, we could check the internal state | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/file_explorer.rs | 3927 | // Use single ASCII chars so the assertion is robust against unicode | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/buffer_groups.rs | 161 | // Click in the middle of the marker text to be robust against | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/terminal.rs | 1118 | /// Test that terminal rendering is robust when cursor position equals height | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/blog_showcases.rs | 3447 | // wait robust. ------------------------------------------------------- | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/menu_bar.rs | 80 | #[ignore = "F10 keybinding needs investigation - works in real editor but not in test harness"] | COMMENT |
| MEDIUM | …ditor/tests/e2e/syntax_highlighting_embedded_offset.rs | 441 | // 5 keystrokes * ~500 bytes = ~2500 bytes. Definitely under 10KB. | COMMENT |
| MEDIUM | …tes/fresh-editor/tests/e2e/issue_1577_unicode_width.rs | 320 | /// The assertion is narrow and robust: after the editor renders the | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/lsp.rs | 785 | /// Uses a fake LSP server for robust testing | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/lsp.rs | 1438 | /// Uses a fake LSP server for robust testing | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/lsp.rs | 1511 | /// Uses a fake LSP server for robust testing | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/lsp.rs | 1585 | /// Uses a fake LSP server for robust testing | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/lsp.rs | 9305 | // foxtrot. We use Goto Line via the palette instead to be robust | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/orchestrator_dock.rs | 260 | /// (the active session's seamless tab) must land on the session the editor | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/orchestrator_dock.rs | 328 | // session's card must wear the seamless tab. | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/orchestrator_dock.rs | 420 | /// The active session's card wears the "seamless tab": its rows have the | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/orchestrator_dock.rs | 463 | // seamless tab); false when the wall `│` still stands there. | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/orchestrator_dock.rs | 470 | // aaa_project is the launch (active) session: its card is the seamless | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/orchestrator_dock.rs | 554 | // The active session renders as the seamless tab (its divider is scooped | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/orchestrator_dock.rs | 1592 | // its marker keeps this robust to the focus-cycle length: each radio | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/orchestrator_dock.rs | 1835 | /// active row. We read this off the *seamless tab*: the active session's | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/orchestrator_dock.rs | 1838 | /// After creation the new session's card must be the seamless one and the | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/orchestrator_dock.rs | 1905 | // row's wall is scooped away (the seamless tab). The spawn + active-window | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/plugins/live_diff.rs | 35 | /// to keep this robust we scan every cell from the start of each row. | COMMENT |
| MEDIUM | …editor/tests/e2e/plugins/plugin_config_registration.rs | 90 | /// and the category name — robust against either layout. | COMMENT |
| MEDIUM | …tor/tests/e2e/plugins/devcontainer_usability_repros.rs | 15 | //! | Critical | After Rebuild with malformed `devcontainer.json`, all `Dev Container:` palette commands disappear from | COMMENT |
| MEDIUM | …tor/tests/e2e/plugins/devcontainer_usability_repros.rs | 16 | //! | Medium | Palette popup renders nothing when the layout has many horizontal splits — the prompt accepts the filter | COMMENT |
| MEDIUM | …tor/tests/e2e/plugins/devcontainer_usability_repros.rs | 207 | #[ignore = "harness shortcuts the post-rebuild editor restart; needs real restart support to repro"] | COMMENT |
| MEDIUM | …tor/tests/e2e/plugins/devcontainer_usability_repros.rs | 309 | #[ignore = "harness PTY is too tall to crowd the popup off-screen; needs smaller PTY or popup-bounds accessor to repro"] | COMMENT |
| MEDIUM | crates/fresh-editor/src/app/editor_accessors.rs | 462 | /// far more robust — every cached `Arc<dyn FileSystem>`, LSP | COMMENT |
| MEDIUM | crates/fresh-editor/src/app/render.rs | 4682 | // Dock "seamless tab (missing wall)": erase the right-edge divider | COMMENT |
| MEDIUM | crates/fresh-editor/src/app/render.rs | 4918 | /// Paint the dock's "seamless tab (missing wall)" treatment for the | COMMENT |
| MEDIUM | crates/fresh-editor/src/app/widget_runtime.rs | 360 | /// Native-frontend entry point, robust against hit-list drift: resolve | COMMENT |
| MEDIUM | crates/fresh-editor/src/primitives/grammar/types.rs | 587 | // syntect's first-line regex, but mapping it explicitly is robust | COMMENT |
| MEDIUM | crates/fresh-editor/src/model/line_diff.rs | 3 | //! This module provides a simple but robust diff algorithm that correctly handles | COMMENT |
| MEDIUM | crates/fresh-editor/src/model/encoding.rs | 336 | /// Unlike UTF-8 above, this heuristic is robust to sample truncation: it uses | COMMENT |
| MEDIUM | crates/fresh-editor/src/view/conceal.rs | 4 | //! Used for Typora-style "seamless canvas" markdown: hiding syntax markers like `**` | COMMENT |
| MEDIUM | crates/fresh-editor/src/view/settings/widget_map.rs | 21 | //! **domain-formatted** content — the robust shape: domain code (here, | COMMENT |
| MEDIUM | crates/fresh-editor/src/view/file_tree/ignore.rs | 8 | //! Uses the `ignore` crate which provides robust .gitignore parsing | COMMENT |
| MEDIUM | crates/fresh-editor/src/webui/mod.rs | 714 | // payload) with the raw index as tiebreaker — robust against the | COMMENT |
| MEDIUM⚡ | crates/fresh-editor/src/services/lsp/mod.rs | 4 | //! It supports multiple concurrent language servers, async I/O, and robust | COMMENT |
| MEDIUM | scripts/check-semantic-test-isolation.sh | 5 | # fresh::test_api and the common test harness. They must NOT reach into | COMMENT |
| MEDIUM | scripts/check-semantic-test-isolation.sh | 12 | # docs/internal/scenario-migration-status.md as the "Direct-harness for | COMMENT |
| MEDIUM | scripts/check-semantic-test-isolation.sh | 23 | # use crate::common::harness::EditorTestHarness; | COMMENT |
| MEDIUM | scripts/check-semantic-test-isolation.sh | 25 | # Any file importing the harness directly is taking the harness-direct | COMMENT |
| MEDIUM | scripts/check-semantic-test-isolation.sh | 43 | # harness-direct pattern doesn't need. | COMMENT |
| MEDIUM | scripts/check-semantic-test-isolation.sh | 53 | # Conditionally-forbidden imports — allowed only in harness-direct | COMMENT |
| MEDIUM | scripts/check-semantic-test-isolation.sh | 76 | # For the harness-only patterns, allow imports in files that themselves | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/fresh-editor/plugins/audit_mode.ts | 1777 | function buildCommentsPanelEntries(): TextPropertyEntry[] { | CODE |
| LOW | crates/fresh-editor/plugins/audit_mode.ts | 2746 | function paintLineSelectionOverlay() { | CODE |
| LOW | crates/fresh-editor/plugins/audit_mode.ts | 3181 | function rememberPendingHunkAnchor(hunkId: string | null) { | CODE |
| LOW | crates/fresh-editor/plugins/audit_mode.ts | 3276 | function restoreCursorAfterRebuild() { | CODE |
| LOW | crates/fresh-editor/plugins/audit_mode.ts | 3308 | function refreshViewportDimensions(): boolean { | CODE |
| LOW | crates/fresh-editor/plugins/audit_mode.ts | 3385 | function computeFullFileAlignedDiff(oldContent: string, newContent: string, hunks: Hunk[]): AlignedLine[] { | CODE |
| LOW | crates/fresh-editor/plugins/audit_mode.ts | 6174 | function branchByteOffsetOfFirstCommit(): number { | CODE |
| LOW | crates/fresh-editor/plugins/audit_mode.ts | 6328 | function isReviewBranchDetailFocused(): boolean { | CODE |
| LOW | crates/fresh-editor/plugins/audit_mode.ts | 6336 | function selectedReviewBranchCommit(): GitCommit | null { | CODE |
| LOW | crates/fresh-editor/plugins/devcontainer.ts | 837 | async function getOrComputeProbedEnv(): Promise<Record<string, string>> { | CODE |
| LOW | crates/fresh-editor/plugins/devcontainer.ts | 1566 | function parseDevcontainerUpOutput(stdout: string): DevcontainerUpResult | null { | CODE |
| LOW | crates/fresh-editor/plugins/devcontainer.ts | 1580 | function buildContainerAuthorityPayload( | CODE |
| LOW | crates/fresh-editor/plugins/devcontainer.ts | 2074 | function closeStaleBuildLogBuffers(cwd: string): void { | CODE |
| LOW | crates/fresh-editor/plugins/devcontainer.ts | 2156 | async function stopContainerIfShutdownActionRequires(): Promise<void> { | CODE |
| LOW | crates/fresh-editor/plugins/flash.ts | 238 | function findWordStartMatchesInSplit(view: SplitView): Match[] { | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 271 | function cutCharacterwiseSelection(hasSelectedRange: boolean): boolean { | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 281 | function copyCharacterwiseSelection(hasSelectedRange: boolean): boolean { | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 343 | async function selectThenCutCharacterwise(action: string, count: number): Promise<boolean> { | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 356 | async function selectThenCopyCharacterwise(action: string, count: number): Promise<boolean> { | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 369 | function getLinewiseReplacementText(deletedText: string): string | null { | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 406 | function ensureLinewiseRegisterText(text: string, lineTerminator: string): string { | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 480 | function isActiveBufferEditingDisabled(bufferId: number): boolean { | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 794 | function computeWORDMotionTargetIndex(text: string, startIndex: number, kind: WORDMotionKind, count: number): number { | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 858 | function paragraphDownMotionTargetIndex(text: string, startIndex: number): { index: number; reachedEof: boolean } { | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 872 | async function computeParagraphDownOperatorRange(count: number): Promise<{ start: number; end: number } | null> { | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 996 | async function placeCursorAtFirstNonBlank(bufferId: number, lineStart: number): Promise<void> { | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 1187 | function WORDMotionKindFromRepeatMotion(motion: string): WORDMotionKind | null { | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 1200 | async function handleWORDMotionWithOperator(kind: WORDMotionKind): Promise<void> { | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 1542 | function findSearchTargetUnderCursor(text: string, cursorIndex: number, scanForwardOnMiss: boolean = false): WordSearchT | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 1669 | async function executeWordUnderCursorSearch(direction: WordSearchDirection, count: number): Promise<void> { | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 2503 | async function selectVisualRangeToTarget(target: number, includeDisplayTarget: boolean = true): Promise<void> { | CODE |
| LOW | crates/fresh-editor/plugins/vi_mode.ts | 3213 | async function enterFindCharOperatorMode(findType: FindCharType): Promise<void> { | CODE |
| LOW | crates/fresh-editor/plugins/orchestrator.ts | 789 | async function refreshDiscoveredWorktrees(): Promise<void> { | CODE |
| LOW | crates/fresh-editor/plugins/orchestrator.ts | 2397 | function syncDockSelectionToActive(): void { | CODE |
| LOW | crates/fresh-editor/plugins/orchestrator.ts | 3245 | function closeDockContextMenuAndRestoreDock(): void { | CODE |
| LOW | crates/fresh-editor/plugins/orchestrator.ts | 3302 | function diveDockSelectionFromClick(fromEdge: "top" | "bottom" | null): void { | CODE |
| LOW | crates/fresh-editor/plugins/orchestrator.ts | 4625 | async function detectDefaultBranchWithFallback( | CODE |
| LOW | crates/fresh-editor/plugins/orchestrator.ts | 5672 | function scheduleProjectPathReprobe(): void { | CODE |
| LOW | crates/fresh-editor/plugins/orchestrator.ts | 5698 | function scheduleCompletionRefresh( | CODE |
| LOW | crates/fresh-editor/plugins/orchestrator.ts | 6630 | function completionVisibleForFocused(): boolean { | CODE |
| LOW | crates/fresh-editor/plugins/clangd_support.ts | 296 | function onClangdCustomNotification(payload: { | CODE |
| LOW | crates/fresh-editor/plugins/git_log.ts | 1062 | async function deriveFileAndLineFromDiffCursor( | CODE |
| LOW | crates/fresh-editor/plugins/git_log.ts | 1314 | function updateBufferFocusedContext(): void { | CODE |
| LOW | crates/fresh-editor/plugins/merge_conflict.ts | 1169 | function computeResultConflictOffset(conflictIndex: number): number { | CODE |
| LOW | crates/fresh-editor/plugins/merge_conflict.ts | 1783 | function registerMergeModeCommands(): void { | CODE |
| LOW | crates/fresh-editor/plugins/merge_conflict.ts | 1792 | function unregisterMergeModeCommands(): void { | CODE |
| LOW | crates/fresh-editor/plugins/search_replace.ts | 1664 | function shouldInterceptForHistory(): boolean { | CODE |
| LOW | crates/fresh-editor/plugins/theme_editor.ts | 260 | function fieldRefersToStyledColorDef(fieldObj: Record<string, unknown>): boolean { | CODE |
| LOW | crates/fresh-editor/plugins/theme_editor.ts | 1433 | function applySelectionHighlighting(cachedEntries?: TextPropertyEntry[]): void { | CODE |
| LOW | crates/fresh-editor/plugins/theme_editor.ts | 2452 | function getCurrentSelectableIndex(): number { | CODE |
| LOW | crates/fresh-editor/plugins/git_explorer.ts | 152 | async function refreshGitExplorerDecorations() { | CODE |
| LOW | crates/fresh-editor/plugins/env-manager.ts | 129 | function devcontainerConfigPresent(): boolean { | CODE |
| LOW | crates/fresh-editor/plugins/env-manager.ts | 179 | function devcontainerObservationKey(): string { | CODE |
| LOW | crates/fresh-editor/plugins/env-manager.ts | 187 | function writeDevcontainerDeclined(): void { | CODE |
| LOW | crates/fresh-editor/plugins/env-manager.ts | 278 | function onDevcontainerAttachResult(data: ActionPopupResultData): void { | CODE |
| LOW | …tes/fresh-editor/plugins/lib/virtual-buffer-factory.ts | 49 | export function createVirtualBufferFactory(editor: EditorAPI) { | CODE |
| LOW | crates/fresh-editor/plugins/lib/git_history.ts | 597 | export function buildDetailPlaceholderEntries(message: string): TextPropertyEntry[] { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | crates/fresh-editor/src/app/terminal.rs | 113 | .with_user_shell_override(self.resources.config.terminal.shell.as_ref()) | CODE |
| CRITICAL | crates/fresh-editor/src/app/terminal.rs | 441 | let rulers = self.resources.config.editor.rulers.clone(); | CODE |
| CRITICAL | crates/fresh-editor/src/app/workspace.rs | 1161 | rulers: self.resources.config.editor.rulers.clone(), | CODE |
| CRITICAL | …tes/fresh-editor/src/view/ui/split_rendering/gutter.rs | 198 | ctx.state.margins.left_config.separator.clone(), | CODE |
| CRITICAL | …/split_rendering/orchestration/render_line/trailing.rs | 216 | ctx.state.margins.left_config.separator.to_string(), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | crates/fresh-editor/scripts/png_to_ansi.py | 44 | print(f"Error: File '{image_path}' not found", file=sys.stderr) | CODE |
| LOW⚡ | crates/fresh-editor/scripts/png_to_ansi.py | 46 | except Exception as e: | CODE |
| MEDIUM⚡ | crates/fresh-editor/scripts/png_to_ansi.py | 47 | print(f"Error: {e}", file=sys.stderr) | CODE |
| MEDIUM | crates/fresh-editor/scripts/generate_ts_types.py | 206 | print(f"Error: {rust_file} not found") | STRING |
| MEDIUM⚡ | crates/fresh-editor/scripts/parse_flamegraph.py | 582 | print(f"Error: File not found: {args.svg_file}", file=sys.stderr) | CODE |
| LOW⚡ | crates/fresh-editor/scripts/parse_flamegraph.py | 584 | except Exception as e: | CODE |
| MEDIUM⚡ | crates/fresh-editor/scripts/parse_flamegraph.py | 585 | print(f"Error reading file: {e}", file=sys.stderr) | CODE |
| LOW | crates/fresh-editor/src/services/remote/agent.py | 525 | except Exception as e: | CODE |
| LOW | crates/fresh-editor/src/services/remote/agent.py | 681 | except Exception as e: | CODE |
| LOW | crates/fresh-editor/src/services/remote/spawner.rs | 1061 | except Exception: | CODE |
| LOW | scripts/serial_lag_diagnose.py | 70 | except Exception: | CODE |
| LOW | scripts/serial_lag_diagnose.py | 74 | except Exception: | CODE |
| MEDIUM | scripts/serial_lag_diagnose.py | 67 | def kill(pid, fd): | CODE |
| MEDIUM | scripts/winget-publish.py | 113 | print(f"Error: Unexpected origin remote: {origin_url}") | CODE |
| MEDIUM | scripts/winget-publish.py | 142 | print(f"Error: Package not found in upstream: {MANIFEST_BASE}") | CODE |
| MEDIUM | scripts/winget-publish.py | 149 | print("Error: No existing versions found") | CODE |
| LOW | scripts/serial_lag_bench.py | 37 | except Exception as e: | CODE |
| LOW | scripts/serial_lag_bench.py | 147 | except Exception: | CODE |
| LOW | scripts/serial_lag_bench.py | 151 | except Exception: | CODE |
| LOW | scripts/serial_lag_bench.py | 192 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | hunk-diff-viewer-report.md | 157 | ## 6. The standout feature — agentic inline review | COMMENT |
| MEDIUM | crates/fresh-editor/plugins/devcontainer.ts | 2727 | // The scaffold command is the only palette entry that makes sense | COMMENT |
| MEDIUM | …resh-editor/tests/e2e/markdown_compose_scroll_reach.rs | 784 | // mouse-wheel cases here therefore serve as **guardrails** — they | COMMENT |
| MEDIUM | crates/fresh-editor/tests/e2e/blog_showcases.rs | 2477 | // Commit 1 — initial scaffold (Alice). | COMMENT |
| MEDIUM | crates/fresh-editor/src/app/popup_dialogs.rs | 919 | // No .devcontainer present — offer the scaffold | COMMENT |
| MEDIUM | crates/fresh-editor/src/app/popup_dialogs.rs | 921 | // without dropping to a shell. The scaffold | COMMENT |
| MEDIUM | docs/internal/virtual-space-scoping.md | 178 | ### 4.4 Rendering — `view/ui/split_rendering/orchestration/render_line/` (the risky part) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/fresh-gui/resources/macos/create-app-bundle.sh | 2 | # Create a macOS .app bundle for Fresh editor (GUI mode). | COMMENT |
| MEDIUM | crates/fresh-editor/scripts/parse_flamegraph.py | 214 | # Create a lookup by y level | COMMENT |
| MEDIUM | scripts/record-asciinema/setup-demo.sh | 2 | # Create the demo workspace used by record.py. | COMMENT |
| MEDIUM | .github/workflows/release.yml | 289 | # Create the tarball | COMMENT |
| MEDIUM | .github/workflows/release.yml | 401 | # Create a stable source tarball (GitHub's auto-generated archives are not stable) | COMMENT |
| MEDIUM | .github/workflows/release.yml | 545 | # Create the tarball | COMMENT |
| MEDIUM | .github/workflows/release-npm.yml | 231 | # Create the tarball | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/fresh-editor/tests/e2e/merge_conflict.rs | 18 | .args(["config", "user.email", "test@test.com"]) | CODE |
| LOW | crates/fresh-editor/tests/e2e/merge_conflict.rs | 153 | .args(["config", "user.email", "test@test.com"]) | CODE |
| LOW | crates/fresh-editor/tests/e2e/merge_conflict.rs | 887 | .args(["config", "user.email", "test@test.com"]) | CODE |
| LOW | …resh-editor/tests/e2e/markdown_compose_scroll_reach.rs | 144 | let long = "lorem ipsum dolor sit amet consectetur adipiscing elit \ | CODE |
| LOW | …resh-editor/tests/e2e/markdown_compose_scroll_reach.rs | 144 | let long = "lorem ipsum dolor sit amet consectetur adipiscing elit \ | CODE |
| LOW | crates/fresh-editor/tests/e2e/blog_showcases.rs | 2496 | .args(["config", "user.name", "John Doe"]) | CODE |
| LOW | crates/fresh-editor/tests/e2e/blog_showcases.rs | 2549 | .args(["config", "user.name", "John Doe"]) | CODE |
| LOW | …ates/fresh-editor/tests/e2e/search_center_on_scroll.rs | 83 | let long = "lorem ipsum dolor sit amet ".repeat(12); // ~324 cols | CODE |
| LOW | …ates/fresh-editor/tests/e2e/search_center_on_scroll.rs | 83 | let long = "lorem ipsum dolor sit amet ".repeat(12); // ~324 cols | CODE |
| LOW | crates/fresh-editor/tests/e2e/document_model.rs | 17 | Line 3: Lorem ipsum dolor sit amet\n\ | CODE |
| LOW | crates/fresh-editor/tests/e2e/document_model.rs | 17 | Line 3: Lorem ipsum dolor sit amet\n\ | CODE |
| LOW | crates/fresh-editor/tests/e2e/split_tabs.rs | 271 | .args(["config", "user.email", "test@test.com"]) | CODE |
| LOW | crates/fresh-editor/tests/e2e/live_grep.rs | 305 | let long = "lorem ipsum dolor sit amet ".repeat(12); // ~324 chars | CODE |
| LOW | crates/fresh-editor/tests/e2e/live_grep.rs | 305 | let long = "lorem ipsum dolor sit amet ".repeat(12); // ~324 chars | CODE |
| LOW | …h-editor/tests/e2e/issue_1554_scrollbar_theme_color.rs | 14 | .map(|i| format!("line {i:04}: lorem ipsum dolor sit amet")) | CODE |
| LOW | …h-editor/tests/e2e/issue_1554_scrollbar_theme_color.rs | 14 | .map(|i| format!("line {i:04}: lorem ipsum dolor sit amet")) | CODE |
| LOW | crates/fresh-editor/tests/e2e/plugins/git.rs | 2669 | repo.create_file("test.txt", "placeholder"); | CODE |
| LOW | crates/fresh-editor/tests/e2e/plugins/git.rs | 2722 | repo.create_file("test.txt", "placeholder"); | CODE |
| LOW | crates/fresh-editor/tests/e2e/plugins/git.rs | 2786 | repo.create_file("test.txt", "placeholder"); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/fresh-editor/tests/common/fake_lsp.rs | 1041 | # Check if we have a stored result_id for this URI | COMMENT |
| LOW | …editor/tests/e2e/lsp_publish_diagnostics_capability.rs | 81 | # Check if client advertises publishDiagnostics capability | COMMENT |
| LOW | crates/fresh-editor/scripts/stress_test.sh | 38 | # Check if another test already failed | COMMENT |
| LOW | crates/fresh-editor/scripts/stress_test.sh | 71 | # Check if another test already failed | COMMENT |
| LOW | crates/fresh-editor/scripts/parse_flamegraph.py | 240 | # Check if candidate contains our frame (x range overlaps and candidate is wider or equal) | COMMENT |
| LOW | crates/fresh-editor/scripts/parse_flamegraph.py | 322 | # Check if this stack is a prefix of any other stack | COMMENT |
| LOW | crates/fresh-editor/scripts/parse_flamegraph.py | 326 | # Check if stack_tuple is a prefix of other | COMMENT |
| LOW | .github/workflows/release.yml | 43 | # Check if prerelease (contains -, like 0.1.0-beta.1) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/fresh-editor/scripts/generate_ts_types.py | 38 | CODE | |
| LOW | crates/fresh-editor/scripts/generate_ts_types.py | 120 | CODE | |
| LOW | crates/fresh-editor/scripts/parse_flamegraph.py | 151 | CODE | |
| LOW | crates/fresh-editor/scripts/parse_flamegraph.py | 304 | CODE | |
| LOW | crates/fresh-editor/scripts/parse_flamegraph.py | 336 | CODE | |
| LOW | crates/fresh-editor/src/services/remote/agent.py | 173 | CODE | |
| LOW | crates/fresh-editor/src/services/remote/agent.py | 278 | CODE | |
| LOW | crates/fresh-editor/src/services/remote/agent.py | 470 | CODE | |
| LOW | crates/fresh-editor/src/services/remote/agent.py | 565 | CODE | |
| LOW | crates/fresh-editor/src/services/remote/agent.py | 493 | CODE | |
| LOW | scripts/record-asciinema/record.py | 171 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/bump-version.py | 260 | print(f" {step}. Commit changes: {YELLOW}git add Cargo.toml Cargo.lock debian/changelog && git commit -m 'B | CODE |
| HIGH | scripts/bump-version.py | 267 | print(f" {step}. Push: {YELLOW}git push && git push origin v{new_version}{NC}") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/fresh-gui/resources/macos/create-app-bundle.sh | 4 | # Usage: | COMMENT |
| LOW | crates/fresh-editor/scripts/record-demo.sh | 5 | # Usage: | COMMENT |
| LOW | scripts/generate-theme-diff.sh | 10 | # Usage: | COMMENT |
| LOW | scripts/update-showcases.sh | 6 | # Usage: | COMMENT |
| LOW | scripts/generate-theme-screenshots.sh | 6 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/fresh-editor/src/server/runner.rs | 89 | /// This is a basic implementation that handles connections and handshakes. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/bump-version.py | 84 | def update_cargo_toml(cargo_toml_path: Path, current_version: str, new_version: str) -> None: | CODE |
| LOW | scripts/bump-version.py | 106 | def update_cargo_lock() -> None: | CODE |
| LOW | scripts/bump-version.py | 114 | def update_debian_changelog(repo_root: Path) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/fresh-editor/scripts/parse_flamegraph.py | 96 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/fresh-editor/src/services/remote/agent.py | 653 | def handle_request(line): | CODE |