:love_letter: A beautiful, fast and fully open source mail client for Mac, Windows and Linux.
This report summarizes scanner evidence for Foundry376/Mailspring, a TypeScript project with 17,974 GitHub stars. SynthScan examined 377,450 lines of code across 1621 source files, recording 278 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 1.1 (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? 187 finding(s).
Are imports declared and package/API names verified? 35 finding(s).
Are wrappers, guards, and repeated structures necessary? 157 finding(s).
Which changes need focused human review? 278 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 278 distinct pattern matches across 7 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 | app/internal_packages/mcp-server/lib/mcp-tools.ts | 130 | // ── Attachment viewing (get_attachment) ────────────────────────────────── | COMMENT |
| MEDIUM | …internal_packages/mcp-server/lib/mcp-access-control.ts | 38 | // ── Pure predicates ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …internal_packages/mcp-server/lib/mcp-access-control.ts | 114 | // ── Scalar, message-returning helpers ─────────────────────────────────── | COMMENT |
| MEDIUM | …ternal_packages/views/starters/daily-briefing/View.jsx | 52 | // ── Choosing priorities ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ternal_packages/views/starters/daily-briefing/View.jsx | 179 | // ── The optional paragraph ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/runtime/mailspring-view.js | 37 | // ── Subscriptions ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/runtime/mailspring-view.js | 117 | // ── One-shot reads ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/runtime/mailspring-view.js | 212 | // ── Extraction ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/runtime/mailspring-view.js | 298 | // ── Summaries and generation ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/runtime/mailspring-view.js | 448 | // ── Identity ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/runtime/mailspring-view.js | 476 | // ── Writes ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/runtime/mailspring-view.js | 525 | // ── Sidebar context ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/runtime/mailspring-view.js | 550 | // ── Theme ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/runtime/mailspring-view.js | 580 | // ── View state ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/runtime/mailspring-view.js | 603 | // ── <MessageView> ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/runtime/mailspring-view.js | 794 | // ── Thread actions ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/runtime/mailspring-view.js | 848 | // ── Height reporting ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/runtime/mailspring-view.js | 922 | // ── Credentials ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/runtime/mailspring-view.js | 991 | // ── Calendars ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/styles/authoring-panel.less | 950 | // ── Compact intro ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/styles/authoring-panel.less | 959 | // ── Morphing to and from the Edit button ───────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/styles/authoring-panel.less | 1013 | // ── Edit button ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/lib/view-bridge.ts | 275 | // ── Subscriptions ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/lib/view-bridge.ts | 597 | // ── Dispatch ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/lib/bridge/content.ts | 86 | // ── schema.org structured data (extraction tier 0) ────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/lib/bridge/handlers.ts | 55 | // ── Parameter parsing ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/lib/bridge/handlers.ts | 211 | // ── Writes ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/lib/bridge/handlers.ts | 277 | // ── The method table ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/lib/bridge/generate.ts | 224 | // ── Bridge handlers ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/lib/agent/quota.ts | 172 | // ── Message length ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/lib/agent/store.ts | 322 | // ── State plumbing ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/lib/agent/store.ts | 526 | // ── Event stream ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/lib/agent/store.ts | 624 | // ── Transcript ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/lib/agent/store.ts | 742 | // ── Client tools ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/internal_packages/views/lib/agent/store.ts | 911 | // ── Actions ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/src/browser/view-sessions.ts | 211 | // ── Host-served resources ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/src/services/mail-access/filter.ts | 40 | // ── Validation ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/src/services/mail-access/filter.ts | 122 | // ── SQL helpers ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/src/services/mail-access/filter.ts | 220 | // ── Compilation ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | playwright/helpers.ts | 17 | // ─── Config & Launch ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | playwright/helpers.ts | 203 | // ─── Thread List Helpers ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | playwright/helpers.ts | 234 | // ─── Sidebar Helpers ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | playwright/helpers.ts | 241 | // ─── Task Capture Helpers ───────────────────────────────────────────── | COMMENT |
| MEDIUM | playwright/helpers.ts | 340 | // ─── Native Menu Intercept ──────────────────────────────────────────── | COMMENT |
| MEDIUM | playwright/helpers.ts | 405 | // ─── Search Helpers ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | playwright/helpers.ts | 418 | // ─── Composer Helpers ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | playwright/helpers.ts | 458 | // ─��─ SQLite Database Helpers ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | playwright/tests/visual-snapshots.spec.ts | 22 | // ─── Visual regression snapshots ──────────────────────────────────────────── | COMMENT |
| MEDIUM | playwright/tests/folder-management.spec.ts | 26 | // ─── Helpers ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | playwright/tests/folder-management.spec.ts | 40 | // ─── Folder section visibility ──────────────────────────────────────────── | COMMENT |
| MEDIUM | playwright/tests/folder-management.spec.ts | 52 | // ─── Folder hierarchy ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | playwright/tests/folder-management.spec.ts | 69 | // ─── Create folder via + button ─────────────────────────────────────────── | COMMENT |
| MEDIUM | playwright/tests/folder-management.spec.ts | 97 | // ─── Rename folder via double-click ─────────────────────────────────────── | COMMENT |
| MEDIUM | playwright/tests/folder-management.spec.ts | 139 | // ─── Context menu: rename via right-click ───────────────────────────────── | COMMENT |
| MEDIUM | playwright/tests/folder-management.spec.ts | 162 | // ─── Context menu: create subfolder ─────────────────────────────────────── | COMMENT |
| MEDIUM | playwright/tests/folder-management.spec.ts | 197 | // ─── Context menu: delete folder ────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/spec/database-object-registry-spec.ts | 18 | describe('DatabaseObjectRegistry', function DatabaseObjectRegistrySpecs() { | CODE |
| LOW | app/spec/spec-runner/react-test-utils-extensions.ts | 6 | export function scryRenderedComponentsWithTypeAndProps(root, type, props) { | CODE |
| LOW | app/spec/spec-runner/gui-reporter.tsx | 327 | export function reportPlainTextSpecResult(spec) { | CODE |
| LOW | app/spec/stores/folder-sync-progress-store-spec.ts | 1 | xdescribe('FolderSyncProgressStore', function mailspringSyncStatusStore() {}); | CODE |
| LOW | app/spec/models/unread-query-subscription-spec.ts | 13 | describe('UnreadQuerySubscription', function UnreadQuerySubscriptionSpecs() { | CODE |
| LOW | app/spec/models/mutable-query-result-set-spec.ts | 5 | describe('MutableQueryResultSet', function MutableQueryResultSetSpecs() { | CODE |
| LOW | app/spec/models/query-subscription-pool-spec.ts | 5 | describe('QuerySubscriptionPool', function QuerySubscriptionPoolSpecs() { | CODE |
| LOW | app/spec/components/participants-text-field-spec.tsx | 22 | xdescribe('ParticipantsTextField', function ParticipantsTextFieldSpecs() { | CODE |
| LOW | …_packages/thread-list/lib/thread-list-participants.tsx | 44 | function getTokensFromParticipants(thread: ThreadWithMessagesMetadata) { | CODE |
| LOW | …preferences/specs/preferences-account-details-spec.tsx | 19 | describe('PreferencesAccountDetails', function preferencesAccountDetails() { | CODE |
| LOW | …l_packages/activity/lib/engagement/engagement-stats.ts | 135 | export async function computeRecipientEngagement( | CODE |
| LOW | …packages/send-reminders/lib/send-reminders-headers.tsx | 10 | export function NotificationExplanationMessageHeader({ | CODE |
| LOW | …packages/send-reminders/lib/send-reminders-headers.tsx | 42 | export function ScheduledReminderThreadHeader({ | CODE |
| LOW | …al_packages/send-reminders/lib/send-reminders-utils.ts | 82 | export async function updateDraftReminderMetadata( | CODE |
| LOW | …s/send-reminders/lib/send-reminders-toolbar-button.tsx | 13 | export default function SendRemindersToolbarButton(props: { items: Thread[] }) { | CODE |
| LOW | …-reminders/lib/send-reminders-thread-list-extension.ts | 7 | export function cssClassNamesForThreadListItem(thread: Thread) { | CODE |
| LOW | …-reminders/lib/send-reminders-thread-list-extension.ts | 15 | export function cssClassNamesForThreadListIcon(thread: Thread) { | CODE |
| LOW | …r-signature/specs/signature-composer-dropdown-spec.tsx | 22 | describe('SignatureComposerDropdown', function signatureComposerDropdown() { | CODE |
| LOW | …r-signature/specs/signature-composer-extension-spec.ts | 14 | describe('SignatureComposerExtension', function signatureComposerExtension() { | CODE |
| LOW | …internal_packages/composer-signature/lib/templates.tsx | 68 | function widthAndHeightForPhotoURL( | CODE |
| LOW | app/internal_packages/thread-snooze/lib/snooze-utils.ts | 62 | export async function markUnreadOrResurfaceThreads(threads: Thread[], source: string) { | CODE |
| LOW | …ernal_packages/mcp-server/lib/claude-desktop-config.ts | 57 | export function mailspringClaudeDesktopEntry(): McpServerEntry { | CODE |
| LOW | …ernal_packages/mcp-server/lib/claude-desktop-config.ts | 93 | export function writeMailspringClaudeDesktopEntry() { | CODE |
| LOW | …ernal_packages/mcp-server/lib/claude-desktop-config.ts | 118 | export function refreshMailspringClaudeDesktopEntryIfStale() { | CODE |
| LOW | …ernal_packages/main-calendar/lib/core/calendar-rsvp.ts | 194 | export async function proposeNewTimeForCalendarEvent( | CODE |
| LOW | …ernal_packages/main-calendar/lib/core/calendar-rsvp.ts | 264 | export function openProposeNewTimePopover(occurrence: EventOccurrence, anchor?: HTMLElement): void { | CODE |
| LOW | …ernal_packages/main-calendar/lib/core/calendar-rsvp.ts | 288 | export function offerCounterInsteadOfMove(occurrence: EventOccurrence): void { | CODE |
| LOW | …l_packages/main-calendar/lib/core/calendar-helpers.tsx | 40 | export function invalidateThemeTextColorCache() { | CODE |
| LOW | …l_packages/main-calendar/lib/core/calendar-helpers.tsx | 440 | export function defaultCalendarForNewEvent( | CODE |
| LOW | …l_packages/main-calendar/lib/core/calendar-helpers.tsx | 455 | export function showNoEditableCalendarsError(): void { | CODE |
| LOW | …l_packages/main-calendar/lib/core/calendar-helpers.tsx | 466 | export function showReadOnlyCalendarError(): void { | CODE |
| LOW | …l_packages/main-calendar/lib/core/calendar-helpers.tsx | 555 | export function extractNotesFromDescription(description: string) { | CODE |
| LOW | …ages/main-calendar/lib/core/recurring-event-actions.ts | 140 | export function createOccurrenceException(options: EventTimeChangeOptions): void { | CODE |
| LOW | …ages/main-calendar/lib/core/recurring-event-actions.ts | 277 | export async function modifyEventWithRecurringSupport( | CODE |
| LOW | …ackages/main-calendar/lib/core/calendar-data-source.ts | 574 | export function occurrenceForRecurrenceId( | CODE |
| LOW | …ackages/main-calendar/lib/core/calendar-data-source.ts | 605 | export function focusedEventInfoForEvents( | CODE |
| LOW | …racking/specs/open-tracking-composer-extension-spec.ts | 25 | xdescribe('Open tracking composer extension', function openTrackingComposerExtension() { | CODE |
| LOW | …n-tracking/specs/open-tracking-message-status-spec.tsx | 22 | describe('Open tracking message status', function openTrackingMessageStatus() { | CODE |
| LOW | …l_packages/list-unsubscribe/lib/unsubscribe-service.ts | 30 | export function parseListUnsubscribeHeader(header: string): UnsubscribeOption[] { | CODE |
| LOW | …l_packages/list-unsubscribe/lib/unsubscribe-service.ts | 82 | export async function performOneClickUnsubscribe(url: string): Promise<UnsubscribeResult> { | CODE |
| LOW | app/internal_packages/views/lib/sidebar-view.tsx | 36 | export function createSidebarViewComponent(view: ViewManifest) { | CODE |
| LOW | app/internal_packages/views/lib/home/thumbnails.ts | 57 | export function captureThumbnailsOnRender() { | CODE |
| LOW | …notifications/specs/disabled-mail-rules-notif-spec.tsx | 6 | describe('DisabledMailRulesNotification', function DisabledMailRulesNotifTests() { | CODE |
| LOW | …ges/onboarding/specs/page-account-certificate-spec.tsx | 36 | describe('AccountCertificatePage', function accountCertificatePageTests() { | CODE |
| LOW⚡ | …l_packages/onboarding/specs/onboarding-helpers-spec.ts | 344 | describe('serversOutsideDomain', function serversOutsideDomainTests() { | CODE |
| LOW | …internal_packages/onboarding/lib/certificate-review.ts | 44 | export function describeRejectedCertificate( | CODE |
| LOW | …internal_packages/onboarding/lib/certificate-review.ts | 92 | export function forgetCertificateIfServerChanged(account: Account, settingsKey: string) { | CODE |
| LOW | …internal_packages/onboarding/lib/onboarding-helpers.ts | 153 | function applyContainerFolderDefault(populated: Account) { | CODE |
| LOW | …internal_packages/onboarding/lib/onboarding-helpers.ts | 189 | export async function expandAccountWithCommonSettings(account: Account) { | CODE |
| LOW | …internal_packages/onboarding/lib/onboarding-helpers.ts | 326 | export async function buildGmailAccountFromAuthResponse(code: string) { | CODE |
| LOW | …internal_packages/onboarding/lib/onboarding-helpers.ts | 391 | export async function buildOutlookAccountFromAuthResponse( | CODE |
| LOW | …internal_packages/onboarding/lib/onboarding-helpers.ts | 413 | export async function buildMicrosoftAccountFromAuthResponse( | CODE |
| LOW | …internal_packages/onboarding/lib/onboarding-helpers.ts | 549 | export async function finalizeAndValidateAccount(account: Account) { | CODE |
| LOW | …nal_packages/account-sidebar/lib/mbox-export-runner.ts | 56 | export function deactivateMboxExportRunner() { | CODE |
| LOW | app/src/ics-event-helpers.ts | 449 | function removeExistingExceptionVevent( | CODE |
| LOW | app/src/ics-event-helpers.ts | 857 | export function createRecurrenceException( | CODE |
| LOW | app/src/ics-event-helpers.ts | 1106 | export function updateRecurringEventTimes( | CODE |
| LOW | app/src/ics-event-helpers.ts | 1637 | export function updateOccurrenceAttendeeStatus( | CODE |
| LOW | app/src/canvas-utils.ts | 135 | export function canvasWithSystemTrayIconAndText(img, text) { | CODE |
| LOW | app/src/mail-rules-templates.ts | 121 | export function ConditionTemplatesForAccount(account): Template[] { | CODE |
| 41 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …/native/mailspring-fm/Sources/mailspring-fm/main.swift | 1 | import Foundation | COMMENT |
| LOW | app/spec/calendar-helpers-spec.ts | 141 | // only reaches code still computing through moment, and the day math it covered now runs on | COMMENT |
| LOW | app/spec/services/quoted-html-transformer-spec.ts | 401 | }); | COMMENT |
| LOW | app/keymaps/README.m | 1 | # This is the core set of universal, cross-platform keymaps. This is | COMMENT |
| LOW | app/keymaps/README.m | 21 | # uses `command` on mac and `ctrl` on windows and linux. This covers most | COMMENT |
| LOW | …ternal_packages/thread-list/specs/thread-list-spec.tsx | 1 | // const moment = require('moment'); | COMMENT |
| LOW | …ternal_packages/thread-list/specs/thread-list-spec.tsx | 21 | COMMENT | |
| LOW | …ternal_packages/thread-list/specs/thread-list-spec.tsx | 41 | // updated_at: null, | COMMENT |
| LOW | …ternal_packages/thread-list/specs/thread-list-spec.tsx | 61 | // }, | COMMENT |
| LOW | …ternal_packages/thread-list/specs/thread-list-spec.tsx | 81 | // object: 'thread', | COMMENT |
| LOW | …ternal_packages/thread-list/specs/thread-list-spec.tsx | 101 | // id: 'unseen', | COMMENT |
| LOW | …ternal_packages/thread-list/specs/thread-list-spec.tsx | 121 | // created_at: null, | COMMENT |
| LOW | …ternal_packages/thread-list/specs/thread-list-spec.tsx | 141 | // updated_at: null, | COMMENT |
| LOW | …ternal_packages/thread-list/specs/thread-list-spec.tsx | 161 | // name: 'User One', | COMMENT |
| LOW | …ternal_packages/thread-list/specs/thread-list-spec.tsx | 181 | COMMENT | |
| LOW | …ternal_packages/thread-list/specs/thread-list-spec.tsx | 201 | // const c3 = new ListTabular.Column({ | COMMENT |
| LOW | …ternal_packages/thread-list/specs/thread-list-spec.tsx | 221 | // }); | COMMENT |
| LOW | …ternal_packages/thread-list/specs/thread-list-spec.tsx | 241 | // describe('when the workspace is in list mode', function() { | COMMENT |
| LOW | …ternal_packages/thread-list/specs/thread-list-spec.tsx | 261 | // }); | COMMENT |
| LOW | …ternal_packages/thread-list/specs/thread-list-spec.tsx | 281 | // const view = { | COMMENT |
| LOW | …ternal_packages/thread-list/specs/thread-list-spec.tsx | 301 | // advanceClock(100); | COMMENT |
| LOW | …ernal_packages/mcp-server/lib/claude-desktop-config.ts | 1 | import fs from 'fs'; | COMMENT |
| LOW | app/internal_packages/ui-darkside/README.md | 21 | @accent: #F18260; | COMMENT |
| LOW | …internal_packages/ui-darkside/styles/ui-variables.less | 1 | // All themes need a file called `ui-variables` that extends from the base | COMMENT |
| LOW | app/internal_packages/ui-less-is-more/styles/index.less | 1 | //==================================================== | COMMENT |
| LOW | …kages/message-list/specs/message-participants-spec.tsx | 121 | // expect(p1._isToEveryone()).toBe true | COMMENT |
| LOW | …nal_packages/message-list/lib/email-color-detection.ts | 81 | return false; | COMMENT |
| LOW | app/internal_packages/onboarding/lib/page-tutorial.tsx | 41 | xDot: 10, | COMMENT |
| LOW | app/static/style/base/ui-variables.less | 1 | // Color abstraction hierarchy: | COMMENT |
| LOW | app/src/error-logger.js | 61 | return; | COMMENT |
| LOW | app/src/regexp-utils.ts | 1 | import _ from 'underscore'; | COMMENT |
| LOW | app/src/regexp-utils.ts | 201 | // Test cases: https://regex101.com/r/cK0zD8/4 | COMMENT |
| LOW | app/src/safe-shell.ts | 1 | import { shell } from 'electron'; | COMMENT |
| LOW | app/src/secondary-window-bootstrap.ts | 1 | /* eslint import/first: 0 */ | COMMENT |
| LOW | app/src/app-env.ts | 601 | const browserWindow = this.getCurrentWindow(); | COMMENT |
| LOW | app/src/mailsync-process.ts | 441 | } | COMMENT |
| LOW | app/src/mailbox-perspective.ts | 181 | COMMENT | |
| LOW | app/src/mailbox-perspective.ts | 541 | // if you're looking at a folder: | COMMENT |
| LOW | app/src/config.ts | 21 | } else { | COMMENT |
| LOW | app/src/config.ts | 41 | // You may want to watch for changes. Use {::observe} to catch changes to the setting. | COMMENT |
| LOW | app/src/config.ts | 61 | // allows integers greater than `0`: | COMMENT |
| LOW | app/src/config.ts | 81 | // module.exports = | COMMENT |
| LOW | app/src/config.ts | 101 | // enableThing: | COMMENT |
| LOW | app/src/config.ts | 121 | // | COMMENT |
| LOW | app/src/config.ts | 141 | // | COMMENT |
| LOW | app/src/config.ts | 161 | // | COMMENT |
| LOW | app/src/config.ts | 181 | // minimum: 1.5 | COMMENT |
| LOW | app/src/config.ts | 201 | // | COMMENT |
| LOW | app/src/config.ts | 221 | // type: 'object' | COMMENT |
| LOW | app/src/config.ts | 241 | // default: 4 | COMMENT |
| LOW | app/src/config.ts | 261 | // | COMMENT |
| LOW | app/src/config.ts | 361 | } | COMMENT |
| LOW | app/src/config.ts | 381 | // * `keyPath` {String} name of the key to observe | COMMENT |
| LOW | app/src/config.ts | 421 | // | COMMENT |
| LOW | app/src/config.ts | 441 | // | COMMENT |
| LOW | app/src/menu-manager.ts | 21 | AppEnv.commands.onRegistedCommandsChanged(() => this.update()); | COMMENT |
| LOW | app/src/types/jasmine-global.d.ts | 1 | // Global type declarations for the vendored Jasmine 1.x instance. | COMMENT |
| LOW | app/src/registries/component-registry.ts | 41 | // * `options` {Object}: | COMMENT |
| LOW | app/src/flux/stores/database-store.ts | 421 | } | COMMENT |
| LOW | app/src/flux/stores/database-store.ts | 461 | // Returns a {Query} | COMMENT |
| 23 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/spec/counter-proposal-guard-spec.ts | 11 | const GUEST = 'guest@example.org'; | CODE |
| LOW | app/spec/models/contact-spec.ts | 169 | expect(c3.fullName()).toBe('Jane Doe'); | CODE |
| LOW | app/spec/services/mbox-utils-spec.ts | 16 | expect(mboxFromLine('user@example.com', date)).toEqual( | CODE |
| LOW | app/spec/services/mbox-utils-spec.ts | 23 | expect(mboxFromLine('user@example.com', date)).toEqual( | CODE |
| LOW | …p/internal_packages/contacts/specs/vcf-helpers-spec.ts | 240 | expect(result.streetAddress).toBe('123 Main St'); | CODE |
| LOW | …p/internal_packages/contacts/specs/vcf-helpers-spec.ts | 262 | expect(result.formattedValue).toContain('123 Main St'); | CODE |
| LOW | …p/internal_packages/contacts/specs/vcf-helpers-spec.ts | 289 | streetAddress: '123 Main St', | CODE |
| LOW | …p/internal_packages/contacts/specs/vcf-helpers-spec.ts | 442 | streetAddress: '123 Main St', | CODE |
| LOW | …p/internal_packages/contacts/specs/vcf-helpers-spec.ts | 452 | expect(result).toContain('123 Main St'); | CODE |
| LOW | …l_packages/thread-search/specs/search-bar-util-spec.ts | 63 | expect(wrapInQuotes('John Doe')).toBe('"John Doe"'); | CODE |
| LOW | …l_packages/thread-search/specs/search-bar-util-spec.ts | 142 | while ((next = regexp.exec('from:"John Doe"'))) { | CODE |
| LOW | …l_packages/thread-search/specs/search-bar-util-spec.ts | 231 | const query = 'from:"John Doe"'; | CODE |
| LOW | …ernal_packages/thread-search/lib/thread-search-bar.tsx | 327 | className={`thread-search-bar ${showPlaceholder ? 'placeholder' : ''}`} | CODE |
| LOW⚡ | app/internal_packages/views/specs/view-query-spec.ts | 99 | { id: 'a2', emailAddress: 'work@example.org', name: 'Me' }, | CODE |
| LOW⚡ | app/internal_packages/views/specs/view-query-spec.ts | 106 | new Contact({ accountId: 'a2', email: 'work@example.org' }), | CODE |
| LOW⚡ | app/internal_packages/views/specs/view-query-spec.ts | 111 | 'work@example.org', | CODE |
| LOW⚡ | app/internal_packages/views/specs/view-query-spec.ts | 125 | 'work@example.org', | CODE |
| LOW⚡ | app/internal_packages/views/specs/view-query-spec.ts | 134 | accounts: [{ id: 'a2', email: 'work@example.org', name: 'Me' }], | CODE |
| LOW⚡ | app/internal_packages/views/specs/view-query-spec.ts | 135 | addresses: ['work@example.org'], | CODE |
| LOW | …l_packages/onboarding/specs/onboarding-helpers-spec.ts | 215 | const { confirmServers } = await expandAccountForSetup(accountFor('user@example.com')); | CODE |
| LOW⚡ | …l_packages/onboarding/specs/onboarding-helpers-spec.ts | 348 | accountFor('user@example.com', 'imap', { | CODE |
| LOW⚡ | …l_packages/onboarding/specs/onboarding-helpers-spec.ts | 356 | accountFor('user@example.com', 'imap', { | CODE |
| LOW⚡ | …l_packages/onboarding/specs/onboarding-helpers-spec.ts | 364 | accountFor('user@example.com', 'imap', { | CODE |
| LOW | app/src/calendar-utils.ts | 573 | // Some calendar systems just use "user@example.com" directly | COMMENT |
| LOW | app/src/components/tokenizing-text-field.tsx | 1004 | <div className="placeholder">{this.props.placeholder}</div> | CODE |
| LOW | app/src/quickpreview/renderer.html | 30 | 'optimum', 'pattern', 'placeholder', 'poster', 'preload', 'radiogroup', 'readonly', | CODE |
| LOW | app/src/quickpreview/dompurify/purify.min.js | 2 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define | CODE |
| LOW | app/src/services/sanitize-transformer.ts | 195 | 'placeholder', | CODE |
| LOW | playwright/tests/preferences-data.spec.ts | 57 | await nameField.type('Jane Doe'); | CODE |
| LOW | playwright/tests/preferences-data.spec.ts | 71 | expect(testSig.data.name).toBe('Jane Doe'); | CODE |
| LOW | playwright/tests/clipboard-paste.spec.ts | 199 | await writeClipboardText({ 'text/plain': 'placeholder' }); | CODE |
| LOW | playwright/tests/compose.spec.ts | 466 | await expect(urlInput).toHaveAttribute('placeholder', 'http://'); | CODE |
| LOW | playwright/tests/compose.spec.ts | 785 | await composerPage!.keyboard.type('Acme Corp'); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | app/src/flux/stores/undo-redo-store.ts | 166 | print(): void { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/undo-redo-task-pattern.md | 98 | ### Step 1: Add Undo Data Attributes | COMMENT |
| LOW | docs/undo-redo-task-pattern.md | 115 | ### Step 2: Capture State Before Modification | COMMENT |
| LOW | docs/undo-redo-task-pattern.md | 142 | ### Step 3: Set canBeUndone and implement createUndoTask | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ills/app-screenshots/scripts/seed-tracking-metadata.py | 5 | CODE |