123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- const dedent = require('dedent');
- describe('Tree-sitter Ruby grammar', () => {
- beforeEach(async () => {
- atom.config.set('core.useTreeSitterParsers', true);
- atom.config.set('core.useLegacyTreeSitter', true);
- await atom.packages.activatePackage('language-ruby');
- });
- it('tokenizes symbols', async () => {
- const editor = await atom.workspace.open('foo.rb');
- editor.setText(dedent`
- :foo
- %i(foo)
- `);
- expect(editor.scopeDescriptorForBufferPosition([0, 1]).toString()).toBe(
- '.source.ruby'
- );
- // TODO: ^^^ Test expected '.source.ruby .constant.other.symbol' but got '.source.ruby'
- expect(editor.scopeDescriptorForBufferPosition([1, 3]).toString()).toBe(
- '.source.ruby .constant.other.symbol'
- );
- });
- it('tokenizes visibility modifiers', async () => {
- const editor = await atom.workspace.open('foo.rb');
- editor.setText(dedent`
- public
- protected
- private
- public def foo; end
- protected def bar; end
- private def baz; end
- `);
- expect(editor.scopeDescriptorForBufferPosition([0, 0]).toString()).toBe(
- '.source.ruby .keyword.other.special-method'
- );
- expect(editor.scopeDescriptorForBufferPosition([1, 0]).toString()).toBe(
- '.source.ruby .keyword.other.special-method'
- );
- expect(editor.scopeDescriptorForBufferPosition([2, 0]).toString()).toBe(
- '.source.ruby .keyword.other.special-method'
- );
- expect(editor.scopeDescriptorForBufferPosition([4, 0]).toString()).toBe(
- '.source.ruby .keyword.other.special-method'
- );
- expect(editor.scopeDescriptorForBufferPosition([5, 0]).toString()).toBe(
- '.source.ruby .keyword.other.special-method'
- );
- expect(editor.scopeDescriptorForBufferPosition([6, 0]).toString()).toBe(
- '.source.ruby .keyword.other.special-method'
- );
- });
- it('tokenizes keyword predicates', async () => {
- const editor = await atom.workspace.open('foo.rb');
- editor.setText(dedent`
- defined?(:thing)
- block_given?
- iterator?
- `);
- expect(editor.scopeDescriptorForBufferPosition([0, 0]).toString()).toBe(
- '.source.ruby .keyword.control'
- );
- expect(editor.scopeDescriptorForBufferPosition([1, 0]).toString()).toBe(
- '.source.ruby .keyword.control'
- );
- expect(editor.scopeDescriptorForBufferPosition([2, 0]).toString()).toBe(
- '.source.ruby .keyword.control'
- );
- });
- it('tokenizes alias definitions', async () => {
- const editor = await atom.workspace.open('foo.rb');
- editor.setText(dedent`
- alias_method :name, :full_name
- alias name full_name
- `);
- expect(editor.scopeDescriptorForBufferPosition([0, 0]).toString()).toBe(
- '.source.ruby .keyword.control'
- );
- expect(editor.scopeDescriptorForBufferPosition([1, 0]).toString()).toBe(
- '.source.ruby .keyword.control'
- );
- });
- it('tokenizes keywords', async () => {
- const editor = await atom.workspace.open('foo.rb');
- editor.setText(dedent`
- super
- undef foo
- `);
- expect(editor.scopeDescriptorForBufferPosition([0, 0]).toString()).toBe(
- '.source.ruby .keyword.control'
- );
- expect(editor.scopeDescriptorForBufferPosition([1, 0]).toString()).toBe(
- '.source.ruby .keyword.control'
- );
- });
- it('tokenizes variable in assignment expressions', async () => {
- const editor = await atom.workspace.open('foo.rb');
- editor.setText(dedent`
- a = 10
- `);
- expect(editor.scopeDescriptorForBufferPosition([0, 0]).toString()).toBe(
- '.source.ruby .variable'
- );
- });
- it('does not tokenizes method call in assignment expressions', async () => {
- const editor = await atom.workspace.open('foo.rb');
- editor.setText(dedent`
- foo() = 10
- `);
- expect(editor.scopeDescriptorForBufferPosition([0, 0]).toString()).not.toBe(
- '.source.ruby .variable'
- );
- });
- });
|