Skip to content

Function highlightTreeSitter fails to markup long code #44

@ayame113

Description

@ayame113

Execution was success:

await highlightTreeSitter(`function () {console.log()}\n`.repeat(30), 'source.js')
<span class="syntax--source syntax--js"><span class="syntax--storage syntax--type syntax--function">function</span> <span class="syntax--punctuation syntax--definition syntax--parameters syntax--begin syntax--bracket syntax--round">(</span><span class="syntax--punctuation syntax--definition syntax--parameters syntax--end syntax--bracket syntax--round">)</span> <span class="syntax--punctuation syntax--definition syntax--function syntax--body syntax--begin syntax--bracket syntax--curly">{</span><span class="syntax--support syntax--variable syntax--dom">console</span><span class="syntax--meta syntax--delimiter syntax--period">.</span><span class="syntax--entity syntax--name syntax--function">log</span><span class="syntax--punctuation syntax--definition syntax--parameters syntax--begin syntax--bracket syntax--round">(</span><span class="syntax--punctuation syntax--definition syntax--parameters syntax--end syntax--bracket syntax--round">)</span><span class="syntax--punctuation syntax--definition syntax--function syntax--body syntax--end syntax--bracket syntax--curly">}</span>
...
<span class="syntax--storage syntax--type syntax--function">function</span> <span class="syntax--punctuation syntax--definition syntax--parameters syntax--begin syntax--bracket syntax--round">(</span><span class="syntax--punctuation syntax--definition syntax--parameters syntax--end syntax--bracket syntax--round">)</span> <span class="syntax--punctuation syntax--definition syntax--function syntax--body syntax--begin syntax--bracket syntax--curly">{</span><span class="syntax--support syntax--variable syntax--dom">console</span><span class="syntax--meta syntax--delimiter syntax--period">.</span><span class="syntax--entity syntax--name syntax--function">log</span><span class="syntax--punctuation syntax--definition syntax--parameters syntax--begin syntax--bracket syntax--round">(</span><span class="syntax--punctuation syntax--definition syntax--parameters syntax--end syntax--bracket syntax--round">)</span><span class="syntax--punctuation syntax--definition syntax--function syntax--body syntax--end syntax--bracket syntax--curly">}</span>
</span>

Randomly fail:

await highlightTreeSitter(`function () {console.log()}\n`.repeat(80), 'source.js')

Completely fail:

await highlightTreeSitter(`function () {console.log()}\n`.repeat(120), 'source.js')
<span class="syntax--source syntax--js">function () {console.log()}
function () {console.log()}
...
function () {console.log()}
</span>

As far as I've tested locally, adding something like await delay (100) after buf.setText (sourceCode) in the implementation seems to work as expected.

buf.setLanguageMode(lm)
buf.setText(sourceCode)
const end = buf.getEndPosition()

const delay = ms => new Promise(resolve=>setTimeout(resolve, ms))
    buf.setLanguageMode(lm)
    buf.setText(sourceCode)
    await delay(100) // <- add this line
    const end = buf.getEndPosition()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions