Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Commit 3c78983

Browse files
author
Wliu
authored
Merge pull request #158 from esdoppio/fix-multiline-regexp
Recognize multi-line regular expressions
2 parents ef4eb56 + 73ec571 commit 3c78983

2 files changed

Lines changed: 24 additions & 8 deletions

File tree

grammars/ruby.cson

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -486,16 +486,16 @@
486486
}
487487
{
488488
'begin': '''(?x)
489-
(?<![\\w)])((/))(?![*+?])
489+
(?<![\\w)])((/))(?![?*+])
490490
(?=
491-
(?:\\\\/|[^/])*/[eimnosux]*\\s*
492-
(
493-
[\\]#).,?:}]
494-
|
495-
$|\\|\\||&&|<=>|=>|==|=~|!~|!=|;
496-
|
491+
(?:\\\\/|[^/])*+ # Do NOT change the order
492+
/[eimnosux]*\\s*
493+
(?:
494+
[)\\]}#.,?:]|\\|\\||&&|<=>|=>|==|=~|!~|!=|;|$|
497495
if|else|elsif|then|do|end|unless|while|until|or|and
498496
)
497+
|
498+
$
499499
)
500500
'''
501501
'captures':
@@ -505,7 +505,7 @@
505505
'name': 'punctuation.section.regexp.ruby'
506506
'comment': 'regular expression literal with interpolation'
507507
'contentName': 'string.regexp.interpolated.ruby'
508-
'end': '((/[eimnosux]*))(?=[^eimnosux])'
508+
'end': '((/[eimnosux]*))'
509509
'patterns': [
510510
{
511511
'include': '#regex_sub'

spec/ruby-spec.coffee

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,22 @@ describe "Ruby grammar", ->
480480
expect(tokens[6]).toEqual value: ' ', scopes: ['source.ruby']
481481
expect(tokens[7]).toEqual value: '1', scopes: ['source.ruby', 'constant.numeric.ruby']
482482

483+
it "tokenizes multiline regular expressions", ->
484+
tokens = grammar.tokenizeLines '''
485+
regexp = /
486+
foo|
487+
bar
488+
/ix
489+
'''
490+
491+
expect(tokens[0][0]).toEqual value: 'regexp ', scopes: ['source.ruby']
492+
expect(tokens[0][1]).toEqual value: '=', scopes: ['source.ruby', 'keyword.operator.assignment.ruby']
493+
expect(tokens[0][2]).toEqual value: ' ', scopes: ['source.ruby']
494+
expect(tokens[0][3]).toEqual value: '/', scopes: ['source.ruby', 'string.regexp.interpolated.ruby', 'punctuation.section.regexp.ruby']
495+
expect(tokens[1][0]).toEqual value: ' foo|', scopes: ['source.ruby', 'string.regexp.interpolated.ruby']
496+
expect(tokens[2][0]).toEqual value: ' bar', scopes: ['source.ruby', 'string.regexp.interpolated.ruby']
497+
expect(tokens[3][0]).toEqual value: '/ix', scopes: ['source.ruby', 'string.regexp.interpolated.ruby', 'punctuation.section.regexp.ruby']
498+
483499
it "tokenizes the / arithmetic operator", ->
484500
{tokens} = grammar.tokenizeLine('call/me/maybe')
485501
expect(tokens[0]).toEqual value: 'call', scopes: ['source.ruby']

0 commit comments

Comments
 (0)