Repository Analysis

zellij-org/zellij

A terminal workspace with batteries included

2.7 Likely human-written View on GitHub
2.7
Adjusted Score
2.7
Raw Score
100%
Time Factor
2026-05-13
Last Push
33,132
Stars
Rust
Language
283,590
Lines of Code
409
Files
438
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 2HIGH 0MEDIUM 202LOW 234

Pattern Findings

438 matches across 8 categories. Click a row to expand file-level details.

Decorative Section Separators201 hits · 481 pts
SeverityFileLineSnippet
MEDIUMzellij-server/src/tab/unit/tab_tests.rs1567 // ┌───────────┐ ┌───────────┐
MEDIUMzellij-server/src/tab/unit/tab_tests.rs1570 // ├───────────┤ ==close==> │xxxxxxxxxxx│
MEDIUMzellij-server/src/tab/unit/tab_tests.rs1573 // └───────────┘ └───────────┘
MEDIUMzellij-server/src/tab/unit/tab_tests.rs1634 // ┌───────────┐ ┌───────────┐
MEDIUMzellij-server/src/tab/unit/tab_tests.rs1637 // ├───────────┤ ==close==> │xxxxxxxxxxx│
MEDIUMzellij-server/src/tab/unit/tab_tests.rs1640 // └───────────┘ └───────────┘
MEDIUMzellij-server/src/tab/unit/tab_tests.rs1831 // ┌─────┬─────┐ ┌─────┬─────┐
MEDIUMzellij-server/src/tab/unit/tab_tests.rs1834 // ├─────┴─────┤ ==close==> │xxxxx│xxxxx│
MEDIUMzellij-server/src/tab/unit/tab_tests.rs1837 // └───────────┘ └─────┴─────┘
MEDIUMzellij-server/src/tab/unit/tab_tests.rs1945 // ┌───────────┐ ┌─────┬─────┐
MEDIUMzellij-server/src/tab/unit/tab_tests.rs1948 // ├─────┬─────┤ ==close==> │xxxxx│xxxxx│
MEDIUMzellij-server/src/tab/unit/tab_tests.rs1951 // └─────┴─────┘ └─────┴─────┘
MEDIUMzellij-server/src/tab/unit/tab_tests.rs2058 // ┌─────┬─────┐ ┌──────────┐
MEDIUMzellij-server/src/tab/unit/tab_tests.rs2061 // ├─────┤█████│ ==close==> ├──────────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs2064 // └─────┴─────┘ └──────────┘
MEDIUMzellij-server/src/tab/unit/tab_tests.rs2172 // ┌─────┬─────┐ ┌──────────┐
MEDIUMzellij-server/src/tab/unit/tab_tests.rs2175 // │█████├─────┤ ==close==> ├──────────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs2178 // └─────┴─────┘ └──────────┘
MEDIUMzellij-server/src/tab/unit/tab_tests.rs2897 // ┌────┬──────┐ ┌────┬──────┐
MEDIUMzellij-server/src/tab/unit/tab_tests.rs2899 // ├────┴┬─────┤ ├────┴──────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs2901 // ├─────┤█████│ ==close==> ├───────────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs2903 // ├────┬┴─────┤ ├────┬──────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs2905 // └────┴──────┘ └────┴──────┘
MEDIUMzellij-server/src/tab/unit/tab_tests.rs3208 // ┌────┬──────┐ ┌────┬──────┐
MEDIUMzellij-server/src/tab/unit/tab_tests.rs3210 // ├────┴┬─────┤ ├────┴──────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs3212 // │█████├─────┤ ==close==> ├───────────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs3214 // ├────┬┴─────┤ ├────┬──────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs3216 // └────┴──────┘ └────┴──────┘
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4000 // ┌───────────┐ ┌───────────┐
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4003 // ├───────────┤ ==resize=down==> │ │
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4004 // │███████████│ ├───────────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4007 // └───────────┘ └───────────┘
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4109 // ┌───────────┐ ┌───────────┐
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4112 // ├───────────┤ ==resize=down==> │███████████│
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4113 // │ │ ├───────────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4115 // └───────────┘ └───────────┘
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4218 // ┌───────────┐ ┌───────────┐
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4221 // ├───────────┤ ├───────────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4225 // ├───────────┤ │███████████│
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4226 // │ │ ├───────────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4228 // └───────────┘ └───────────┘
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4379 // ┌─────┬─────┐ ┌─────┬─────┐
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4381 // ├─────┴─────┤ ==resize=down==> │ │ │
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4382 // │███████████│ ├─────┴─────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4384 // └───────────┘ └───────────┘
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4535 // ┌─────┬─────┐ ┌─────┬─────┐
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4538 // ├─────┼─────┤ ==resize=down==> ├─────┤ │
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4539 // │ │█████│ │ ├─────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4541 // └─────┴─────┘ └─────┴─────┘
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4737 // ┌─────┬─────┐ ┌─────┬─────┐
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4740 // ├─────┼─────┤ ==resize=down==> ├─────┤█████│
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4741 // │ │ │ │ ├─────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4743 // └─────┴─────┘ └─────┴─────┘
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4939 // ┌─────┬─────┐ ┌─────┬─────┐
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4942 // ├─────┼─────┤ ==resize=down==> │ ├─────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4943 // │█████│ │ ├─────┤ │
MEDIUMzellij-server/src/tab/unit/tab_tests.rs4945 // └─────┴─────┘ └─────┴─────┘
MEDIUMzellij-server/src/tab/unit/tab_tests.rs5144 // ┌─────┬─────┐ ┌─────┬─────┐
MEDIUMzellij-server/src/tab/unit/tab_tests.rs5147 // ├─────┼─────┤ ==resize=down==> │█████├─────┤
MEDIUMzellij-server/src/tab/unit/tab_tests.rs5148 // │ │ │ ├─────┤ │
141 more matches not shown…
Over-Commented Block194 hits · 192 pts
SeverityFileLineSnippet
LOWCargo.toml161# [profile.dev.package."*"]
LOWdefault-plugins/layout-manager/src/text_input.rs1// This is a duplicate of the same file in the sequence (and possibly other) plugins
LOWdefault-plugins/status-bar/src/main.rs441/// regular text color, the enclosed keys are painted green and bold. If the keys share a common
LOWdefault-plugins/status-bar/src/second_line.rs81 line_part
LOWdefault-plugins/status-bar/src/first_line.rs121/// A long mode shortcut tile consists of a leading and trailing `separator`, a keybinding enclosed
LOWdefault-plugins/status-bar/src/first_line.rs241
LOWdefault-plugins/status-bar/src/first_line.rs441 None => None,
LOWzellij-utils/assets/prost_ipc/client_server_contract.rs1#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost_ipc/client_server_contract.rs41#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost_ipc/client_server_contract.rs381 #[prost(message, tag="126")]
LOWzellij-utils/assets/prost_ipc/client_server_contract.rs501#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost_ipc/client_server_contract.rs681#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost_ipc/client_server_contract.rs1261#[derive(Clone, PartialEq, ::prost::Message)]
LOWzellij-utils/assets/prost_ipc/client_server_contract.rs1381/// Nested message and enum types in `NewPanePlacement`.
LOWzellij-utils/assets/prost_ipc/client_server_contract.rs1501 /// Added missing direction field
LOWzellij-utils/assets/prost_ipc/client_server_contract.rs1741 /// absolute number
LOWzellij-utils/assets/prost_ipc/client_server_contract.rs1781#[derive(Clone, PartialEq, ::prost::Message)]
LOWzellij-utils/assets/prost_ipc/client_server_contract.rs3001 #[prost(uint32, optional, tag="2")]
LOWzellij-utils/assets/prost_ipc/client_server_contract.rs3021pub struct ClientExitedMsg {
LOWzellij-utils/assets/prost_ipc/client_server_contract.rs3101#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost_ipc/client_server_contract.rs3201}
LOWzellij-utils/assets/prost/api.action.rs161#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.action.rs221#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.action.rs461#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.action.rs601#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.action.rs641 pub line: i64,
LOWzellij-utils/assets/prost/api.action.rs701#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.action.rs821#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.pipe_message.rs1#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.input_mode.rs1#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.plugin_command.rs1#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.plugin_command.rs941 #[prost(message, optional, tag="2")]
LOWzellij-utils/assets/prost/api.plugin_command.rs1061#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.plugin_command.rs1261#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.plugin_command.rs1321#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.plugin_command.rs1441#[derive(Clone, PartialEq, ::prost::Message)]
LOWzellij-utils/assets/prost/api.plugin_command.rs1461pub struct GetTabInfoResponse {
LOWzellij-utils/assets/prost/api.plugin_command.rs1581#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.plugin_command.rs1641#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.plugin_command.rs1721#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.plugin_command.rs1801/// Nested message and enum types in `HighlightStyle`.
LOWzellij-utils/assets/prost/api.plugin_command.rs1941 #[prost(string, optional, tag="1")]
LOWzellij-utils/assets/prost/api.event.rs1#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.event.rs181 #[prost(string, optional, tag="1")]
LOWzellij-utils/assets/prost/api.event.rs361#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.event.rs501#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.event.rs581#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.event.rs681#[allow(clippy::derive_partial_eq_without_eq)]
LOWzellij-utils/assets/prost/api.style.rs1#[allow(clippy::derive_partial_eq_without_eq)]
LOW…j-utils/assets/prost_web_server/web_server_contract.rs1#[allow(clippy::derive_partial_eq_without_eq)]
LOW…j-utils/assets/prost_web_server/web_server_contract.rs21/// Empty for now, but allows for future parameters like graceful timeout
LOWzellij-utils/src/ipc.rs461 Err(e) => {
LOWzellij-utils/src/lib.rs21// The following modules can't be used when targeting wasm
LOWzellij-utils/src/downloader.rs161 }
LOWzellij-utils/src/data.rs741///
LOWzellij-utils/src/data.rs1161 /// `Tab` mode allows creating and closing tabs, as well as moving between them.
LOWzellij-utils/src/data.rs2261 pub display_area_rows: usize,
LOWzellij-utils/src/data.rs2281pub struct PaneManifest {
LOWzellij-utils/src/errors.rs1// false positive: thiserror's derive macro triggers unused_assignments on struct-style enum variant fields
LOWzellij-utils/src/errors.rs41///
134 more matches not shown…
Verbosity Indicators36 hits · 66 pts
SeverityFileLineSnippet
LOWdefault-plugins/session-manager/src/single_screen.rs669 // Step 1: empty search, populate results
LOWdefault-plugins/session-manager/src/single_screen.rs672 // Step 2: select "beta" (find its index)
LOWdefault-plugins/session-manager/src/single_screen.rs679 // Step 3: search for "a" — beta does not match
LOWdefault-plugins/link/src/main.rs275 // Step 1: tilde expansion (only leading ~)
LOWdefault-plugins/link/src/main.rs290 // Step 2: environment variable expansion ($VAR and ${VAR})
LOWzellij-client/src/remote_attach/auth.rs28 // Step 1: Login with auth token
LOWzellij-client/src/remote_attach/auth.rs63 // Step 2: Get session/client ID
LOWzellij-server/src/plugins/zellij_exports.rs4360 // Step 1: Sanitize layout name for path traversal and invalid characters
LOWzellij-server/src/plugins/zellij_exports.rs4363 // Step 2: Validate the layout by parsing it
LOWzellij-server/src/plugins/zellij_exports.rs4372 // Step 3: Get layout_dir from PluginEnv
LOWzellij-server/src/plugins/zellij_exports.rs4379 // Step 4: Create file path
LOWzellij-server/src/plugins/zellij_exports.rs4382 // Step 5: Check if file exists when overwrite=false
LOWzellij-server/src/plugins/zellij_exports.rs4390 // Step 6: Ensure layout directory exists
LOWzellij-server/src/plugins/zellij_exports.rs4394 // Step 7: Write to disk
LOWzellij-server/src/plugins/zellij_exports.rs4475 // Step 1: Sanitize both layout names
LOWzellij-server/src/plugins/zellij_exports.rs4482 // Step 2: Get layout directory from PluginEnv
LOWzellij-server/src/plugins/zellij_exports.rs4489 // Step 3: Construct file paths
LOWzellij-server/src/plugins/zellij_exports.rs4493 // Step 4: Check if source file exists
LOWzellij-server/src/plugins/zellij_exports.rs4498 // Step 5: Check if target file already exists (fail if it does - no overwrite)
LOWzellij-server/src/plugins/zellij_exports.rs4506 // Step 6: Rename the file
LOWzellij-server/src/tab/mouse_handler.rs876 // Step 1: Focus the pane (same as execute_focus_pane, but without the
LOWzellij-server/src/tab/mouse_handler.rs889 // Step 2: Now that the pane is focused, dispatch the click as if the
LOWzellij-server/src/tab/unit/tab_integration_tests.rs14142 // Step 1: Hover over pane 1 — this focuses it via focus-follows-mouse
LOWzellij-server/src/tab/unit/tab_integration_tests.rs14151 // Step 2: Click on pane 1 — now this is a click on the ACTIVE pane
LOWsrc/tests/e2e/cases.rs2670 // Step 1: Create main client and wait for it to load
LOWsrc/tests/e2e/cases.rs2684 // Step 2: Start a foreground process that produces periodic output and then
LOWsrc/tests/e2e/cases.rs2700 // Step 3: Wait for first output line to appear
LOWsrc/tests/e2e/cases.rs2710 // Step 4: Attach watcher client
LOWsrc/tests/e2e/cases.rs2723 // Step 5: Main client splits pane right
LOWsrc/tests/e2e/cases.rs2740 // Step 6: Verify watcher sees the split pane
LOWsrc/tests/e2e/cases.rs2750 // Step 7: Watcher tries to open a new tab (should be ignored)
LOWsrc/tests/e2e/cases.rs2765 // Step 8: Verify main client didn't receive the tab command
LOWsrc/tests/e2e/cases.rs2776 // Step 9: Watcher sends mouse click (should be ignored)
LOWsrc/tests/e2e/cases.rs2791 // Step 10: Main client detaches
LOWsrc/tests/e2e/cases.rs2803 // Step 11: Verify watcher receives output even with no main client
LOWsrc/tests/e2e/cases.rs2820 // Step 12: Main client re-attaches
Hallucination Indicators2 hits · 20 pts
SeverityFileLineSnippet
CRITICALzellij-client/assets/addon-webgl.js1!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.am
CRITICALzellij-client/assets/xterm.js30!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippet
MEDIUMrust-toolchain.toml1# This file is updated by `update-toolchain.sh`
Fake / Example Data2 hits · 2 pts
SeverityFileLineSnippet
LOWzellij-server/src/panes/unit/grid_tests.rs1691 "Lorem ipsum dolor sit amet,
LOWzellij-server/src/panes/unit/grid_tests.rs1691 "Lorem ipsum dolor sit amet,
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippet
LOWzellij-client/src/input_handler.rs339 /// # Return value
Hyper-Verbose Identifiers1 hit · 1 pts
SeverityFileLineSnippet
LOWzellij-client/assets/connection.js117export function markConnectionEstablished() {