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

Turn tree-sitter on by default #17879

Merged
merged 11 commits into from Sep 5, 2018
2,190 changes: 1,095 additions & 1,095 deletions package-lock.json

Large diffs are not rendered by default.

32 changes: 16 additions & 16 deletions package.json
Expand Up @@ -29,7 +29,7 @@
"atom-ui": "0.4.1",
"autocomplete-atom-api": "https://www.atom.io/api/packages/autocomplete-atom-api/versions/0.10.7/tarball",
"autocomplete-css": "https://www.atom.io/api/packages/autocomplete-css/versions/0.17.5/tarball",
"autocomplete-html": "https://www.atom.io/api/packages/autocomplete-html/versions/0.8.5/tarball",
"autocomplete-html": "https://www.atom.io/api/packages/autocomplete-html/versions/0.8.6/tarball",
"autocomplete-plus": "https://www.atom.io/api/packages/autocomplete-plus/versions/2.41.0/tarball",
"autocomplete-snippets": "https://www.atom.io/api/packages/autocomplete-snippets/versions/1.12.0/tarball",
"autoflow": "https://www.atom.io/api/packages/autoflow/versions/0.29.4/tarball",
Expand All @@ -39,7 +39,7 @@
"base16-tomorrow-dark-theme": "https://www.atom.io/api/packages/base16-tomorrow-dark-theme/versions/1.6.0/tarball",
"base16-tomorrow-light-theme": "https://www.atom.io/api/packages/base16-tomorrow-light-theme/versions/1.6.0/tarball",
"bookmarks": "https://www.atom.io/api/packages/bookmarks/versions/0.45.1/tarball",
"bracket-matcher": "https://www.atom.io/api/packages/bracket-matcher/versions/0.89.2/tarball",
"bracket-matcher": "https://www.atom.io/api/packages/bracket-matcher/versions/0.89.3/tarball",
"cached-run-in-this-context": "0.4.1",
"chai": "3.5.0",
"chart.js": "^2.3.0",
Expand Down Expand Up @@ -79,14 +79,14 @@
"jasmine-tagged": "^1.1.4",
"key-path-helpers": "^0.4.0",
"keybinding-resolver": "https://www.atom.io/api/packages/keybinding-resolver/versions/0.38.3/tarball",
"language-c": "https://www.atom.io/api/packages/language-c/versions/0.60.4/tarball",
"language-c": "https://www.atom.io/api/packages/language-c/versions/0.60.5/tarball",
"language-clojure": "https://www.atom.io/api/packages/language-clojure/versions/0.22.7/tarball",
"language-coffee-script": "https://www.atom.io/api/packages/language-coffee-script/versions/0.49.3/tarball",
"language-csharp": "https://www.atom.io/api/packages/language-csharp/versions/1.1.0/tarball",
"language-css": "https://www.atom.io/api/packages/language-css/versions/0.42.11/tarball",
"language-gfm": "https://www.atom.io/api/packages/language-gfm/versions/0.90.5/tarball",
"language-git": "https://www.atom.io/api/packages/language-git/versions/0.19.1/tarball",
"language-go": "https://www.atom.io/api/packages/language-go/versions/0.46.2/tarball",
"language-go": "https://www.atom.io/api/packages/language-go/versions/0.46.3/tarball",
"language-html": "https://www.atom.io/api/packages/language-html/versions/0.51.5/tarball",
"language-hyperlink": "https://www.atom.io/api/packages/language-hyperlink/versions/0.16.3/tarball",
"language-java": "https://www.atom.io/api/packages/language-java/versions/0.30.0/tarball",
Expand All @@ -99,11 +99,11 @@
"language-perl": "https://www.atom.io/api/packages/language-perl/versions/0.38.1/tarball",
"language-php": "https://www.atom.io/api/packages/language-php/versions/0.44.0/tarball",
"language-property-list": "https://www.atom.io/api/packages/language-property-list/versions/0.9.1/tarball",
"language-python": "https://www.atom.io/api/packages/language-python/versions/0.51.4/tarball",
"language-python": "https://www.atom.io/api/packages/language-python/versions/0.51.5/tarball",
"language-ruby": "https://www.atom.io/api/packages/language-ruby/versions/0.72.7/tarball",
"language-ruby-on-rails": "https://www.atom.io/api/packages/language-ruby-on-rails/versions/0.25.3/tarball",
"language-sass": "https://www.atom.io/api/packages/language-sass/versions/0.62.0/tarball",
"language-shellscript": "https://www.atom.io/api/packages/language-shellscript/versions/0.27.4/tarball",
"language-shellscript": "https://www.atom.io/api/packages/language-shellscript/versions/0.27.5/tarball",
"language-source": "https://www.atom.io/api/packages/language-source/versions/0.9.0/tarball",
"language-sql": "https://www.atom.io/api/packages/language-sql/versions/0.25.10/tarball",
"language-text": "https://www.atom.io/api/packages/language-text/versions/0.7.4/tarball",
Expand All @@ -115,8 +115,8 @@
"less-cache": "1.1.0",
"line-ending-selector": "https://www.atom.io/api/packages/line-ending-selector/versions/0.7.7/tarball",
"line-top-index": "0.3.1",
"link": "https://www.atom.io/api/packages/link/versions/0.31.4/tarball",
"markdown-preview": "https://www.atom.io/api/packages/markdown-preview/versions/0.159.23/tarball",
"link": "https://www.atom.io/api/packages/link/versions/0.31.6/tarball",
"markdown-preview": "https://www.atom.io/api/packages/markdown-preview/versions/0.159.24/tarball",
"marked": "^0.3.12",
"metrics": "https://www.atom.io/api/packages/metrics/versions/1.6.2/tarball",
"minimatch": "^3.0.3",
Expand Down Expand Up @@ -187,14 +187,14 @@
"archive-view": "0.65.1",
"autocomplete-atom-api": "0.10.7",
"autocomplete-css": "0.17.5",
"autocomplete-html": "0.8.5",
"autocomplete-html": "0.8.6",
"autocomplete-plus": "2.41.0",
"autocomplete-snippets": "1.12.0",
"autoflow": "0.29.4",
"autosave": "0.24.6",
"background-tips": "0.28.0",
"bookmarks": "0.45.1",
"bracket-matcher": "0.89.2",
"bracket-matcher": "0.89.3",
"command-palette": "0.43.5",
"dalek": "0.2.2",
"deprecation-cop": "0.56.9",
Expand All @@ -211,8 +211,8 @@
"incompatible-packages": "0.27.3",
"keybinding-resolver": "0.38.3",
"line-ending-selector": "0.7.7",
"link": "0.31.4",
"markdown-preview": "0.159.23",
"link": "0.31.6",
"markdown-preview": "0.159.24",
"metrics": "1.6.2",
"notifications": "0.70.5",
"open-on-github": "1.3.1",
Expand All @@ -230,14 +230,14 @@
"welcome": "0.36.7",
"whitespace": "0.37.6",
"wrap-guide": "0.40.3",
"language-c": "0.60.4",
"language-c": "0.60.5",
"language-clojure": "0.22.7",
"language-coffee-script": "0.49.3",
"language-csharp": "1.1.0",
"language-css": "0.42.11",
"language-gfm": "0.90.5",
"language-git": "0.19.1",
"language-go": "0.46.2",
"language-go": "0.46.3",
"language-html": "0.51.5",
"language-hyperlink": "0.16.3",
"language-java": "0.30.0",
Expand All @@ -250,11 +250,11 @@
"language-perl": "0.38.1",
"language-php": "0.44.0",
"language-property-list": "0.9.1",
"language-python": "0.51.4",
"language-python": "0.51.5",
"language-ruby": "0.72.7",
"language-ruby-on-rails": "0.25.3",
"language-sass": "0.62.0",
"language-shellscript": "0.27.4",
"language-shellscript": "0.27.5",
"language-source": "0.9.0",
"language-sql": "0.25.10",
"language-text": "0.7.4",
Expand Down
12 changes: 5 additions & 7 deletions spec/fixtures/packages/package-with-rb-filetype/grammars/rb.cson
@@ -1,12 +1,10 @@
'name': 'Test Ruby'
'type': 'tree-sitter'
'scopeName': 'test.rb'
'firstLineMatch': '^\\#!.*(?:\\s|\\/)(?:testruby)(?:$|\\s)'
'parser': 'tree-sitter-ruby'

