You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+3-1Lines changed: 3 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,10 +2,12 @@
2
2
3
3
All notable changes to the "pointblank" extension will be documented in this file.
4
4
5
-
## [0.6.4] - 2025-06-27
5
+
## [0.7.0] - 2025-06-29
6
6
### Added
7
7
- You can now select a single-line bullet point for copying, making it easier to duplicate or move bullet items.
8
8
- When typing or pasting from the start of a list item line, the bullet point style now matches the next or previous list item line at the same level of indent for consistency.
9
+
### Changed
10
+
- Replaced the document parser with a high-performance "Dirty Range" incremental parser, eliminating typing lag in large documents.
9
11
### Fixed
10
12
- Pasting a bullet at the beginning of a line no longer erases the line; pasted content is merged or inserted intelligently.
11
13
- Numbered list items will remove their default bullet point.
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,7 +17,7 @@ Point Blank's architecture is designed to be modular, performant, and maintainab
17
17
*`DocumentModel`: Manages the document's state and uses `DocumentParser` to create an immutable `DocumentTree`.
18
18
*`DecorationManager`: Applies visual decorations to the editor based on the `DocumentTree` and `DecorationCalculator`.
19
19
*`CommandManager`: Registers and handles all user commands, interacting with the `DocumentModel` and other components.
20
-
*`DocumentParser`: A stateless component solely responsible for converting text into an immutable `DocumentTree`.
20
+
*`DocumentParser`: A stateless component responsible for converting text into an immutable `DocumentTree`. It uses a highly efficient "dirty range" incremental parsing strategy to ensure excellent performance even in very large documents.
21
21
22
22
For a detailed history of changes, see the [CHANGELOG](https://github.com/ryanncode/point-blank/blob/main/CHANGELOG.md).
Copy file name to clipboardExpand all lines: docs/architecture.html
+4-1Lines changed: 4 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -10,7 +10,7 @@ <h2>Architecture Overview</h2>
10
10
<h3>Data Flow:</h3>
11
11
<ol>
12
12
<li>When a document is opened or modified, VS Code fires an event that is picked up by the <code>DocumentModel</code>.</li>
13
-
<li>The <code>DocumentModel</code> uses the <code>DocumentParser</code> to create or update the <code>DocumentTree</code>, an immutable, hierarchical representation of the document's text.</li>
13
+
<li>The <code>DocumentModel</code> uses the <code>DocumentParser</code> to create or update the <code>DocumentTree</code>, an immutable, hierarchical representation of the document's text. The parser uses a highly efficient "dirty range" incremental strategy to avoid performance bottlenecks in large files.</li>
14
14
<li>The <code>DocumentModel</code> notifies the <code>DecorationManager</code> of the change.</li>
15
15
<li>The <code>DecorationManager</code>, using debouncing and viewport-aware logic, retrieves the visible <code>BlockNode</code>s from the <code>DocumentTree</code>.</li>
16
16
<li>It passes these nodes to the <code>DecorationCalculator</code>, which determines the appropriate decorations for each node based on its properties (e.g., <code>bulletType</code>).</li>
@@ -22,6 +22,9 @@ <h2>Key Design Decisions</h2>
22
22
<h3>Immutable Document Model</h3>
23
23
<p>The use of an immutable <code>DocumentTree</code> and <code>BlockNode</code>s is a cornerstone of the architecture. When the document changes, a new tree is created rather than modifying the old one. This provides predictability, simplifies state management, and makes the flow of data easy to trace.</p>
24
24
25
+
<h3>Performant Incremental Parsing</h3>
26
+
<p>To handle large documents without typing lag, Point Blank employs a "Dirty Range" incremental parser. Instead of performing a full re-parse on every keystroke, the parser identifies the minimal block of top-level nodes affected by a change, re-parses only that block, and splices the result back into the document tree. This ensures the UI remains responsive even in documents with thousands of lines.</p>
27
+
25
28
<h3>Design Philosophy: Insertion vs. Styling</h3>
26
29
<p>A critical distinction in Point Blank's architecture is the separation between one-time character <strong>insertion</strong> and continuous visual <strong>styling</strong>.</p>
0 commit comments