fennel-ls/src/fennel-ls/docs.fnl
2024-06-01 23:02:37 -05:00

65 lines
2.0 KiB
Fennel

(local fennel (require :fennel))
(local {:metadata METADATA
:scopes {:global {:specials SPECIALS
:macros MACROS}}}
(require :fennel.compiler))
(local specials
(collect [name value (pairs SPECIALS)]
name {:binding name :metadata (. METADATA value)}))
(local macros*
(collect [name value (pairs MACROS)]
name {:binding name :metadata (. METADATA value)}))
(local versions
{:lua51 (require :fennel-ls.docs.lua51)
:lua52 (require :fennel-ls.docs.lua52)
:lua53 (require :fennel-ls.docs.lua53)
:lua54 (require :fennel-ls.docs.lua54)})
(fn get-lua-version [version]
(when (not (. versions version))
(error (.. "fennel-ls doesn't know about lua version " version "\n"
"The allowed versions are: "
(fennel.view (doto (icollect [key (pairs versions)] key) table.sort)))))
(. versions version))
(local libraries
{:tic80 (require :fennel-ls.docs.tic80)})
(fn get-native-library [library]
(when (not (. libraries library))
(error (.. "fennel-ls doesn't know about native library " library "\n"
"The builtin libraries are: "
(fennel.view (doto (icollect [key (pairs libraries)] key) table.sort)))))
(. libraries library))
(fn get-all-globals [server]
(let [result []]
(each [_ library (ipairs server.configuration.native-libraries)]
(icollect [name (pairs (get-native-library library)) &into result]
name))
(icollect [name (pairs (get-lua-version server.configuration.version)) &into result]
name)))
(fn get-global [server global-name]
(or
(accumulate [result nil
_ library (ipairs server.configuration.native-libraries)
&until result]
(. (get-native-library library)
global-name))
(. (get-lua-version server.configuration.version)
global-name)))
(fn get-builtin [_server builtin-name]
(or (. specials builtin-name)
(. macros* builtin-name)))
;; TODO get-module-metadata
{: get-global
: get-builtin
: get-all-globals}