Analyze (include) the same way as (require)
This commit is contained in:
parent
be997dc7fb
commit
cb8dc29bed
@ -23,6 +23,7 @@ identifiers are declared / referenced in which places."
|
|||||||
;; words surrounded by - are symbols,
|
;; words surrounded by - are symbols,
|
||||||
;; because fennel doesn't allow 'require in a runtime file
|
;; because fennel doesn't allow 'require in a runtime file
|
||||||
(local -require- (sym :require))
|
(local -require- (sym :require))
|
||||||
|
(local -include- (sym :include))
|
||||||
(local -fn- (sym :fn))
|
(local -fn- (sym :fn))
|
||||||
(local -lambda- (sym :lambda))
|
(local -lambda- (sym :lambda))
|
||||||
(local -λ- (sym :λ))
|
(local -λ- (sym :λ))
|
||||||
@ -224,7 +225,8 @@ identifiers are declared / referenced in which places."
|
|||||||
;; TODO check if hashfn needs to be here
|
;; TODO check if hashfn needs to be here
|
||||||
(where (or [(= -fn-)] [(= -lambda-)] [(= -λ-)]))
|
(where (or [(= -fn-)] [(= -lambda-)] [(= -λ-)]))
|
||||||
(define-function ast scope)
|
(define-function ast scope)
|
||||||
(where [(= -require-) _modname])
|
(where (or [(= -require-) _modname]
|
||||||
|
[(= -include-) _modname]))
|
||||||
(tset require-calls ast true)
|
(tset require-calls ast true)
|
||||||
;; fennel expands multisym calls into the `:` special, so we need to reference the symbol while we still can
|
;; fennel expands multisym calls into the `:` special, so we need to reference the symbol while we still can
|
||||||
(where [sym] (multisym? sym) (: (tostring sym) :find ":"))
|
(where [sym] (multisym? sym) (: (tostring sym) :find ":"))
|
||||||
|
|||||||
@ -119,7 +119,7 @@ a user-written file.
|
|||||||
(if (< multival len)
|
(if (< multival len)
|
||||||
(search-val self file (. call (+ 1 multival)) stack opts)
|
(search-val self file (. call (+ 1 multival)) stack opts)
|
||||||
(search-multival self file (. call (+ len 1)) stack (+ multival (- len) 1) opts)))
|
(search-multival self file (. call (+ len 1)) stack (+ multival (- len) 1) opts)))
|
||||||
:require
|
(where (or :require :include))
|
||||||
(let [mod (. call 2)]
|
(let [mod (. call 2)]
|
||||||
(if (= multival 1)
|
(if (= multival 1)
|
||||||
(when (= :string (type mod))
|
(when (= :string (type mod))
|
||||||
|
|||||||
@ -197,6 +197,8 @@
|
|||||||
;; steal as many lints as possible from cargo
|
;; steal as many lints as possible from cargo
|
||||||
;; unnecessary parens around single multival destructure
|
;; unnecessary parens around single multival destructure
|
||||||
|
|
||||||
|
;; unused variable, when a function binding is only used in its body, and the function value is discarded
|
||||||
|
|
||||||
{: test-compile-error
|
{: test-compile-error
|
||||||
: test-parse-error
|
: test-parse-error
|
||||||
: test-macro-error
|
: test-macro-error
|
||||||
@ -204,6 +206,7 @@
|
|||||||
: test-unused
|
: test-unused
|
||||||
: test-ampersand
|
: test-ampersand
|
||||||
: test-no-warnings
|
: test-no-warnings
|
||||||
|
: test-unknown-module-field
|
||||||
: test-unnecessary-colon
|
: test-unnecessary-colon
|
||||||
: test-unset-var
|
: test-unset-var
|
||||||
: test-unpack-into-op
|
: test-unpack-into-op
|
||||||
|
|||||||
@ -160,13 +160,12 @@
|
|||||||
:main.fnl "(local {: target} (require| :foo))
|
:main.fnl "(local {: target} (require| :foo))
|
||||||
(target)"})
|
(target)"})
|
||||||
|
|
||||||
;; TODO make it work on include
|
(check
|
||||||
; (check
|
{:foo.fnl "(fn target []
|
||||||
; {:foo.fnl "(fn target []
|
nil)
|
||||||
; nil)
|
=={: target}=="
|
||||||
; =={: target}=="
|
:main.fnl "(local {: target} (includ|e :foo))
|
||||||
; :main.fnl "(local {: target} (include| :foo))
|
(target)"})
|
||||||
; (target)"}))
|
|
||||||
|
|
||||||
;; TODO fix goto-definition on the module name string itself
|
;; TODO fix goto-definition on the module name string itself
|
||||||
; (check
|
; (check
|
||||||
@ -189,15 +188,13 @@
|
|||||||
|
|
||||||
|
|
||||||
(fn test-no-crash []
|
(fn test-no-crash []
|
||||||
;; TODO convert the rest of goto
|
|
||||||
|
|
||||||
; ;; (it "can go to a destructured function argument")
|
|
||||||
|
|
||||||
(check "(macro cool [a b] `(let [,b 10] ,a))\n(cool |x ==x==)")
|
(check "(macro cool [a b] `(let [,b 10] ,a))\n(cool |x ==x==)")
|
||||||
(check "(macro cool [a b] `(let [,b 10] ,a))\n(cool x x|)")
|
(check "(macro cool [a b] `(let [,b 10] ,a))\n(cool x x|)")
|
||||||
|
|
||||||
(check "|#$..."))
|
(check "|#$..."))
|
||||||
|
|
||||||
|
; ;; (it "can go to a destructured function argument")
|
||||||
; ;; (it "can go through more than one file")
|
; ;; (it "can go through more than one file")
|
||||||
; ;; (it "will give up instead of freezing on recursive requires")
|
; ;; (it "will give up instead of freezing on recursive requires")
|
||||||
; ;; (it "will give up instead of freezing on recursive tables constructed with (set)")
|
; ;; (it "will give up instead of freezing on recursive tables constructed with (set)")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user