Skip to content

Commit b54172d

Browse files
committed
fix #1526
1 parent 7047393 commit b54172d

File tree

6 files changed

+63
-67
lines changed

6 files changed

+63
-67
lines changed

changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
* `FIX` [#1476](https://github.com/sumneko/lua-language-server/issues/1476)
88
* `FIX` [#1493](https://github.com/sumneko/lua-language-server/issues/1493)
99
* `FIX` [#1499](https://github.com/sumneko/lua-language-server/issues/1499)
10+
* `FIX` [#1526](https://github.com/sumneko/lua-language-server/issues/1526)
1011

1112
## 3.5.3
1213
`2022-8-13`

locale/en-us/script.lua

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,8 @@ PARSER_UNKNOWN_ATTRIBUTE =
271271
'Local attribute should be `const` or `close`'
272272
PARSER_AMBIGUOUS_SYNTAX = -- TODO: need translate!
273273
'In Lua 5.1, the left brackets called by the function must be in the same line as the function.'
274+
PARSER_NEED_PAREN = -- TODO: need translate!
275+
'Need to add a pair of parentheses.'
274276
PARSER_LUADOC_MISS_CLASS_NAME =
275277
'<class name> expected.'
276278
PARSER_LUADOC_MISS_EXTENDS_SYMBOL =
@@ -416,6 +418,8 @@ ACTION_MARK_ASYNC =
416418
'Mark current function as async.'
417419
ACTION_ADD_DICT =
418420
'Add \'{}\' to workspace dict'
421+
ACTION_FIX_ADD_PAREN = -- TODO: need translate!
422+
'Add parentheses.'
419423

420424
COMMAND_DISABLE_DIAG =
421425
'Disable diagnostics'

locale/pt-br/script.lua

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,8 @@ PARSER_UNKNOWN_ATTRIBUTE =
271271
'Atributo local deve ser `const` ou `close`'
272272
PARSER_AMBIGUOUS_SYNTAX = -- TODO: need translate!
273273
'In Lua 5.1, the left brackets called by the function must be in the same line as the function.'
274+
PARSER_NEED_PAREN = -- TODO: need translate!
275+
'需要添加一对括号。'
274276
PARSER_LUADOC_MISS_CLASS_NAME =
275277
'Esperado <class name>.'
276278
PARSER_LUADOC_MISS_EXTENDS_SYMBOL =
@@ -416,6 +418,8 @@ ACTION_MARK_ASYNC =
416418
'Marque a função atual como assíncrona'
417419
ACTION_ADD_DICT =
418420
'Adicione \'{}\' ao seu espaço de trabalho no '
421+
ACTION_FIX_ADD_PAREN = -- TODO: need translate!
422+
'添加括号。'
419423

420424
COMMAND_DISABLE_DIAG =
421425
'Desativar diagnósticos.'

locale/zh-cn/script.lua

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,8 @@ PARSER_UNKNOWN_ATTRIBUTE =
271271
'局部变量属性应该是 `const` 或 `close`'
272272
PARSER_AMBIGUOUS_SYNTAX =
273273
'在 Lua 5.1 中,函数调用的左括号必须与函数在同一行。'
274+
PARSER_NEED_PAREN =
275+
'需要添加一对括号。'
274276
PARSER_LUADOC_MISS_CLASS_NAME =
275277
'缺少类名称。'
276278
PARSER_LUADOC_MISS_EXTENDS_SYMBOL =
@@ -414,8 +416,10 @@ ACTION_DISABLE_DIAG_FILE=
414416
'在此文件禁用诊断 ({})。'
415417
ACTION_MARK_ASYNC =
416418
'将当前函数标记为异步。'
417-
ACTION_ADD_DICT = -- TODO: need translate!
418-
'Add \'{}\' to workspace dict'
419+
ACTION_ADD_DICT =
420+
'\'{}\' 添加到工作区的词典中。'
421+
ACTION_FIX_ADD_PAREN =
422+
'添加括号。'
419423

420424
COMMAND_DISABLE_DIAG =
421425
'禁用诊断'

locale/zh-tw/script.lua

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,8 @@ PARSER_UNKNOWN_ATTRIBUTE =
271271
'區域變數屬性應該是 `const` 或 `close` 。'
272272
PARSER_AMBIGUOUS_SYNTAX = -- TODO: need translate!
273273
'在 Lua 5.1 中,函数调用的左括号必须与函数在同一行。'
274+
PARSER_NEED_PAREN = -- TODO: need translate!
275+
'需要添加一对括号。'
274276
PARSER_LUADOC_MISS_CLASS_NAME =
275277
'缺少類別名稱。'
276278
PARSER_LUADOC_MISS_EXTENDS_SYMBOL =
@@ -416,6 +418,8 @@ ACTION_MARK_ASYNC =
416418
'將目前函式標記為非同步。'
417419
ACTION_ADD_DICT =
418420
'添加 \'{}\' 到工作區字典'
421+
ACTION_FIX_ADD_PAREN = -- TODO: need translate!
422+
'添加括号。'
419423

420424
COMMAND_DISABLE_DIAG =
421425
'停用診斷'

script/parser/compile.lua

Lines changed: 44 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1444,68 +1444,6 @@ local function parseNameOrList(parent)
14441444
return list or first
14451445
end
14461446

1447-
local function dropTail()
1448-
local token = Tokens[Index + 1]
1449-
if token ~= '?'
1450-
and token ~= ':' then
1451-
return
1452-
end
1453-
local pl, pt, pp = 0, 0, 0
1454-
while true do
1455-
local token = Tokens[Index + 1]
1456-
if not token then
1457-
break
1458-
end
1459-
if NLMap[token] then
1460-
break
1461-
end
1462-
if token == ',' then
1463-
if pl > 0
1464-
or pt > 0
1465-
or pp > 0 then
1466-
goto CONTINUE
1467-
else
1468-
break
1469-
end
1470-
end
1471-
if token == '<' then
1472-
pl = pl + 1
1473-
goto CONTINUE
1474-
end
1475-
if token == '{' then
1476-
pt = pt + 1
1477-
goto CONTINUE
1478-
end
1479-
if token == '(' then
1480-
pp = pp + 1
1481-
goto CONTINUE
1482-
end
1483-
if token == '>' then
1484-
if pl <= 0 then
1485-
break
1486-
end
1487-
pl = pl - 1
1488-
goto CONTINUE
1489-
end
1490-
if token == '}' then
1491-
if pt <= 0 then
1492-
break
1493-
end
1494-
pt = pt - 1
1495-
goto CONTINUE
1496-
end
1497-
if token == ')' then
1498-
if pp <= 0 then
1499-
break
1500-
end
1501-
pp = pp - 1
1502-
goto CONTINUE
1503-
end
1504-
::CONTINUE::
1505-
Index = Index + 2
1506-
end
1507-
end
1508-
15091447
local function parseExpList(mini)
15101448
local list
15111449
local wantSep = false
@@ -1552,7 +1490,6 @@ local function parseExpList(mini)
15521490
if not exp then
15531491
break
15541492
end
1555-
dropTail()
15561493
if wantSep then
15571494
missSymbol(',', list[#list].finish, exp.start)
15581495
end
@@ -2379,6 +2316,27 @@ local function parseFunction(isLocal, isAction)
23792316
return func
23802317
end
23812318

2319+
local function pushErrorNeedParen(source)
2320+
pushError {
2321+
type = 'NEED_PAREN',
2322+
start = source.start,
2323+
finish = source.finish,
2324+
fix = {
2325+
title = 'FIX_ADD_PAREN',
2326+
{
2327+
start = source.start,
2328+
finish = source.start,
2329+
text = '(',
2330+
},
2331+
{
2332+
start = source.finish,
2333+
finish = source.finish,
2334+
text = ')',
2335+
}
2336+
}
2337+
}
2338+
end
2339+
23822340
local function parseExpUnit()
23832341
local token = Tokens[Index + 1]
23842342
if token == '(' then
@@ -2393,17 +2351,38 @@ local function parseExpUnit()
23932351

23942352
if token == '{' then
23952353
local table = parseTable()
2354+
if not table then
2355+
return nil
2356+
end
2357+
local exp = parseSimple(table, false)
2358+
if exp ~= table then
2359+
pushErrorNeedParen(table)
2360+
end
23962361
return table
23972362
end
23982363

23992364
if CharMapStrSH[token] then
24002365
local string = parseShortString()
2401-
return string
2366+
if not string then
2367+
return nil
2368+
end
2369+
local exp = parseSimple(string, false)
2370+
if exp ~= string then
2371+
pushErrorNeedParen(string)
2372+
end
2373+
return exp
24022374
end
24032375

24042376
if CharMapStrLH[token] then
24052377
local string = parseLongString()
2406-
return string
2378+
if not string then
2379+
return nil
2380+
end
2381+
local exp = parseSimple(string, false)
2382+
if exp ~= string then
2383+
pushErrorNeedParen(string)
2384+
end
2385+
return exp
24072386
end
24082387

24092388
local number = parseNumber()

0 commit comments

Comments
 (0)