aboutsummaryrefslogtreecommitdiff
path: root/test/unit/viml/expressions/parser_spec.lua
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2017-10-08 01:19:58 +0300
committerZyX <kp-pav@yandex.ru>2017-10-15 19:13:51 +0300
commite45e519495832e3d1d0fde1e32723d4140c5fc65 (patch)
treeb77f5b4613723ac9c400b1861246a3a1b06f0cfa /test/unit/viml/expressions/parser_spec.lua
parent21a5ce033c5a853bed3204ea9f0f7a3cfc1d164f (diff)
downloadrneovim-e45e519495832e3d1d0fde1e32723d4140c5fc65.tar.gz
rneovim-e45e519495832e3d1d0fde1e32723d4140c5fc65.tar.bz2
rneovim-e45e519495832e3d1d0fde1e32723d4140c5fc65.zip
viml/parser/expressions: Error out on multiple colons in a row
Diffstat (limited to 'test/unit/viml/expressions/parser_spec.lua')
-rw-r--r--test/unit/viml/expressions/parser_spec.lua73
1 files changed, 73 insertions, 0 deletions
diff --git a/test/unit/viml/expressions/parser_spec.lua b/test/unit/viml/expressions/parser_spec.lua
index 8d96c29db7..46e3328184 100644
--- a/test/unit/viml/expressions/parser_spec.lua
+++ b/test/unit/viml/expressions/parser_spec.lua
@@ -2700,6 +2700,42 @@ describe('Expressions parser', function()
hl('Identifier', 'b', 1),
hl('Curly', '}'),
})
+ check_parsing('{a : b : c}', 0, {
+ -- 01234567890
+ -- 0 1
+ ast = {
+ {
+ 'DictLiteral(-di):0:0:{',
+ children = {
+ {
+ 'Colon:0:2: :',
+ children = {
+ 'PlainIdentifier(scope=0,ident=a):0:1:a',
+ {
+ 'Colon:0:6: :',
+ children = {
+ 'PlainIdentifier(scope=0,ident=b):0:4: b',
+ 'PlainIdentifier(scope=0,ident=c):0:8: c',
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ err = {
+ arg = ': c}',
+ msg = 'E15: Colon outside of dictionary or ternary operator: %.*s',
+ },
+ }, {
+ hl('Dict', '{'),
+ hl('Identifier', 'a'),
+ hl('Colon', ':', 1),
+ hl('Identifier', 'b', 1),
+ hl('InvalidColon', ':', 1),
+ hl('Identifier', 'c', 1),
+ hl('Dict', '}'),
+ })
end)
itp('works with ternary operator', function()
check_parsing('a ? b : c', 0, {
@@ -3348,6 +3384,43 @@ describe('Expressions parser', function()
hl('TernaryColon', ':'),
hl('Identifier', 'h'),
})
+ check_parsing('a ? b : c : d', 0, {
+ -- 0123456789012
+ -- 0 1
+ ast = {
+ {
+ 'Colon:0:9: :',
+ children = {
+ {
+ 'Ternary:0:1: ?',
+ children = {
+ 'PlainIdentifier(scope=0,ident=a):0:0:a',
+ {
+ 'TernaryValue:0:5: :',
+ children = {
+ 'PlainIdentifier(scope=0,ident=b):0:3: b',
+ 'PlainIdentifier(scope=0,ident=c):0:7: c',
+ },
+ },
+ },
+ },
+ 'PlainIdentifier(scope=0,ident=d):0:11: d',
+ },
+ },
+ },
+ err = {
+ arg = ': d',
+ msg = 'E15: Colon outside of dictionary or ternary operator: %.*s',
+ },
+ }, {
+ hl('Identifier', 'a'),
+ hl('Ternary', '?', 1),
+ hl('Identifier', 'b', 1),
+ hl('TernaryColon', ':', 1),
+ hl('Identifier', 'c', 1),
+ hl('InvalidColon', ':', 1),
+ hl('Identifier', 'd', 1),
+ })
end)
itp('works with comparison operators', function()
check_parsing('a == b', 0, {