mirror of
https://github.com/atom/atom.git
synced 2026-01-25 14:59:03 -05:00
Fix TreeSitterLanguageMode.isRowCommented
This commit is contained in:
@@ -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)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user