Skip to content

Commit

Permalink
Fix issue with large buffers where block delimiters wouldn't be "atom…
Browse files Browse the repository at this point in the history
…ic" when first starting Heynote, before the first edit (#81)

* Increase timeout for parsing the syntax tree when it's done for the first time

* Return the already parsed blocks in the blockState facet from Editor.getBlocks() instead of parsing the syntax tree again.
Make the block extension's getBlocks() method private.
  • Loading branch information
heyman authored Dec 27, 2023
1 parent 1d2f164 commit eda4981
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 7 deletions.
8 changes: 3 additions & 5 deletions src/editor/block/block.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ import { emptyBlockSelected } from "./select-all.js";
// tracks the size of the first delimiter
let firstBlockDelimiterSize

export function getBlocks(state) {
function getBlocks(state, timeout=50) {
const blocks = [];
const tree = ensureSyntaxTree(state, state.doc.length)
const tree = ensureSyntaxTree(state, state.doc.length, timeout)
if (tree) {
tree.iterate({
enter: (type) => {
Expand Down Expand Up @@ -57,16 +57,14 @@ export function getBlocks(state) {

export const blockState = StateField.define({
create(state) {
return getBlocks(state);
return getBlocks(state, 1000);
},
update(blocks, transaction) {
// if blocks are empty it likely means we didn't get a parsed syntax tree, and then we want to update
// the blocks on all updates (and not just document changes)
if (transaction.docChanged || blocks.length === 0) {
//console.log("updating block state", transaction)
return getBlocks(transaction.state);
}
//return widgets.map(transaction.changes);
return blocks
},
})
Expand Down
4 changes: 2 additions & 2 deletions src/editor/editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { heynoteDark } from "./theme/dark.js"
import { heynoteBase } from "./theme/base.js"
import { customSetup } from "./setup.js"
import { heynoteLang } from "./lang-heynote/heynote.js"
import { noteBlockExtension, blockLineNumbers, getBlocks } from "./block/block.js"
import { noteBlockExtension, blockLineNumbers, blockState } from "./block/block.js"
import { heynoteEvent, SET_CONTENT } from "./annotation.js";
import { changeCurrentBlockLanguage, triggerCurrenciesLoaded } from "./block/commands.js"
import { formatBlockContent } from "./block/format-code.js"
Expand Down Expand Up @@ -128,7 +128,7 @@ export class HeynoteEditor {
}

getBlocks() {
return getBlocks(this.view.state)
return this.view.state.facet(blockState)
}

focus() {
Expand Down

0 comments on commit eda4981

Please sign in to comment.