Make sure we're not suggesting a "_G" version of everything
This commit is contained in:
parent
163ea1fd80
commit
2800038005
@ -32,43 +32,57 @@
|
|||||||
seen []]
|
seen []]
|
||||||
|
|
||||||
(fn add-completion [definition name]
|
(fn add-completion [definition name]
|
||||||
|
(table.insert results
|
||||||
|
(doto (format.completion-item-format name definition)
|
||||||
|
(tset :filterText name)
|
||||||
|
(tset :textEdit {:newText name : range}))))
|
||||||
|
|
||||||
|
(fn add-completion-recursively [definition name]
|
||||||
"add the completion. also recursively adds the fields' completions"
|
"add the completion. also recursively adds the fields' completions"
|
||||||
(when (not (. seen definition))
|
(when (not (. seen definition))
|
||||||
(set (. seen definition) true)
|
(set (. seen definition) true)
|
||||||
(table.insert results
|
(add-completion definition name)
|
||||||
(doto (format.completion-item-format name definition)
|
|
||||||
(tset :filterText name)
|
|
||||||
(tset :textEdit {:newText name : range})))
|
|
||||||
|
|
||||||
(when (= (type definition.definition) :string)
|
(when (= (type definition.definition) :string)
|
||||||
(each [key value (pairs (-> (docs.get-global server :string) (. :fields)))]
|
(each [key value (pairs (-> (docs.get-global server :string) (. :fields)))]
|
||||||
(add-completion value (.. name ":" key))))
|
(add-completion-recursively value (.. name ":" key))))
|
||||||
(when (fennel.table? definition.definition)
|
(when (fennel.table? definition.definition)
|
||||||
(each [field value (pairs definition.definition)]
|
(each [field value (pairs definition.definition)]
|
||||||
(when (= (type field) :string)
|
(when (= (type field) :string)
|
||||||
(case (analyzer.search-ast server definition.file value [] {})
|
(case (analyzer.search-ast server definition.file value [] {})
|
||||||
def (do
|
def (if (or (= :self (tostring (?. def :metadata :fnl/arglist 1)))
|
||||||
(when (or (?. def :metadata :fnl/arglist)
|
(and (fennel.list? def.definition)
|
||||||
(and (fennel.list? def.definition)
|
;; TODO check that arg is called `self`
|
||||||
;; TODO check that arg is called `self`
|
(or (and (fennel.sym? (. def.definition 1) "fn")
|
||||||
(or (fennel.sym? (. def.definition 1) "fn")
|
(fennel.sym? (. def.definition 2) "self"))
|
||||||
(fennel.sym? (. def.definition 1) "λ"))))
|
(and (fennel.sym? (. def.definition 1) "λ")
|
||||||
(add-completion def (.. name ":" field)))
|
(fennel.sym? (. def.definition 2) "self")))))
|
||||||
(add-completion def (.. name "." field)))
|
(add-completion-recursively def (.. name ":" field))
|
||||||
|
(add-completion-recursively def (.. name "." field)))
|
||||||
_ (do
|
_ (do
|
||||||
(io.stderr:write "BAD!!!! undocumented field: " (tostring field) "\n")
|
(io.stderr:write "BAD!!!! undocumented field: " (tostring field) "\n")
|
||||||
{:label field})))))
|
{:label field})))))
|
||||||
(when definition.fields
|
(when definition.fields
|
||||||
(each [field value (pairs definition.fields)]
|
(each [field value (pairs definition.fields)]
|
||||||
(when (= (type field) :string)
|
(when (= (type field) :string)
|
||||||
(add-completion value (.. name ":" field)))))
|
(if (or (= :self (tostring (?. value :metadata :fnl/arglist 1)))
|
||||||
|
(and (fennel.list? value.definition)
|
||||||
|
;; TODO check that arg is called `self`
|
||||||
|
(or (and (fennel.sym? (. value.definition 1) "fn")
|
||||||
|
(fennel.sym? (. value.definition 2) "self"))
|
||||||
|
(and (fennel.sym? (. value.definition 1) "λ")
|
||||||
|
(fennel.sym? (. value.definition 2) "self")))))
|
||||||
|
(add-completion-recursively value (.. name ":" field))
|
||||||
|
(add-completion-recursively value (.. name "." field))))))
|
||||||
|
|
||||||
(set (. seen definition) false)))
|
(set (. seen definition) false)))
|
||||||
;; end yield
|
;; end yield
|
||||||
|
|
||||||
(each [_ global* (ipairs file.allowed-globals)]
|
(each [_ global* (ipairs file.allowed-globals)]
|
||||||
(case (analyzer.search-name-and-scope server file global* scope)
|
(case (analyzer.search-name-and-scope server file global* scope)
|
||||||
def (add-completion def global*)
|
def (if (and (= :_G (tostring global*))
|
||||||
|
(not (: (tostring ?symbol) :match "_G[:.]")))
|
||||||
|
(add-completion def global*)
|
||||||
|
(add-completion-recursively def global*))
|
||||||
_ (do
|
_ (do
|
||||||
(io.stderr:write "BAD!!!! undocumented global: " (tostring global*) "\n")
|
(io.stderr:write "BAD!!!! undocumented global: " (tostring global*) "\n")
|
||||||
{:label global*})))
|
{:label global*})))
|
||||||
@ -76,18 +90,15 @@
|
|||||||
(while scope
|
(while scope
|
||||||
(each [mangling (pairs scope.manglings)]
|
(each [mangling (pairs scope.manglings)]
|
||||||
(case (analyzer.search-name-and-scope server file mangling scope)
|
(case (analyzer.search-name-and-scope server file mangling scope)
|
||||||
def (add-completion def mangling)
|
def (add-completion-recursively def mangling)
|
||||||
_ (do
|
_ (add-completion-recursively {} mangling)))
|
||||||
(io.stderr:write "BAD!!!! undocumented mangling: " (tostring mangling) "\n")
|
|
||||||
{:label mangling})))
|
|
||||||
(when in-call-position?
|
(when in-call-position?
|
||||||
(each [macro* (pairs scope.macros)]
|
(each [macro* (pairs scope.macros)]
|
||||||
;; TODO make it work like the other ones
|
|
||||||
(table.insert results {:label macro* :filterText macro* :textEdit {:newText macro* : range}}))
|
(table.insert results {:label macro* :filterText macro* :textEdit {:newText macro* : range}}))
|
||||||
|
|
||||||
(each [special (pairs scope.specials)]
|
(each [special (pairs scope.specials)]
|
||||||
(case (analyzer.search-name-and-scope server file special scope)
|
(case (analyzer.search-name-and-scope server file special scope)
|
||||||
def (add-completion def special)
|
def (add-completion-recursively def special)
|
||||||
_ (do
|
_ (do
|
||||||
(io.stderr:write "BAD!!!! undocumented special: " (tostring special) "\n")
|
(io.stderr:write "BAD!!!! undocumented special: " (tostring special) "\n")
|
||||||
{:label special}))))
|
{:label special}))))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user