slightly better hashfn support
This commit is contained in:
parent
67663d8271
commit
e2e020e3ba
@ -153,7 +153,7 @@ find the definition `10`, but if `opts.stop-early?` is set, it would find
|
|||||||
:setmetatable
|
:setmetatable
|
||||||
(search-val server file (. call 2) stack opts)
|
(search-val server file (. call 2) stack opts)
|
||||||
|
|
||||||
(where (or :fn :lambda :λ))
|
(where (or :fn :lambda :λ :hashfn))
|
||||||
(if (and (= multival 1) (= 0 (length stack)))
|
(if (and (= multival 1) (= 0 (length stack)))
|
||||||
{:definition call : file}) ;; BASE CASE !!
|
{:definition call : file}) ;; BASE CASE !!
|
||||||
|
|
||||||
@ -166,7 +166,8 @@ find the definition `10`, but if `opts.stop-early?` is set, it would find
|
|||||||
(let [head (. definition 1)]
|
(let [head (. definition 1)]
|
||||||
(or (sym? head :fn)
|
(or (sym? head :fn)
|
||||||
(sym? head :lambda)
|
(sym? head :lambda)
|
||||||
(sym? head :λ))))
|
(sym? head :λ)
|
||||||
|
(sym? head :hashfn))))
|
||||||
(search-multival server file (. definition (length definition)) stack multival opts)
|
(search-multival server file (. definition (length definition)) stack multival opts)
|
||||||
result result
|
result result
|
||||||
_ (case (docs.get-builtin server (tostring (. call 1)))
|
_ (case (docs.get-builtin server (tostring (. call 1)))
|
||||||
@ -188,8 +189,14 @@ find the definition `10`, but if `opts.stop-early?` is set, it would find
|
|||||||
(local {:metadata METADATA} (require :fennel.compiler))
|
(local {:metadata METADATA} (require :fennel.compiler))
|
||||||
;; the options thing is getting out of hand
|
;; the options thing is getting out of hand
|
||||||
(λ search [server file ast opts initialization-opts]
|
(λ search [server file ast opts initialization-opts]
|
||||||
"Find the definition of an ast"
|
"Find the definition of an ast.
|
||||||
|
the options are getting out of hand.
|
||||||
|
|
||||||
|
opts: {:searched-through-require-with-stack-size-1 ?true
|
||||||
|
:stop-early? bool}
|
||||||
|
initialization-opts: {:stack ?list[ast]
|
||||||
|
:byte ?integer}
|
||||||
|
"
|
||||||
(assert (= (type initialization-opts) :table))
|
(assert (= (type initialization-opts) :table))
|
||||||
;; The stack is the multi-sym parts still to search
|
;; The stack is the multi-sym parts still to search
|
||||||
;; for example, if I'm searching for "foo.bar.baz", my immediate priority is to find foo,
|
;; for example, if I'm searching for "foo.bar.baz", my immediate priority is to find foo,
|
||||||
@ -204,13 +211,14 @@ find the definition `10`, but if `opts.stop-early?` is set, it would find
|
|||||||
(stack-add-split! [] split)))]
|
(stack-add-split! [] split)))]
|
||||||
(case (docs.get-builtin server (utils.multi-sym-base ast))
|
(case (docs.get-builtin server (utils.multi-sym-base ast))
|
||||||
document (search-document server document stack opts)
|
document (search-document server document stack opts)
|
||||||
_ (case (. file.references ast)
|
_ (case (. file.macro-refs ast)
|
||||||
;; we want to search at least once, assuming opts.stop-early?
|
ref {:binding ast :metadata (. METADATA ref)}
|
||||||
ref (search-reference server file ref stack opts)
|
;; We want to traverse at least one reference, even if stop-early is set.
|
||||||
_ (case (. file.definitions ast)
|
;; so we wan't just use the definitions
|
||||||
def (search-multival server file def.definition (stack-add-keys! stack def.keys) (or def.multival 1) opts)
|
_ (case (. file.references ast)
|
||||||
_ (case (. file.macro-refs ast)
|
ref (search-reference server file ref stack opts)
|
||||||
ref {:binding ast :metadata (. METADATA ref)})))))
|
_ (case (. file.definitions ast)
|
||||||
|
def (search-multival server file def.definition (stack-add-keys! stack def.keys) (or def.multival 1) opts))))))
|
||||||
(search-val server file ast (or initialization-opts.stack []) opts)))
|
(search-val server file ast (or initialization-opts.stack []) opts)))
|
||||||
|
|
||||||
(λ find-local-definition [file name ?scope]
|
(λ find-local-definition [file name ?scope]
|
||||||
|
|||||||
@ -207,6 +207,8 @@
|
|||||||
(local (x y| z) (foo))")
|
(local (x y| z) (foo))")
|
||||||
(check "(fn foo [] [{} =={}== {}])
|
(check "(fn foo [] [{} =={}== {}])
|
||||||
(local [x y| z] (foo))")
|
(local [x y| z] (foo))")
|
||||||
|
(check "(let [foo #=={}==
|
||||||
|
x| (foo)")
|
||||||
nil)
|
nil)
|
||||||
|
|
||||||
(fn test-macro []
|
(fn test-macro []
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user