diff --git a/changelog.md b/changelog.md
index 16c31605a364c2b92adb08154dc8c8f7fd8b3b13..e9b98ef6d55b229a02cb5ee33fbe8c667fab8654 100644
--- a/changelog.md
+++ b/changelog.md
@@ -17,6 +17,7 @@
 * `CHG` completion: improve misspelling results
 * `FIX` runtime errors
 * `FIX` hint: may show param-2 as `self`
+* `FIX` [#660](https://github.com/sumneko/lua-language-server/issues/660)
 
 ## 2.3.7
 `2021-8-17`
diff --git a/script/core/noder.lua b/script/core/noder.lua
index 70c24c85407f0b04305b2b725415f435914fb5bf..3fd316eba153b084c9db03e4fa1bd455ba1ba22f 100644
--- a/script/core/noder.lua
+++ b/script/core/noder.lua
@@ -57,8 +57,10 @@ local INFO_META_INDEX = {
     end
 }
 local INFO_CLASS_TO_EXNTENDS = {
-    filter = function (_, field)
+    filter = function (_, field, mode)
         return field ~= nil
+            or mode == 'field'
+            or mode == 'allfield'
     end,
     filterValid = function (_, field)
         return not field
diff --git a/script/core/searcher.lua b/script/core/searcher.lua
index 108a9c37f4af805ec5343d1f6920fd22595052b6..1407d617fc7bcaf0052f659414529c694f6201ee 100644
--- a/script/core/searcher.lua
+++ b/script/core/searcher.lua
@@ -617,7 +617,7 @@ function m.searchRefsByID(status, suri, expect, mode)
     ---@param info node.info
     local function checkInfoFilter(id, field, info)
         for filter in next, filters do
-            if not filter(id, field) then
+            if not filter(id, field, mode) then
                 return false
             end
         end
diff --git a/test/completion/common.lua b/test/completion/common.lua
index b3a2a36ae2ed38a4a046b249241b08ac07c2abca..2efa63ad75166a80e4f95859c39d50b53e02dca0 100644
--- a/test/completion/common.lua
+++ b/test/completion/common.lua
@@ -2637,3 +2637,19 @@ m.$
 {
     [1] = EXISTS,
 }
+
+TEST [[
+---@class class1
+class1 = {}
+
+function class1:method1() end
+
+---@class class2 : class1
+class2 = {}
+
+class2:$
+
+]]
+{
+    [1] = EXISTS,
+}