📝A simple and elegant markdown editor, available for Linux, macOS and Windows.
This report summarizes scanner evidence for marktext/marktext, a TypeScript project with 63,386 GitHub stars. SynthScan examined 282,886 lines of code across 1713 source files, recording 289 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 1.3 (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? 156 finding(s).
Are imports declared and package/API names verified? 121 finding(s).
Are wrappers, guards, and repeated structures necessary? 56 finding(s).
Which changes need focused human review? 289 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 289 distinct pattern matches across 11 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 227 | > Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante | CODE |
| LOW⚡ | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 227 | > Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante | CODE |
| LOW⚡ | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 232 | > Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante. | CODE |
| LOW⚡ | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 232 | > Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante. | CODE |
| LOW⚡ | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 510 | - [ ] Lorem ipsum dolor sit amet | CODE |
| LOW⚡ | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 510 | - [ ] Lorem ipsum dolor sit amet | CODE |
| LOW⚡ | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 517 | - [ ] Lorem ipsum dolor sit amet | CODE |
| LOW⚡ | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 517 | - [ ] Lorem ipsum dolor sit amet | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 81 | Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus. Et legere ocurreret pri, animal tacimates co | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 81 | Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus. Et legere ocurreret pri, animal tacimates co | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 277 | - Lorem ipsum dolor sit amet | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 277 | - Lorem ipsum dolor sit amet | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 293 | - Lorem ipsum dolor sit amet | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 293 | - Lorem ipsum dolor sit amet | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 311 | 1. Lorem ipsum dolor sit amet | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 311 | 1. Lorem ipsum dolor sit amet | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 323 | 1. Lorem ipsum dolor sit amet | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 323 | 1. Lorem ipsum dolor sit amet | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 339 | 1. Lorem ipsum dolor sit amet | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 339 | 1. Lorem ipsum dolor sit amet | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 351 | 1. Lorem ipsum dolor sit amet | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 351 | 1. Lorem ipsum dolor sit amet | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 846 | Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus. | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 846 | Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus. | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 859 | Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus. | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 859 | Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus. | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 875 | Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus. | CODE |
| LOW | …kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md | 875 | Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus. | CODE |
| LOW | packages/website/public/docs-index.json | 175 | "body": "Markdown Syntax This guide introduces Markdown syntax supported by MarkText and the optional extensions con | CODE |
| LOW | packages/website/public/docs-index.json | 175 | "body": "Markdown Syntax This guide introduces Markdown syntax supported by MarkText and the optional extensions con | CODE |
| LOW⚡ | packages/desktop/test/unit/data/common/Blockquotes.md | 7 | > Lorem Ipsum is simply dummy text of the printing and typesetting industry. | CODE |
| LOW⚡ | packages/desktop/test/unit/data/common/Blockquotes.md | 8 | > Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of | CODE |
| LOW⚡ | packages/desktop/test/unit/data/common/Blockquotes.md | 15 | > 1. Lorem Ipsum is simply dummy text 1 | CODE |
| LOW⚡ | packages/desktop/test/unit/data/common/Blockquotes.md | 16 | > 2. Lorem Ipsum is simply dummy text 2 | CODE |
| LOW⚡ | packages/desktop/test/unit/data/common/Blockquotes.md | 17 | > 3. Lorem Ipsum is simply dummy text 3 | CODE |
| LOW | packages/desktop/test/e2e/quick-open-recent.spec.ts | 25 | await expect(quickInput).toHaveAttribute('placeholder', 'Search file to open') | CODE |
| LOW | packages/desktop/test/e2e/quick-open-recent.spec.ts | 35 | await expect(recentInput).toHaveAttribute('placeholder', 'Search recent files and folders') | CODE |
| LOW | packages/desktop/test/e2e/quick-open-recent.spec.ts | 48 | await expect(reopenedInput).toHaveAttribute('placeholder', 'Search recent files and folders') | CODE |
| LOW | packages/desktop/test/e2e/source-toc-scroll.spec.ts | 15 | for (let p = 0; p < 6; p++) parts.push(`Filler paragraph ${p} under heading ${i}. Lorem ipsum dolor.`) | CODE |
| LOW | packages/desktop/test/e2e/toc-scroll.spec.ts | 22 | parts.push(`Filler paragraph ${p} under heading ${i}. Lorem ipsum dolor sit amet, consectetur adipiscing elit.`) | CODE |
| LOW | packages/desktop/test/e2e/toc-scroll.spec.ts | 22 | parts.push(`Filler paragraph ${p} under heading ${i}. Lorem ipsum dolor sit amet, consectetur adipiscing elit.`) | CODE |
| LOW | packages/desktop/test/e2e/i18n-shell.spec.ts | 91 | return input ? input.getAttribute('placeholder') : null | CODE |
| LOW | packages/desktop/test/e2e/multi-folder-sidebar.spec.ts | 75 | await expect(quickInput).toHaveAttribute('placeholder', 'Search file to open') | CODE |
| LOW | packages/desktop/static/locales/tr.json | 316 | "placeholder": "Çalıştırmak için bir komut yazın", | CODE |
| LOW | packages/desktop/static/locales/tr.json | 419 | "placeholder": "Tercihlerde ara..." | CODE |
| LOW | packages/desktop/static/locales/tr.json | 742 | "placeholder": "Tuş birleşimine basın", | CODE |
| LOW | packages/desktop/static/locales/nl.json | 316 | "placeholder": "Typ een opdracht om uit te voeren", | CODE |
| LOW | packages/desktop/static/locales/nl.json | 419 | "placeholder": "Voorkeuren zoeken..." | CODE |
| LOW | packages/desktop/static/locales/nl.json | 742 | "placeholder": "Druk op de toetsencombinatie", | CODE |
| LOW | packages/desktop/static/locales/ja.json | 316 | "placeholder": "実行するコマンドの入力", | CODE |
| LOW | packages/desktop/static/locales/ja.json | 419 | "placeholder": "設定の検索..." | CODE |
| LOW | packages/desktop/static/locales/ja.json | 742 | "placeholder": "キーの組み合わせを押す", | CODE |
| LOW | packages/desktop/static/locales/de.json | 316 | "placeholder": "Befehl zum Ausführen eingeben", | CODE |
| LOW | packages/desktop/static/locales/de.json | 419 | "placeholder": "In Einstellungen suchen..." | CODE |
| LOW | packages/desktop/static/locales/de.json | 742 | "placeholder": "Tastenkombination drücken", | CODE |
| LOW | packages/desktop/static/locales/ru.json | 316 | "placeholder": "Введите команду", | CODE |
| LOW | packages/desktop/static/locales/ru.json | 419 | "placeholder": "Поиск настроек..." | CODE |
| LOW | packages/desktop/static/locales/ru.json | 742 | "placeholder": "Нажмите сочетание клавиш", | CODE |
| LOW | packages/desktop/static/locales/zh-CN.json | 316 | "placeholder": "输入要执行的命令", | CODE |
| LOW | packages/desktop/static/locales/zh-CN.json | 419 | "placeholder": "搜索偏好设置…" | CODE |
| 57 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/postinstall.ts | 161 | COMMENT | |
| LOW | packages/desktop/test/unit/specs/search-prefill.spec.ts | 1 | import { describe, it, expect, vi } from 'vitest' | COMMENT |
| LOW | …it/specs/edit-menu-native-clipboard-roles-5582.spec.ts | 1 | import { describe, expect, it, vi } from 'vitest' | COMMENT |
| LOW | …ges/desktop/test/e2e/source-mode-reload-images.spec.ts | 1 | import { expect, test } from '@playwright/test' | COMMENT |
| LOW | …desktop/test/e2e/issue-5076-adjacent-footnotes.spec.ts | 1 | import { expect, test } from '@playwright/test' | COMMENT |
| LOW | packages/desktop/test/e2e/code-block-typing.spec.ts | 1 | import { expect, test } from '@playwright/test' | COMMENT |
| LOW | packages/desktop/test/e2e/code-block-typing.spec.ts | 21 | // How the live keyboard flow actually applies the language (verified against | COMMENT |
| LOW | packages/desktop/test/e2e/issue-4356.spec.ts | 1 | // Regression guard for issue #4356: TypeError: Cannot read properties of | COMMENT |
| LOW | …es/desktop/test/e2e/issue-2423-sequence-arrows.spec.ts | 1 | import { expect, test } from '@playwright/test' | COMMENT |
| LOW | packages/desktop/test/e2e/list-indent.spec.ts | 1 | import { expect, test } from '@playwright/test' | COMMENT |
| LOW | packages/desktop/test/e2e/parity-pg1-menu-state.spec.ts | 1 | import { expect, test } from '@playwright/test' | COMMENT |
| LOW | packages/desktop/test/e2e/code-block-wrap.spec.ts | 1 | import { expect, test } from '@playwright/test' | COMMENT |
| LOW | packages/desktop/test/e2e/export-pdf.spec.ts | 1 | import { expect, test } from '@playwright/test' | COMMENT |
| LOW | packages/desktop/test/e2e/toc-panel-content.spec.ts | 1 | import { expect, test } from '@playwright/test' | COMMENT |
| LOW | …ages/desktop/test/e2e/parity-source-undo-saved.spec.ts | 201 | .join('\n') | COMMENT |
| LOW | packages/desktop/test/e2e/image-relative-path.spec.ts | 1 | import { expect, test } from '@playwright/test' | COMMENT |
| LOW | …kages/desktop/test/e2e/toc-collapse-state-3028.spec.ts | 1 | import { expect, test } from '@playwright/test' | COMMENT |
| LOW | packages/desktop/test/e2e/external-reload-undo.spec.ts | 81 | // plausible scroll element on `isSameTabReload`, runs `editor.setValue`, then | COMMENT |
| LOW | packages/desktop/test/e2e/parity-cursor-lang.spec.ts | 141 | // Coverage backfill (checklist item 270). Typing `#`/`##` to create an ATX | COMMENT |
| LOW | packages/desktop/test/e2e/tabs.spec.ts | 241 | COMMENT | |
| LOW | packages/desktop/test/e2e/crash-range-offset.spec.ts | 1 | // Regression guard for "Failed to execute 'setStart' on 'Range': There is no | COMMENT |
| LOW | packages/desktop/test/e2e/all-blocks-roundtrip.spec.ts | 21 | // (editor-input.spec.ts, parity-source-undo-saved.spec.ts), and per-fixture | COMMENT |
| LOW | packages/desktop/test/e2e/issue-4374.spec.ts | 1 | // Regression guard for issue #4374: | COMMENT |
| LOW | …ckages/desktop/test/e2e/crash-update-paragraph.spec.ts | 1 | // Regression guard for | COMMENT |
| LOW | packages/desktop/test/e2e/copy-anchor-link.spec.ts | 1 | import { expect, test } from '@playwright/test' | COMMENT |
| LOW | packages/desktop/test/e2e/copy-anchor-link.spec.ts | 21 | // 2. Activation emits the engine event `heading-copy-link` with | COMMENT |
| LOW | packages/desktop/test/e2e/image-edit-tool.spec.ts | 21 | // exists in the desktop renderer (editor.vue) is the menu/IPC chain: | COMMENT |
| LOW | …ges/desktop/src/renderer/src/codeMirror/overlayMode.ts | 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others | COMMENT |
| LOW | …esktop/src/renderer/src/codeMirror/markdownMathMode.ts | 1 | // CodeMirror "markdown-math" — GFM Markdown with math spans delegated to stex, | COMMENT |
| LOW | packages/desktop/src/renderer/src/util/tocNavigation.ts | 1 | // Maps a sidebar TOC entry (its slug) onto the matching heading element in the | COMMENT |
| LOW | …/src/renderer/src/components/editorWithTabs/editor.vue | 721 | editor.value.hideAllFloatTools() | COMMENT |
| LOW | …/src/renderer/src/components/editorWithTabs/editor.vue | 1461 | // source-mode change in one step, matching legacy muyajs' full-state | COMMENT |
| LOW | packages/desktop/src/renderer/src/node/fileSearcher.ts | 1 | // File-mode searcher; kept as a separate file for backward compatibility with | COMMENT |
| LOW | packages/desktop/src/main/filesystem/index.ts | 121 | // power-loss window that otherwise leaves a full-length, zero-filled file | COMMENT |
| LOW | packages/muya/vitest.spec.config.ts | 1 | // Dedicated vitest config for the CommonMark / GFM spec conformance suites. | COMMENT |
| LOW | packages/muya/vite.config.ts | 21 | }, | COMMENT |
| LOW | packages/muya/test/spec/roundTrip.spec.ts | 1 | // @vitest-environment happy-dom | COMMENT |
| LOW | packages/muya/test/spec/runner.ts | 1 | // Shared CommonMark / GFM spec runner. | COMMENT |
| LOW | packages/muya/e2e/playwright.config.ts | 21 | use: { | COMMENT |
| LOW | packages/muya/e2e/playwright.config.ts | 41 | // Chromium selects the full paragraph, Firefox and WebKit select | COMMENT |
| LOW | …muya/e2e/tests/ui/code-block-language-selector.spec.ts | 1 | import type { Page } from '@playwright/test'; | COMMENT |
| LOW | …ts/ui/code-block-language-selector-orphan-4654.spec.ts | 1 | import type { Page } from '@playwright/test'; | COMMENT |
| LOW | …ckages/muya/e2e/tests/typing/math-and-diagrams.spec.ts | 61 | COMMENT | |
| LOW | …ckages/muya/e2e/tests/typing/soft-break-height.spec.ts | 1 | import type { Page } from '@playwright/test'; | COMMENT |
| LOW | …uya/src/ui/footnoteTool/__tests__/footnoteTool.spec.ts | 1 | // @vitest-environment happy-dom | COMMENT |
| LOW | …ya/src/ui/inlineFormatToolbar/__tests__/config.spec.ts | 1 | import { describe, expect, it } from 'vitest'; | COMMENT |
| LOW | …ages/muya/src/ui/linkTools/__tests__/linkTools.spec.ts | 1 | // @vitest-environment happy-dom | COMMENT |
| LOW | …codeBlockLanguageSelector/__tests__/selectItem.spec.ts | 1 | // @vitest-environment happy-dom | COMMENT |
| LOW | …hQuickInsertMenu/__tests__/replaceBlockByLabel.spec.ts | 21 | state?: IFakeBlockState; | COMMENT |
| LOW | …c/ui/paragraphQuickInsertMenu/__tests__/search.spec.ts | 1 | // @vitest-environment happy-dom | COMMENT |
| LOW | …src/ui/paragraphQuickInsertMenu/__tests__/hint.spec.ts | 1 | // @vitest-environment happy-dom | COMMENT |
| LOW | …c/ui/tableChessboard/__tests__/tableChessboard.spec.ts | 1 | // @vitest-environment happy-dom | COMMENT |
| LOW | …i/paragraphFrontMenu/__tests__/canTurnIntoMenu.spec.ts | 1 | // @vitest-environment happy-dom | COMMENT |
| LOW | …i/paragraphFrontMenu/__tests__/canTurnIntoMenu.spec.ts | 21 | // submenu from inside a math/code/html/diagram block at all. | COMMENT |
| LOW | packages/muya/src/config/index.ts | 361 | // pandoc's `tex_math_single_backslash`: `\(…\)` inline and `\[…\]` display. | COMMENT |
| LOW | packages/muya/src/utils/marked/extensions/math.ts | 41 | // Kept in lockstep with the editor's `inline_math` rule | COMMENT |
| LOW | packages/muya/src/utils/marked/extensions/footnote.ts | 1 | import type { Lexer, MarkedExtension, Tokens } from 'marked'; | COMMENT |
| LOW | packages/muya/src/utils/__tests__/dompurifyXss.spec.ts | 1 | // @vitest-environment jsdom | COMMENT |
| LOW | packages/muya/src/utils/__tests__/dompurifyXss.spec.ts | 21 | // these tests lock the contracts the renderer relies on so a future | COMMENT |
| LOW | packages/muya/src/utils/__tests__/diffToTextOp.spec.ts | 1 | // @vitest-environment node | COMMENT |
| 46 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …2e/tests/ui/quick-insert-table-after-undo-5355.spec.ts | 82 | async function expectMarkdownAfterFrames(page: Page, markdown: string): Promise<void> { | CODE |
| LOW | packages/muya/e2e/tests/inline/shortcuts.spec.ts | 6 | async function tripleClickFirstParagraph(page: import('@playwright/test').Page) { | CODE |
| LOW | packages/muya/e2e/tests/inline/format-color.spec.ts | 6 | async function selectAllOfFirstParagraph(page: Page) { | CODE |
| LOW | packages/muya/e2e/tests/inline/format-toolbar.spec.ts | 6 | async function selectAllOfFirstParagraph(page: Page) { | CODE |
| LOW | packages/muya/e2e/tests/typing/ime.spec.ts | 51 | async function expectActiveTextToContain( | CODE |
| LOW | …a/e2e/tests/editing/select-all-after-undo-5387.spec.ts | 19 | async function undoNewParagraphAfterFirstLine(page: Page, markdown: string): Promise<void> { | CODE |
| LOW | …e/tests/editing/cross-block-modifier-edit-5415.spec.ts | 34 | async function selectFromBulletIntoParagraph(page: Page): Promise<void> { | CODE |
| LOW | …/tests/editing/cut-into-nested-code-block-4903.spec.ts | 31 | async function loadAndSelectIntoNestedBlock( | CODE |
| LOW | packages/muya/e2e/tests/editing/clipboard.spec.ts | 254 | async function grantClipboardPermissions( | CODE |
| LOW | …sts/editing/language-input-code-selection-4903.spec.ts | 39 | async function selectFromLanguageInputIntoCode( | CODE |
| LOW | packages/muya/src/ui/paragraphQuickInsertMenu/index.ts | 25 | function checkCanInsertFrontMatter(muya: Muya, block: ParagraphContent) { | CODE |
| LOW | packages/muya/src/utils/paste.ts | 190 | export async function resolveClipboardImagePath( | CODE |
| LOW | packages/muya/src/utils/codeBlockLineNumbers.ts | 83 | export function repositionLineNumberSpans( | CODE |
| LOW | packages/muya/src/utils/marked/extensions/math.ts | 104 | export function singleBackslashMathExtension(options: IOptions = {}) { | CODE |
| LOW | packages/muya/src/utils/marked/extensions/math.ts | 128 | export function doubleBackslashMathExtension(options: IOptions = {}) { | CODE |
| LOW | …s/muya/src/utils/marked/extensions/inlineDelimiters.ts | 162 | export default function inlineDelimitersExtension(): MarkedExtension { | CODE |
| LOW | packages/muya/src/utils/marked/extensions/fancyLists.ts | 63 | export function endListItemsAtFancyMarkers(lexer: Lexer) { | CODE |
| LOW | …uya/src/utils/marked/extensions/multilineBlockquote.ts | 20 | export default function multilineBlockquoteExtension(enabled: boolean): MarkedExtension { | CODE |
| LOW | …kages/muya/src/utils/marked/extensions/githubAlerts.ts | 31 | export function normalizeGithubAlertTokens(tokens: Token[], lexer: Lexer): void { | CODE |
| LOW | packages/muya/src/utils/turndownService/index.ts | 67 | function hasStrongSemanticAncestor(node: Node): boolean { | CODE |
| LOW | packages/muya/src/utils/turndownService/index.ts | 71 | function hasEmphasisSemanticAncestor(node: Node): boolean { | CODE |
| LOW | packages/muya/src/utils/turndownService/index.ts | 120 | function normalizeTaskMarkerSpacing(content: string) { | CODE |
| LOW | packages/muya/src/utils/turndownService/index.ts | 124 | function containsOwnTaskListCheckbox(node: Node) { | CODE |
| LOW | packages/muya/src/state/stateToMarkdown.ts | 35 | function startsWithIndentedHeading(state: TState): boolean { | CODE |
| LOW | packages/muya/src/inlineRenderer/searchHighlights.ts | 4 | function firstHighlightEndingAfter(highlights: readonly IHighlight[], offset: number): number { | CODE |
| LOW | …uya/src/__tests__/headingFromMultilineText5366.spec.ts | 40 | function bootWithCaretInFirstBlock(markdown: string): Muya { | CODE |
| LOW | …story/__tests__/undoRedoCoalescedListRoundTrip.spec.ts | 28 | function placeCursorOnFirstContent(muya: Muya): void { | CODE |
| LOW | packages/muya/src/selection/affiliation.ts | 161 | export function buildSelectionAffiliation( | CODE |
| LOW | packages/muya/src/editor/dragDropImage.ts | 302 | export function attachDragDropImageHandlers(muya: Muya): void { | CODE |
| LOW | packages/muya/src/block/folding.ts | 55 | function getContainingFoldedHeadings(block: TreeNode): IFoldableHeading[] { | CODE |
| LOW | packages/muya/src/block/paragraphIndentation.ts | 19 | export function convertIndentedParagraphs(contents: Content[], selection: IResolvedTextSelection): void { | CODE |
| LOW | …ragraphContent/__tests__/unindentListKindSplit.spec.ts | 82 | function assertListsHoldTheirOwnItems(state: TState[]): void { | CODE |
| LOW | …tent/paragraphContent/__tests__/indentListKind.spec.ts | 82 | function assertListsHoldTheirOwnItems(state: TState[]): void { | CODE |
| LOW | …/muya/src/block/base/__tests__/formatImageEmit.spec.ts | 59 | function stubSelectionAtEmptyImage(content: Format): void { | CODE |
| LOW | …/muya/src/block/base/__tests__/arrowNavigation.spec.ts | 326 | function listWithChildlessMiddleItem(): TState[] { | CODE |
| LOW | …/muya/src/block/base/__tests__/arrowNavigation.spec.ts | 529 | function paragraphWithTrailingSoftBreak(): TState[] { | CODE |
| LOW | packages/muya/src/clipboard/paste.ts | 98 | function canPlainUrlFallbackAutoLink( | CODE |
| LOW | packages/muya/src/clipboard/paste.ts | 117 | function shouldPreserveBareUrlLinkForPaste( | CODE |
| LOW | packages/muya/src/clipboard/cut.ts | 129 | function prunePrecedingWithinBranch(branch: TreeNode, node: TreeNode): void { | CODE |
| LOW | packages/muya/src/clipboard/cut.ts | 286 | function removeEmptyTableStructure(clipboard: Clipboard): boolean { | CODE |
| LOW | packages/muya/src/clipboard/copyData.ts | 66 | function getTableSelectionClipboardData( | CODE |
| LOW | packages/muya/src/clipboard/copyData.ts | 127 | function buildPartialContainerState( | CODE |
| LOW | packages/muya/src/clipboard/copyData.ts | 281 | function collectSameOutMostBlockState(order: ICopyOrder): TState[] { | CODE |
| LOW | …uya/src/clipboard/__tests__/pasteHandlerParity.spec.ts | 310 | function makeClipboardWithTableSelection( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/postinstall.ts | 59 | // ── 2. Download + extract Electron binary ──────────────────────────────────── | COMMENT |
| MEDIUM⚡ | scripts/postinstall.ts | 154 | // ── 4. Rebuild native modules for Electron ABI ────────────────────────────── | COMMENT |
| MEDIUM⚡ | scripts/postinstall.ts | 158 | // ── 5. Generate minified locale files ─────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | scripts/postinstall.ts | 162 | // ── 6. Emit @muyajs/core typings ──────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/muya/src/block/base/__tests__/autoPair.spec.ts | 59 | // ── marktext 358fa83d "Update auto pair quote logic" (#2960) ────────────── | COMMENT |
| MEDIUM | packages/muya/src/block/base/__tests__/autoPair.spec.ts | 59 | // ── marktext 358fa83d "Update auto pair quote logic" (#2960) ────────────── | COMMENT |
| MEDIUM | packages/muya/src/block/base/__tests__/autoPair.spec.ts | 155 | // ── marktext 701fb9ae "Append soft-lines on text removal" (#2853) ──────── | COMMENT |
| MEDIUM | packages/muya/src/block/base/__tests__/autoPair.spec.ts | 155 | // ── marktext 701fb9ae "Append soft-lines on text removal" (#2853) ──────── | COMMENT |
| MEDIUM | packages/muya/src/block/base/__tests__/autoPair.spec.ts | 191 | // ── marktext 67e18176 "Enter multiple lines in Chinese" (#1117) ────────── | COMMENT |
| MEDIUM | packages/muya/src/block/base/__tests__/autoPair.spec.ts | 191 | // ── marktext 67e18176 "Enter multiple lines in Chinese" (#1117) ────────── | COMMENT |
| MEDIUM | packages/muya/src/block/base/__tests__/autoPair.spec.ts | 279 | // ── marktext #3573 absorb manually typed closing markdown marker ────────── | COMMENT |
| MEDIUM | packages/muya/src/block/base/__tests__/autoPair.spec.ts | 279 | // ── marktext #3573 absorb manually typed closing markdown marker ────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | packages/muya/src/ui/imageEditTool/index.ts | 418 | this.muya.editor.inlineRenderer.renderer.urlMap.set(uploadedSrc, localPath); | CODE |
| CRITICAL | …a/src/__tests__/blockCommandsDetachedCaret5355.spec.ts | 44 | return muya.editor.history._stack.undo.map(entry => entry.selection); | CODE |
| CRITICAL | …src/selection/__tests__/selectAllAfterUndo5387.spec.ts | 41 | expect(muya.editor.history._stack.undo.map(entry => entry.selection)).toEqual([null]); | CODE |
| CRITICAL | packages/muya/src/editor/dragDropImage.ts | 212 | muya.editor.inlineRenderer.renderer.urlMap.set(newSrc, src); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …desktop/test/e2e/search-prefill-from-selection.spec.ts | 60 | // after that deferred commit — robust even under xvfb's erratic frame timing, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/muya/e2e/BACKLOG.md | 101 | ## Phase 4 — Stability / perf / a11y guardrails | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/release.yml | 231 | # Create the release as a draft (assets allowed), then promote it to a | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …es/muya/e2e/tests/blocks/codeblock-scroll-3191.spec.ts | 35 | // Step 3: keep typing characters. After each keystroke the scroll must | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …es/muya/e2e/tests/blocks/codeblock-scroll-3191.spec.ts | 35 | // Step 3: keep typing characters. After each keystroke the scroll must | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/merge-release-artifacts.py | 10 | CODE |