From be44cda696d2714866e85d82fb4bf91295442604 Mon Sep 17 00:00:00 2001 From: XeroOl Date: Sun, 12 May 2024 12:25:14 -0500 Subject: [PATCH] Unknown field errors in _G are suppressed --- src/fennel-ls/language.fnl | 3 ++- test/lint.fnl | 16 +++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/fennel-ls/language.fnl b/src/fennel-ls/language.fnl index 71afe6b..de644cc 100644 --- a/src/fennel-ls/language.fnl +++ b/src/fennel-ls/language.fnl @@ -65,7 +65,8 @@ 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 [self document stack opts] - (doto opts (tset :searched-through-require true)) + (when (not= (tostring (?. document :binding)) :_G) + (set opts.searched-through-require true)) (if (= 0 (length stack)) document (and document.fields diff --git a/test/lint.fnl b/test/lint.fnl index e039550..43a7cb2 100644 --- a/test/lint.fnl +++ b/test/lint.fnl @@ -87,11 +87,17 @@ :main.fnl "(local {: a : c &as guy} (require :the-guy-they-tell-you-not-to-worry-about)) (print guy.b guy.d)"} - [{:code 302}] [{:code 302 :message "unknown module field: a"} - {:code 302 :message "unknown module field: b"}]) - (check "table.insert2" - [{:code 302}] - [])) + [{:code 302 :message "unknown field: guy.d"}] + [{:code 302 :message "unknown field: a"} + {:code 302 :message "unknown field: b"}]) + (check "table.insert2 table.insert" + [{:code 302 :message "unknown field: table.insert2"}] + [{:code 302 :message "unknown field: table.insert"}]) + ;; if you explicitly write "_G", it should turn off this test. Hardcoded. + (check "_G.insert2" + [] + [{:code 302}]) + nil) (fn test-unnecessary-colon [] (check "(let [x :haha] (: x :find :a))"