Description
How are you using the lua-language-server?
Visual Studio Code Extension (sumneko.lua)
Which OS are you using?
Windows
What is the issue affecting?
Diagnostics/Syntax Checking
Expected Behaviour
I am testing the glob
like pattern used in Lua.doc.<scope>Name
, and the set pattern seems not working for single character.
.luarc.jsonc
test.lua
---@class A
local A = {}
A._A = 1
A._Z = 1
A._a = 1
A._e = 1
A._z = 1
A._AA = 1
A._aa = 1
---@type A
local t = {}
print(t._A) -- warning
print(t._Z) -- warning
print(t._a) -- warning
print(t._e) -- warning
print(t._z) -- ok
print(t._AA) -- ok
print(t._aa) -- ok
Actual Behaviour
---@type A
local t = {}
print(t._A) -- warning
print(t._Z) -- warning
print(t._a) -- ok (false negative)
print(t._e) -- ok (false negative)
print(t._z) -- ok
print(t._AA) -- ok
print(t._aa) -- ok
- the single range word
aeiou
is not working as expected
Reproduction steps
Use the provided snippet
Additional Notes
I know that the glob pattern syntax in defined using LPeg:
lua-language-server/script/glob/glob.lua
Lines 19 to 46 in ddc96bd
I am not familiar with LPeg, but by adding a
print(#range, range[1], range[2])
inside mt:range()
here, those single range word seems don't even get parsed. 😕 lua-language-server/script/glob/matcher.lua
Lines 99 to 100 in ddc96bd
With a bit of testing, the RangeUnit
definition seems should be changed from:
['RangeUnit'] = m.Ct(m.C(m.V'RangeWord') * m.P'-' * m.C(m.V'RangeWord'))
+ m.V'RangeWord',
to =>
['RangeUnit'] = m.Ct(m.C(m.V'RangeWord') * m.P'-' * m.C(m.V'RangeWord'))
+ m.Ct(m.C(m.V'RangeWord')),
Then the set
logic for single range character starts to work 🎉
But I don't know why it works this way 🙈
Can anyone comment on my above suggested change?
If this is correct, I am going to open a PR. 🙂
Log File
No response