fix "unknown module field" when accessing fields from doc objects with no known fields

this means stuff like `io.stderr:write` isn't a warning anymore
This commit is contained in:
XeroOl 2024-07-15 17:35:25 -05:00
parent 07e8239216
commit 3d1485060c
4 changed files with 13 additions and 5 deletions

View File

@ -65,14 +65,16 @@ find the definition `10`, but if `opts.stop-early?` is set, it would find
(stack-add-split! stack (utils.multi-sym-split symbol)))
(λ search-document [server document stack opts]
(when (and (not= (tostring (?. document :binding)) :_G)
(= (length stack) 1))
(when (not= (tostring (?. document :binding)) :_G)
(set opts.searched-through-require-with-stack-size-1 true))
(if (= 0 (length stack))
document
(and document.fields
(. document.fields (. stack (length stack))))
(search-document server (. document.fields (table.remove stack)) stack opts)))
(search-document server (. document.fields (table.remove stack)) stack opts)
(not document.fields)
(do
(set opts.searched-through-require-indeterminate true))))
(λ search-val [server file ?ast stack opts]
"searches for the definition of the ast, adjusted to 1 value"

View File

@ -46,7 +46,9 @@ the `file.diagnostics` field, filling it with diagnostics."
"if ?ast is a module field that isn't known, return a diagnostic"
(let [opts {}
item (analyzer.search-ast server file ?ast stack opts)]
(if (and (not item) opts.searched-through-require-with-stack-size-1)
(if (and (not item)
opts.searched-through-require-with-stack-size-1
(not opts.searched-through-require-indeterminate))
{:range (message.ast->range server file symbol)
:message (.. "unknown field: " (tostring symbol))
:severity message.severity.WARN

View File

@ -3,7 +3,8 @@
(case (os.getenv "FAITH_TEST")
target (let [(module function) (target:match "([^ ]+) ([^ ]+)")]
(xpcall (. (require module) function) #(print ($:tostring target))))
(tset package.loaded module {function (. (require module) function)})
(faith.run [module]))
_ (faith.run
[:test.json-rpc
:test.string-processing

View File

@ -110,6 +110,9 @@
field.unknown"}
[]
[{:code 302}])
(check "package.loaded.mymodule io.stderr.write"
[]
[{:code 302}])
nil)
(fn test-unnecessary-colon []