Repository Analysis

marktext/marktext

📝A simple and elegant markdown editor, available for Linux, macOS and Windows.

1.5 Likely human-written View on GitHub
1.5
Adjusted Score
1.5
Raw Score
100%
Time Factor
2026-05-29
Last Push
56,656
Stars
TypeScript
Language
203,622
Lines of Code
1011
Files
245
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 2HIGH 0MEDIUM 17LOW 226

Pattern Findings

245 matches across 6 categories. Click a row to expand file-level details.

Fake / Example Data161 hits · 162 pts
SeverityFileLineSnippet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md276> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md276> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md281> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md281> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md411- [ ] Lorem ipsum dolor sit amet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md411- [ ] Lorem ipsum dolor sit amet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md418- [ ] Lorem ipsum dolor sit amet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md418- [ ] Lorem ipsum dolor sit amet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md93Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus. Et legere ocurreret pri, animal tacimates co
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md93Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus. Et legere ocurreret pri, animal tacimates co
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md322+ Lorem ipsum dolor sit amet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md322+ Lorem ipsum dolor sit amet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md338+ Lorem ipsum dolor sit amet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md338+ Lorem ipsum dolor sit amet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md3561. Lorem ipsum dolor sit amet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md3561. Lorem ipsum dolor sit amet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md3681. Lorem ipsum dolor sit amet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md3681. Lorem ipsum dolor sit amet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md3851. Lorem ipsum dolor sit amet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md3851. Lorem ipsum dolor sit amet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md3971. Lorem ipsum dolor sit amet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md3971. Lorem ipsum dolor sit amet
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md660Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus.
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md660Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus.
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md673Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus.
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md673Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus.
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md689Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus.
LOW…kages/website/content/docs/end-user/MARKDOWN_SYNTAX.md689Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus.
LOWpackages/website/public/docs-index.json1[{"slug":"introduction","href":"/docs/introduction","title":"Introduction","tab":"user","tabLabel":"User docs","group":"
LOWpackages/website/public/docs-index.json1[{"slug":"introduction","href":"/docs/introduction","title":"Introduction","tab":"user","tabLabel":"User docs","group":"
LOWpackages/desktop/test/unit/specs/extract-word.spec.ts10const basicCheck = 'Lorem ipsum dolor'
LOWpackages/desktop/test/unit/specs/extract-word.spec.ts12 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce pharetra turpis in ante viverra, sit amet euismod tort
LOWpackages/desktop/test/unit/specs/extract-word.spec.ts12 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce pharetra turpis in ante viverra, sit amet euismod tort
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts54 text: 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy[^1] eirmod tempor invidunt ut la
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts54 text: 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy[^1] eirmod tempor invidunt ut la
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts61 const markdown = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy[^1] eirmod tempor invidun
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts61 const markdown = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy[^1] eirmod tempor invidun
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts73 text: 'Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.'
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts73 text: 'Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.'
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts80 const markdown = `Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts80 const markdown = `Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts92 text: 'Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.'
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts92 text: 'Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.'
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts99 const markdown = `Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts99 const markdown = `Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts127 text: 'Lorem ipsum dolor sit amet, consetetur[^掲応自情表] sadipscing elitr.'
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts127 text: 'Lorem ipsum dolor sit amet, consetetur[^掲応自情表] sadipscing elitr.'
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts134 const markdown = `Lorem ipsum dolor sit amet, consetetur[^掲応自情表] sadipscing elitr.
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts134 const markdown = `Lorem ipsum dolor sit amet, consetetur[^掲応自情表] sadipscing elitr.
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts146 text: 'Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.'
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts146 text: 'Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.'
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts153 const markdown = `Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts153 const markdown = `Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts167 text: 'Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.'
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts167 text: 'Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.'
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts174 const markdown = `Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts174 const markdown = `Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts187 text: 'Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.'
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts187 text: 'Lorem ipsum dolor sit amet, consetetur[^foo1] sadipscing elitr.'
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts191 { type: 'paragraph', text: 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr.' },
101 more matches not shown…
Over-Commented Block54 hits · 54 pts
SeverityFileLineSnippet
LOWpackages/muyajs/lib/parser/utils.js21// export const space = ['\u0020'] // space
LOWpackages/muyajs/lib/parser/marked/urlify.js1// License: BSD
LOWpackages/muyajs/lib/contentState/codeBlockCtrl.js161 // FIXME: Disabled due to #1648.
LOWpackages/muyajs/lib/eventHandler/resize.js1// import resizeCodeBlockLineNumber from '../utils/resizeCodeLineNumber'
LOWpackages/muyajs/lib/assets/libs/snap.svg-min.js1// Snap.svg 0.5.1
LOWpackages/desktop/electron.vite.config.ts61 // --> Bundled as ES Modules
LOW…ges/desktop/test/unit/specs/markdown-footnotes.spec.ts441 // { type: 'paragraph', text: 'foo[^foo1]' },
LOWpackages/desktop/test/e2e/crash-range-offset.spec.ts1// Regression guard for "Failed to execute 'setStart' on 'Range': There is no
LOW…ckages/desktop/test/e2e/crash-update-paragraph.spec.ts1// Regression guard for
LOW…ges/desktop/src/renderer/src/codeMirror/overlayMode.ts1// CodeMirror, copyright (c) by Marijn Haverbeke and others
LOW…esktop/src/renderer/src/codeMirror/markdownMathMode.ts1// CodeMirror "markdown-math" — a GFM-flavoured Markdown mode that delegates
LOWpackages/desktop/src/renderer/src/bus/index.ts1import mitt, { type Emitter } from 'mitt'
LOWpackages/desktop/src/renderer/src/node/fileSearcher.ts1// File-mode searcher; kept as a separate file for backward compatibility with
LOWpackages/desktop/src/main/app/index.ts421 } else {
LOWpackages/muya/vitest.spec.config.ts1// Dedicated vitest config for the CommonMark / GFM spec conformance suites.
LOWpackages/muya/test/spec/roundTrip.spec.ts1// @vitest-environment happy-dom
LOWpackages/muya/test/spec/runner.ts1// Shared CommonMark / GFM spec runner.
LOWpackages/muya/e2e/playwright.config.ts21 use: {
LOWpackages/muya/e2e/playwright.config.ts41 // Chromium selects the full paragraph, Firefox and WebKit select
LOW…uya/src/ui/footnoteTool/__tests__/footnoteTool.spec.ts1// @vitest-environment happy-dom
LOW…ya/src/ui/inlineFormatToolbar/__tests__/config.spec.ts1import { describe, expect, it } from 'vitest';
LOW…ages/muya/src/ui/linkTools/__tests__/linkTools.spec.ts1// @vitest-environment happy-dom
LOW…hQuickInsertMenu/__tests__/replaceBlockByLabel.spec.ts21 parent?: { insertAfter: ReturnType<typeof vi.fn> };
LOW…src/ui/paragraphQuickInsertMenu/__tests__/hint.spec.ts1// @vitest-environment happy-dom
LOW…i/paragraphFrontMenu/__tests__/canTurnIntoMenu.spec.ts1// @vitest-environment happy-dom
LOW…i/paragraphFrontMenu/__tests__/canTurnIntoMenu.spec.ts21// submenu from inside a math/code/html/diagram block at all.
LOW…i/paragraphFrontMenu/__tests__/canTurnIntoMenu.spec.ts81 // The non-empty branch filters down to paragraph/atx-heading/
LOWpackages/muya/src/utils/getLinkInfo.ts1// Extract the `linkInfo` payload that the linkTools popover hands back to
LOWpackages/muya/src/utils/marked/extensions/footnote.ts1import type { Lexer, MarkedExtension, Tokens } from 'marked';
LOWpackages/muya/src/utils/marked/extensions/footnote.ts41 // Marked calls start() with `src.slice(1)` to look for the
LOWpackages/muya/src/utils/marked/extensions/footnote.ts61 // to a preceding `\n`; without that strip an indented-
LOW…src/utils/marked/extensions/__tests__/footnote.spec.ts1import { describe, expect, it } from 'vitest';
LOWpackages/muya/src/utils/__tests__/dompurifyXss.spec.ts1// @vitest-environment happy-dom
LOWpackages/muya/src/utils/__tests__/dompurifyXss.spec.ts21// The new repo keeps this gate at
LOWpackages/muya/src/utils/__tests__/getLinkInfo.spec.ts1// @vitest-environment happy-dom
LOWpackages/muya/src/state/renderToStaticHTML.ts81// content, not a reference. We blank them out before scanning for refs and
LOW…es/muya/src/state/__tests__/renderToStaticHTML.spec.ts1// @vitest-environment happy-dom
LOW…es/muya/src/state/__tests__/renderToStaticHTML.spec.ts121 // marktext b8e2cd82 "Fix inline html renderer" added a
LOWpackages/muya/src/inlineRenderer/utils.ts41// export const unicodeZsCategory = [
LOWpackages/muya/src/__tests__/getTOC.spec.ts1// @vitest-environment happy-dom
LOWpackages/muya/src/selection/imageDisplay.ts1import type { ImageToken } from '../inlineRenderer/types';
LOWpackages/muya/src/event/__tests__/focusBlur.spec.ts1// @vitest-environment happy-dom
LOWpackages/muya/src/editor/linkMouseEvents.ts1import type Format from '../block/base/format';
LOWpackages/muya/src/editor/linkMouseEvents.ts21// For the markdown and reference-link variants we additionally require the
LOW…ages/muya/src/editor/__tests__/linkMouseEvents.spec.ts261 const span = document.createElement('span');
LOWpackages/muya/src/block/types.ts1import type { Muya } from '../muya';
LOW…ntent/atxHeadingContent/__tests__/enterHandler.spec.ts1// @vitest-environment happy-dom
LOW…c/block/content/tableCell/__tests__/tabHandler.spec.ts1import { describe, expect, it, vi } from 'vitest';
LOW…/content/codeBlockContent/__tests__/tabHandler.spec.ts1// @vitest-environment happy-dom
LOW…/src/block/gfm/table/__tests__/removeRowColumn.spec.ts1// @vitest-environment happy-dom
LOWpackages/muya/src/block/base/format.ts1681 scrollPage.breadthFirstTraverse((node) => {
LOW…ges/muya/src/block/base/__tests__/formatCursor.spec.ts1import { describe, expect, it } from 'vitest';
LOWpackages/muya/src/block/base/__tests__/autoPair.spec.ts201 // Without this branch the browser may collapse the trailing
LOW…/muya/src/clipboard/__tests__/getClipboardData.spec.ts81// able to copy table cell"). marktext's old `paragraphCtrl.selectTableCells`
Decorative Section Separators17 hits · 51 pts
SeverityFileLineSnippet
MEDIUMscripts/postinstall.ts59// ── 2. Download + extract Electron binary ────────────────────────────────────
MEDIUMscripts/postinstall.ts154// ── 4. Rebuild native modules for Electron ABI ──────────────────────────────
MEDIUMscripts/postinstall.ts158// ── 5. Generate minified locale files ───────────────────────────────────────
MEDIUMpackages/desktop/electron-builder.yml13 # ================================
MEDIUMpackages/desktop/electron-builder.yml15 # ================================
MEDIUMpackages/muya/src/block/base/__tests__/autoPair.spec.ts70// ── marktext 358fa83d "Update auto pair quote logic" (#2960) ──────────────
MEDIUMpackages/muya/src/block/base/__tests__/autoPair.spec.ts70// ── marktext 358fa83d "Update auto pair quote logic" (#2960) ──────────────
MEDIUMpackages/muya/src/block/base/__tests__/autoPair.spec.ts125// ── marktext 3fa8a9ae "no need to auto pair in inline code" (#1423) ───────
MEDIUMpackages/muya/src/block/base/__tests__/autoPair.spec.ts125// ── marktext 3fa8a9ae "no need to auto pair in inline code" (#1423) ───────
MEDIUMpackages/muya/src/block/base/__tests__/autoPair.spec.ts155// ── marktext 4278362f "disable autocompletion in inline math" (#715) ─────
MEDIUMpackages/muya/src/block/base/__tests__/autoPair.spec.ts155// ── marktext 4278362f "disable autocompletion in inline math" (#715) ─────
MEDIUMpackages/muya/src/block/base/__tests__/autoPair.spec.ts174// ── marktext 701fb9ae "Append soft-lines on text removal" (#2853) ────────
MEDIUMpackages/muya/src/block/base/__tests__/autoPair.spec.ts174// ── marktext 701fb9ae "Append soft-lines on text removal" (#2853) ────────
MEDIUMpackages/muya/src/block/base/__tests__/autoPair.spec.ts210// ── marktext 67e18176 "Enter multiple lines in Chinese" (#1117) ──────────
MEDIUMpackages/muya/src/block/base/__tests__/autoPair.spec.ts210// ── marktext 67e18176 "Enter multiple lines in Chinese" (#1117) ──────────
MEDIUMpackages/muya/src/block/base/__tests__/autoPair.spec.ts233// ── marktext bbea7eca "do not auto-pair after alphanumeric" (#2843) ──────
MEDIUMpackages/muya/src/block/base/__tests__/autoPair.spec.ts233// ── marktext bbea7eca "do not auto-pair after alphanumeric" (#2843) ──────
Hallucination Indicators2 hits · 20 pts
SeverityFileLineSnippet
CRITICALpackages/muyajs/lib/ui/imageSelector/index.js202 this.muya.contentState.stateRender.urlMap.set(newSrc, localPath)
CRITICALpackages/muya/src/ui/imageEditTool/index.ts246 this.muya.editor.inlineRenderer.renderer.urlMap.set(uploadedSrc, localPath);
Verbosity Indicators5 hits · 8 pts
SeverityFileLineSnippet
LOWpackages/muyajs/lib/contentState/pasteCtrl.js466 // Step 1: if select content, cut the content, and chop the block text into two part by the cursor.
LOWpackages/muyajs/lib/contentState/pasteCtrl.js470 // Step 2: when insert the fragments, check begin a new block, or insert into pre block.
LOWpackages/muyajs/lib/contentState/pasteCtrl.js577 // Step 3: set cursor and render
LOWpackages/desktop/test/e2e/layout-toggles.spec.ts98 // Step 1: ensure rightColumn='search' (sidebar width ≥ 220 with the
LOWpackages/desktop/test/e2e/layout-toggles.spec.ts113 // Step 2: click search icon again to collapse to icon strip. The sidebar
Hyper-Verbose Identifiers6 hits · 6 pts
SeverityFileLineSnippet
LOWpackages/muya/e2e/tests/inline/shortcuts.spec.ts6async function tripleClickFirstParagraph(page: import('@playwright/test').Page) {
LOWpackages/muya/e2e/tests/inline/format-toolbar.spec.ts5async function selectAllOfFirstParagraph(page: import('@playwright/test').Page) {
LOWpackages/muya/e2e/tests/typing/ime.spec.ts51async function expectActiveTextToContain(
LOWpackages/muya/e2e/tests/editing/clipboard.spec.ts98async function grantClipboardPermissions(
LOWpackages/muya/src/ui/paragraphQuickInsertMenu/index.ts22function checkCanInsertFrontMatter(muya: Muya, block: ParagraphContent) {
LOWpackages/muya/src/state/markdownToState.ts17function restoreTableEscapeCharacters(text: string) {