fix: count words inside code blocks and inline code (#43)#47
Merged
Conversation
The old word-count regex stripped fenced code blocks and inline code before splitting on whitespace, causing massive undercounts on code-heavy notes (reporter saw 127,260 in Obsidian → 34,608 in ZenNotes). Obsidian counts those tokens, so we should too. Extracts the logic into a small `countWords` helper that only strips YAML frontmatter, plus a vitest suite covering the regression case and edge cases (CRLF frontmatter, --- horizontal rules in body, empty input).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #43 — the StatusBar word count was massively undercounting code-heavy notes (the reporter saw 127,260 words in Obsidian vs 34,608 in ZenNotes).
Root cause: the inline regex in
StatusBar.tsxstripped fenced code blocks and inline code spans before splitting on whitespace. Obsidian counts those tokens, so we should too.The fix extracts the logic into a small
countWordshelper that only strips YAML frontmatter (which Obsidian also excludes), then counts every non-whitespace token. Behavior verified end-to-end against a test note: 52 words (buggy) → 76 words (fixed), matching a hand count.Test plan
packages/app-core/src/lib/word-count.test.ts— 9 vitest cases including the regression for issue [Bug] Words Count Stat is Incorrect #43 (words inside code blocks and inline code), CRLF frontmatter,---horizontal rules in body, empty inputnpx vitest run— all 82 tests in@zennotes/app-corepassnpx tsc --noEmit— clean