Skip to content
This repository has been archived by the owner on Mar 3, 2023. It is now read-only.

Commit

Permalink
Start parsing right away when constructing a TreeSitterLanguageMode
Browse files Browse the repository at this point in the history
Co-Authored-By: Ashi Krishnan <queerviolet@github.com>
  • Loading branch information
maxbrunsfeld and Ashi Krishnan committed Jun 27, 2018
1 parent 613d4d6 commit c014f5e
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 31 deletions.
64 changes: 40 additions & 24 deletions spec/tree-sitter-language-mode-spec.js
Expand Up @@ -32,9 +32,10 @@ describe('TreeSitterLanguageMode', () => {
}
})

buffer.setText('aa.bbb = cc(d.eee());')

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
buffer.setText('aa.bbb = cc(d.eee());')
await languageMode.reparsePromise

expectTokensToEqual(editor, [[
Expand All @@ -61,9 +62,10 @@ describe('TreeSitterLanguageMode', () => {
}
})

buffer.setText('a = bb.ccc();')

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
buffer.setText('a = bb.ccc();')
await languageMode.reparsePromise

expectTokensToEqual(editor, [[
Expand All @@ -87,9 +89,10 @@ describe('TreeSitterLanguageMode', () => {
}
})

buffer.setText('a\n .b();')

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
buffer.setText('a\n .b();')
await languageMode.reparsePromise

expectTokensToEqual(editor, [
Expand All @@ -114,9 +117,10 @@ describe('TreeSitterLanguageMode', () => {
}
})

buffer.setText('int main() {\n int a\n int b;\n}');

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
buffer.setText('int main() {\n int a\n int b;\n}');
await languageMode.reparsePromise

editor.screenLineForScreenRow(0)
Expand Down Expand Up @@ -159,9 +163,10 @@ describe('TreeSitterLanguageMode', () => {
}
})

buffer.setText('a(\nb,\nc\n')

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
buffer.setText('a(\nb,\nc\n')
await languageMode.reparsePromise

// missing closing paren
Expand Down Expand Up @@ -195,13 +200,14 @@ describe('TreeSitterLanguageMode', () => {
}
})

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
buffer.setText([
'// abc',
'',
'a("b").c'
].join('\r\n'))

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
await languageMode.reparsePromise

expectTokensToEqual(editor, [
Expand Down Expand Up @@ -240,11 +246,13 @@ describe('TreeSitterLanguageMode', () => {
'new_expression > call_expression > identifier': 'constructor'
}
})
const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)

buffer.setText('abc;');

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
await languageMode.reparsePromise

expectTokensToEqual(editor, [
[
{text: 'abc', scopes: ['variable']},
Expand Down Expand Up @@ -291,7 +299,7 @@ describe('TreeSitterLanguageMode', () => {
})
})

describe('injections', () => {
describe('injectionPoints and injectionPatterns', () => {
let jsGrammar, htmlGrammar

beforeEach(() => {
Expand Down Expand Up @@ -334,9 +342,10 @@ describe('TreeSitterLanguageMode', () => {
})

it('highlights code inside of injection points', async () => {
buffer.setText('node.innerHTML = html `a ${b}<img src="d">\n`;')

const languageMode = new TreeSitterLanguageMode({buffer, grammar: jsGrammar, grammars: atom.grammars})
buffer.setLanguageMode(languageMode)
buffer.setText('node.innerHTML = html `a ${b}<img src="d">\n`;')
await languageMode.reparsePromise

expectTokensToEqual(editor, [
Expand Down Expand Up @@ -385,8 +394,6 @@ describe('TreeSitterLanguageMode', () => {
]
})

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
buffer.setText(dedent `
module.exports =
class A {
Expand All @@ -397,6 +404,9 @@ describe('TreeSitterLanguageMode', () => {
}
}
`)

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
await languageMode.reparsePromise

editor.screenLineForScreenRow(0)
Expand Down Expand Up @@ -448,8 +458,6 @@ describe('TreeSitterLanguageMode', () => {
]
})

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
buffer.setText(dedent `
const element1 = <Element
className='submit'
Expand All @@ -460,6 +468,9 @@ describe('TreeSitterLanguageMode', () => {
<span>world</span>
</Element>
`)

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
await languageMode.reparsePromise

editor.screenLineForScreenRow(0)
Expand Down Expand Up @@ -500,8 +511,6 @@ describe('TreeSitterLanguageMode', () => {
]
})

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
buffer.setText(dedent `
/**
* Important
Expand All @@ -510,6 +519,9 @@ describe('TreeSitterLanguageMode', () => {
Also important
*/
`)

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
await languageMode.reparsePromise

editor.screenLineForScreenRow(0)
Expand Down Expand Up @@ -561,8 +573,6 @@ describe('TreeSitterLanguageMode', () => {
]
})

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
buffer.setText(dedent `
#ifndef FOO_H_
#define FOO_H_
Expand All @@ -586,6 +596,9 @@ describe('TreeSitterLanguageMode', () => {
#endif
`)

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
await languageMode.reparsePromise

editor.screenLineForScreenRow(0)
Expand Down Expand Up @@ -661,15 +674,15 @@ describe('TreeSitterLanguageMode', () => {
]
})

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
buffer.setText(dedent `
<head>
<meta name='key-1', content='value-1'>
<meta name='key-2', content='value-2'>
</head>
`)

const languageMode = new TreeSitterLanguageMode({buffer, grammar})
buffer.setLanguageMode(languageMode)
await languageMode.reparsePromise

// Void elements have only one child
Expand Down Expand Up @@ -704,8 +717,9 @@ describe('TreeSitterLanguageMode', () => {
print 'c'
print 'd'
`)

buffer.setLanguageMode(new TreeSitterLanguageMode({buffer, grammar}))
await buffer.getLanguageMode().initialize()
await buffer.getLanguageMode().reparsePromise

editor.screenLineForScreenRow(0)

Expand All @@ -729,8 +743,9 @@ describe('TreeSitterLanguageMode', () => {
})

buffer.setText('foo({bar: baz});')

buffer.setLanguageMode(new TreeSitterLanguageMode({buffer, grammar}))
await buffer.getLanguageMode().initialize()
await buffer.getLanguageMode().reparsePromise

editor.screenLineForScreenRow(0)
expect(editor.scopeDescriptorForBufferPosition([0, 6]).getScopesArray()).toEqual([
Expand Down Expand Up @@ -759,8 +774,9 @@ describe('TreeSitterLanguageMode', () => {
g()
}
`)

buffer.setLanguageMode(new TreeSitterLanguageMode({buffer, grammar}))
await buffer.getLanguageMode().initialize()
await buffer.getLanguageMode().reparsePromise

editor.screenLineForScreenRow(0)

Expand Down
3 changes: 0 additions & 3 deletions src/project.js
Expand Up @@ -685,9 +685,6 @@ class Project extends Model {
}

this.grammarRegistry.autoAssignLanguageMode(buffer)
if (buffer.languageMode.initialize) {
await buffer.languageMode.initialize()
}

this.addBuffer(buffer)
return buffer
Expand Down
6 changes: 2 additions & 4 deletions src/tree-sitter-language-mode.js
Expand Up @@ -55,6 +55,8 @@ class TreeSitterLanguageMode {
this.rootLanguageLayer.update()
})

this.rootLanguageLayer.update()

// TODO: Remove this once TreeSitterLanguageMode implements its own auto-indentation system. This
// is temporarily needed in order to delegate to the TextMateLanguageMode's auto-indent system.
this.regexesByPattern = {}
Expand All @@ -67,10 +69,6 @@ class TreeSitterLanguageMode {
this.parser = null
}

async initialize () {
await this.rootLanguageLayer.update()
}

getLanguageId () {
return this.grammar.id
}
Expand Down

0 comments on commit c014f5e

Please sign in to comment.