'firstLineRegex': '^\\#!.*(?:\\s|\\/)(?:testruby)(?:$|\\s)'

'fileTypes': [
'rb'
]
'patterns': [
{
'match': 'ruby'
'name': 'meta.class.ruby'
}
]
99 changes: 18 additions & 81 deletions spec/text-editor-spec.js
Expand Up @@ -2084,7 +2084,7 @@ describe('TextEditor', () => {

const scopeDescriptors = editor.getCursors().map(c => c.getScopeDescriptor())
expect(scopeDescriptors[0].getScopesArray()).toEqual(['source.js'])
expect(scopeDescriptors[1].getScopesArray()).toEqual(['source.js', 'string.quoted.single.js'])
expect(scopeDescriptors[1].getScopesArray()).toEqual(['source.js', 'string.quoted'])

spyOn(editor.getBuffer().getLanguageMode(), 'getNonWordCharacters').andCallFake(function (position) {
const result = '/\()"\':,.;<>~!@#$%^&*|+=[]{}`?'
Expand Down Expand Up @@ -5978,6 +5978,10 @@ describe('TextEditor', () => {
})

describe('when the buffer\'s language mode changes', () => {
beforeEach(() => {
atom.config.set('core.useTreeSitterParsers', false)
})

it('notifies onDidTokenize observers when retokenization is finished', async () => {
// Exercise the full `tokenizeInBackground` code path, which bails out early if
// `.setVisible` has not been called with `true`.
Expand Down Expand Up @@ -6293,7 +6297,7 @@ describe('TextEditor', () => {
// folds are also duplicated
expect(editor.isFoldedAtScreenRow(5)).toBe(true)
expect(editor.isFoldedAtScreenRow(7)).toBe(true)
expect(editor.lineTextForScreenRow(7)).toBe(` while(items.length > 0) {${editor.displayLayer.foldCharacter}`)
expect(editor.lineTextForScreenRow(7)).toBe(` while(items.length > 0) {${editor.displayLayer.foldCharacter}}`)
expect(editor.lineTextForScreenRow(8)).toBe(' return sort(left).concat(pivot).concat(sort(right));')
})

Expand Down Expand Up @@ -6478,6 +6482,7 @@ describe('TextEditor', () => {

describe("when the editor's grammar has an injection selector", () => {
beforeEach(async () => {
atom.config.set('core.useTreeSitterParsers', false)
await atom.packages.activatePackage('language-text')
await atom.packages.activatePackage('language-javascript')
})
Expand Down Expand Up @@ -6985,25 +6990,25 @@ describe('TextEditor', () => {

describe('indent guides', () => {
it('shows indent guides when `editor.showIndentGuide` is set to true and the editor is not mini', () => {
editor.setText(' foo')
editor.setTabLength(2)

editor.update({showIndentGuide: false})
expect(editor.tokensForScreenRow(0)).toEqual([
expect(editor.tokensForScreenRow(1).slice(0, 3)).toEqual([
{text: ' ', scopes: ['syntax--source syntax--js', 'leading-whitespace']},
{text: 'foo', scopes: ['syntax--source syntax--js']}
{text: 'var', scopes: ['syntax--source syntax--js', 'syntax--storage syntax--type']},
{text: ' sort ', scopes: ['syntax--source syntax--js']}
])

editor.update({showIndentGuide: true})
expect(editor.tokensForScreenRow(0)).toEqual([
expect(editor.tokensForScreenRow(1).slice(0, 3)).toEqual([
{text: ' ', scopes: ['syntax--source syntax--js', 'leading-whitespace indent-guide']},
{text: 'foo', scopes: ['syntax--source syntax--js']}
{text: 'var', scopes: ['syntax--source syntax--js', 'syntax--storage syntax--type']},
{text: ' sort ', scopes: ['syntax--source syntax--js']}
])

editor.setMini(true)
expect(editor.tokensForScreenRow(0)).toEqual([
expect(editor.tokensForScreenRow(1).slice(0, 3)).toEqual([
{text: ' ', scopes: ['syntax--source syntax--js', 'leading-whitespace']},
{text: 'foo', scopes: ['syntax--source syntax--js']}
{text: 'var', scopes: ['syntax--source syntax--js', 'syntax--storage syntax--type']},
{text: ' sort ', scopes: ['syntax--source syntax--js']}
])
})
})
Expand Down Expand Up @@ -7437,22 +7442,6 @@ describe('TextEditor', () => {
expect([fold2.start.row, fold2.end.row]).toEqual([1, 9])
expect([fold3.start.row, fold3.end.row]).toEqual([4, 7])
})

it('works with multi-line comments', async () => {
editor = await atom.workspace.open('sample-with-comments.js', {autoIndent: false})

editor.foldAll()
const folds = editor.unfoldAll()
expect(folds.length).toBe(8)
expect([folds[0].start.row, folds[0].end.row]).toEqual([0, 30])
expect([folds[1].start.row, folds[1].end.row]).toEqual([1, 4])
expect([folds[2].start.row, folds[2].end.row]).toEqual([5, 27])
expect([folds[3].start.row, folds[3].end.row]).toEqual([6, 8])
expect([folds[4].start.row, folds[4].end.row]).toEqual([11, 16])
expect([folds[5].start.row, folds[5].end.row]).toEqual([17, 20])
expect([folds[6].start.row, folds[6].end.row]).toEqual([21, 22])
expect([folds[7].start.row, folds[7].end.row]).toEqual([24, 25])
})
})

describe('.foldBufferRow(bufferRow)', () => {
Expand Down Expand Up @@ -7487,15 +7476,6 @@ describe('TextEditor', () => {
})
})

describe('when the bufferRow is in a multi-line comment', () => {
it('searches upward and downward for surrounding comment lines and folds them as a single fold', () => {
editor.buffer.insert([1, 0], ' //this is a comment\n // and\n //more docs\n\n//second comment')
editor.foldBufferRow(1)
const [fold] = editor.unfoldAll()
expect([fold.start.row, fold.end.row]).toEqual([1, 3])
})
})

describe('when the bufferRow is a single-line comment', () => {
it('searches upward for the first row that begins a syntactic region containing the folded row (and folds it)', () => {
editor.buffer.insert([1, 0], ' //this is a single line comment\n')
Expand Down Expand Up @@ -7531,12 +7511,12 @@ describe('TextEditor', () => {
editor = await atom.workspace.open('sample.js', {autoIndent: false})

editor.foldAllAtIndentLevel(0)
expect(editor.lineTextForScreenRow(0)).toBe(`var quicksort = function () {${editor.displayLayer.foldCharacter}`)
expect(editor.lineTextForScreenRow(0)).toBe(`var quicksort = function () {${editor.displayLayer.foldCharacter}};`)
expect(editor.getLastScreenRow()).toBe(0)

editor.foldAllAtIndentLevel(1)
expect(editor.lineTextForScreenRow(0)).toBe('var quicksort = function () {')
expect(editor.lineTextForScreenRow(1)).toBe(` var sort = function(items) {${editor.displayLayer.foldCharacter}`)
expect(editor.lineTextForScreenRow(1)).toBe(` var sort = function(items) {${editor.displayLayer.foldCharacter}};`)
expect(editor.getLastScreenRow()).toBe(4)

editor.foldAllAtIndentLevel(2)
Expand All @@ -7546,19 +7526,6 @@ describe('TextEditor', () => {
expect(editor.getLastScreenRow()).toBe(9)
})

it('folds every foldable range at a given indentLevel', async () => {
editor = await atom.workspace.open('sample-with-comments.js', {autoIndent: false})

editor.foldAllAtIndentLevel(2)
const folds = editor.unfoldAll()
expect(folds.length).toBe(5)
expect([folds[0].start.row, folds[0].end.row]).toEqual([6, 8])
expect([folds[1].start.row, folds[1].end.row]).toEqual([11, 16])
expect([folds[2].start.row, folds[2].end.row]).toEqual([17, 20])
expect([folds[3].start.row, folds[3].end.row]).toEqual([21, 22])
expect([folds[4].start.row, folds[4].end.row]).toEqual([24, 25])
})

it('does not fold anything but the indentLevel', async () => {
editor = await atom.workspace.open('sample-with-comments.js', {autoIndent: false})

Expand All @@ -7568,36 +7535,6 @@ describe('TextEditor', () => {
expect([folds[0].start.row, folds[0].end.row]).toEqual([0, 30])
})
})

describe('.isFoldableAtBufferRow(bufferRow)', () => {
it('returns true if the line starts a multi-line comment', async () => {
editor = await atom.workspace.open('sample-with-comments.js')

expect(editor.isFoldableAtBufferRow(1)).toBe(true)
expect(editor.isFoldableAtBufferRow(6)).toBe(true)
expect(editor.isFoldableAtBufferRow(8)).toBe(false)
expect(editor.isFoldableAtBufferRow(11)).toBe(true)
expect(editor.isFoldableAtBufferRow(15)).toBe(false)
expect(editor.isFoldableAtBufferRow(17)).toBe(true)
expect(editor.isFoldableAtBufferRow(21)).toBe(true)
expect(editor.isFoldableAtBufferRow(24)).toBe(true)
expect(editor.isFoldableAtBufferRow(28)).toBe(false)
})

it('returns true for lines that end with a comment and are followed by an indented line', async () => {
editor = await atom.workspace.open('sample-with-comments.js')

expect(editor.isFoldableAtBufferRow(5)).toBe(true)
})

it("does not return true for a line in the middle of a comment that's followed by an indented line", async () => {
editor = await atom.workspace.open('sample-with-comments.js')

expect(editor.isFoldableAtBufferRow(7)).toBe(false)
editor.buffer.insert([8, 0], ' ')
expect(editor.isFoldableAtBufferRow(7)).toBe(false)
})
})
})
})

Expand Down