summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changelog.md1
-rw-r--r--script/vm/compiler.lua13
-rw-r--r--test/type_inference/init.lua6
3 files changed, 14 insertions, 6 deletions
diff --git a/changelog.md b/changelog.md
index 8777103f..2476c817 100644
--- a/changelog.md
+++ b/changelog.md
@@ -23,6 +23,7 @@
local n2 = f(0) -- `n2` is `number`
local n3 = f(0, 0) -- `n3` is `string`
```
+* `FIX` [#1228](https://github.com/sumneko/lua-language-server/issues/1228)
## 3.3.1
`2022-6-17`
diff --git a/script/vm/compiler.lua b/script/vm/compiler.lua
index 2f3cc36f..5ebf624c 100644
--- a/script/vm/compiler.lua
+++ b/script/vm/compiler.lua
@@ -629,7 +629,7 @@ local function bindAs(source)
local root = guide.getRoot(source)
local docs = root.docs
if not docs then
- return
+ return false
end
local ases = docs._asCache
if not ases then
@@ -645,19 +645,20 @@ local function bindAs(source)
end)
end
+ if #ases == 0 then
+ return false
+ end
+
local max = #ases
local index
local left = 1
local right = max
for _ = 1, 1000 do
- index = left + (right - left) // 2
- if index <= left then
+ if left == right then
index = left
break
- elseif index >= right then
- index = right
- break
end
+ index = left + (right - left) // 2
local doc = ases[index]
if doc.originalComment.start < source.finish + 2 then
left = index + 1
diff --git a/test/type_inference/init.lua b/test/type_inference/init.lua
index bc497f37..33184569 100644
--- a/test/type_inference/init.lua
+++ b/test/type_inference/init.lua
@@ -2998,3 +2998,9 @@ local t
local <?n?> = t[i]
]]
+
+TEST 'string' [=[
+local x = true
+local y = x--[[@as integer]] --is `integer` here
+local z = <?x?>--[[@as string]] --is `true` here
+]=]