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

Commit 7b14bbb

Browse files
WliuWliu
authored andcommitted
Merge pull request #227 from mislav/regexp-in-ternary
Allow regexp to immediately follow `?` ternary operator
2 parents 5f24325 + d6a1219 commit 7b14bbb

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

grammars/javascript.cson

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@
553553
'name': 'constant.language.js'
554554
}
555555
{
556-
'begin': '(?<=[\\[=(:+,!]|^|return|&&|\\|\\|)\\s*(/)(?![/*+{}?])(?=.*/)'
556+
'begin': '(?<=[\\[=(?:+,!]|^|return|&&|\\|\\|)\\s*(/)(?![/*+{}?])(?=.*/)'
557557
'beginCaptures':
558558
'1':
559559
'name': 'punctuation.definition.string.begin.js'

spec/javascript-spec.coffee

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,21 @@ describe "Javascript grammar", ->
111111
expect(tokens[6]).toEqual value: '/', scopes: ['source.js', 'string.regexp.js', 'punctuation.definition.string.end.js']
112112
expect(tokens[7]).toEqual value: ']', scopes: ['source.js', 'meta.brace.square.js']
113113

114+
it "tokenizes regular expressions inside ternary expressions", ->
115+
{tokens} = grammar.tokenizeLine('a ? /b/ : /c/')
116+
expect(tokens[ 0]).toEqual value: 'a ', scopes: ['source.js']
117+
expect(tokens[ 1]).toEqual value: '?', scopes: ['source.js', 'keyword.operator.js']
118+
expect(tokens[ 2]).toEqual value: ' ', scopes: ['source.js', 'string.regexp.js']
119+
expect(tokens[ 3]).toEqual value: '/', scopes: ['source.js', 'string.regexp.js', 'punctuation.definition.string.begin.js']
120+
expect(tokens[ 4]).toEqual value: 'b', scopes: ['source.js', 'string.regexp.js']
121+
expect(tokens[ 5]).toEqual value: '/', scopes: ['source.js', 'string.regexp.js', 'punctuation.definition.string.end.js']
122+
expect(tokens[ 6]).toEqual value: ' ', scopes: ['source.js']
123+
expect(tokens[ 7]).toEqual value: ':', scopes: ['source.js', 'keyword.operator.js']
124+
expect(tokens[ 8]).toEqual value: ' ', scopes: ['source.js', 'string.regexp.js']
125+
expect(tokens[ 9]).toEqual value: '/', scopes: ['source.js', 'string.regexp.js', 'punctuation.definition.string.begin.js']
126+
expect(tokens[10]).toEqual value: 'c', scopes: ['source.js', 'string.regexp.js']
127+
expect(tokens[11]).toEqual value: '/', scopes: ['source.js', 'string.regexp.js', 'punctuation.definition.string.end.js']
128+
114129
it "verifies that regular expressions have explicit count modifiers", ->
115130
source = fs.readFileSync(path.resolve(__dirname, '..', 'grammars', 'javascript.cson'), 'utf8')
116131
expect(source.search /{,/).toEqual -1

0 commit comments

Comments
 (0)