Fix TreeSitterLanguageMode.isRowCommented

This commit is contained in:
Max Brunsfeld
2018-08-21 13:02:27 -07:00
parent d982446b9b
commit d1283fa69f
2 changed files with 39 additions and 15 deletions

View File

@@ -1,6 +1,7 @@
const TextEditorRegistry = require('../src/text-editor-registry')
const TextEditor = require('../src/text-editor')
const TextBuffer = require('text-buffer')
const {Point, Range} = TextBuffer
const {it, fit, ffit, fffit} = require('./async-spec-helpers')
const dedent = require('dedent')
@@ -256,20 +257,29 @@ describe('TextEditorRegistry', function () {
})
describe('when the "tabType" config setting is "auto"', function () {
function nextHighlightUpdatePromise (languageMode) {
return new Promise(resolve => {
const subscription = languageMode.onDidChangeHighlighting(() => {
subscription.dispose()
resolve()
})
})
}
it('enables or disables soft tabs based on the editor\'s content', async function () {
await atom.packages.activatePackage('language-javascript')
atom.grammars.assignLanguageMode(editor, 'source.js')
atom.config.set('editor.tabType', 'auto')
registry.maintainConfig(editor)
await initialPackageActivation
const languageMode = editor.getBuffer().getLanguageMode()
editor.setText(dedent`
{
hello;
}
`)
editor.getBuffer().getLanguageMode().retokenizeLines()
await nextHighlightUpdatePromise(languageMode)
let disposable = registry.maintainConfig(editor)
expect(editor.getSoftTabs()).toBe(true)
editor.setText(dedent`
@@ -277,18 +287,19 @@ describe('TextEditorRegistry', function () {
hello;
}
`)
editor.getBuffer().getLanguageMode().retokenizeLines()
await nextHighlightUpdatePromise(languageMode)
disposable.dispose()
disposable = registry.maintainConfig(editor)
expect(editor.getSoftTabs()).toBe(false)
editor.setText(dedent`
editor.setTextInBufferRange(new Range(Point.ZERO, Point.ZERO), dedent`
/*
* Comment with a leading space.
*/
{
${'\t'}hello;
}
` + editor.getText())
editor.getBuffer().getLanguageMode().retokenizeLines()
` + '\n')
await nextHighlightUpdatePromise(languageMode)
disposable.dispose()
disposable = registry.maintainConfig(editor)
expect(editor.getSoftTabs()).toBe(false)
editor.setText(dedent`
@@ -300,8 +311,9 @@ describe('TextEditorRegistry', function () {
hello;
}
`)
editor.getBuffer().getLanguageMode().retokenizeLines()
await nextHighlightUpdatePromise(languageMode)
disposable.dispose()
disposable = registry.maintainConfig(editor)
expect(editor.getSoftTabs()).toBe(false)
editor.setText(dedent`
@@ -313,7 +325,9 @@ describe('TextEditorRegistry', function () {
hello;
}
`)
editor.getBuffer().getLanguageMode().retokenizeLines()
await nextHighlightUpdatePromise(languageMode)
disposable.dispose()
disposable = registry.maintainConfig(editor)
expect(editor.getSoftTabs()).toBe(true)
})
})

View File

@@ -134,7 +134,15 @@ class TreeSitterLanguageMode {
return this.grammar.commentStrings
}
isRowCommented () {
isRowCommented (row) {
const firstNonWhitespaceRange = this.buffer.findInRangeSync(
/\S/,
new Range(new Point(row, 0), new Point(row, Infinity))
)
if (firstNonWhitespaceRange) {
const firstNode = this.getSyntaxNodeContainingRange(firstNonWhitespaceRange)
if (firstNode) return firstNode.type.includes('comment')
}
return false
}
@@ -265,7 +273,9 @@ class TreeSitterLanguageMode {
}
_forEachTreeWithRange (range, callback) {
callback(this.rootLanguageLayer.tree, this.rootLanguageLayer.grammar)
if (this.rootLanguageLayer.tree) {
callback(this.rootLanguageLayer.tree, this.rootLanguageLayer.grammar)
}
const injectionMarkers = this.injectionsMarkerLayer.findMarkers({
intersectsRange: range