This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2021-08-01
Channels
- # announcements (3)
- # babashka (1)
- # beginners (29)
- # calva (3)
- # cider (5)
- # clojure (17)
- # clojure-europe (9)
- # clojurescript (31)
- # conjure (2)
- # cursive (14)
- # datomic (51)
- # deps-new (4)
- # honeysql (8)
- # introduce-yourself (1)
- # lumo (8)
- # malli (28)
- # missionary (1)
- # off-topic (20)
- # pathom (2)
- # polylith (22)
- # practicalli (10)
- # reagent (3)
- # reitit (6)
- # ring (2)
- # schema (2)
- # shadow-cljs (25)
- # spacemacs (3)
Cursive doesn't recognize the named fn arity of defmethod, e.g.:
(defmethod somemulti :dispatch-val
method-name
[arg1 arg2]
(method-body))
defmethod takes a fn-tail after the dispatch value and fn can have a name (symbol)I'm using scicloj/tablecloth
and it makes heavy use of an export macro. Here's an example:
(export-symbols tech.v3.datatype.datetime.base
system-zone-id
utc-zone-id
system-zone-offset
utc-zone-offset
milliseconds-since-epoch->instant
seconds-since-epoch->instant
instant
instant->milliseconds-since-epoch
instant->seconds-since-epoch
instant->microseconds-since-epoch
microseconds-since-epoch->instant
local-date-time->local-time
local-time
milliseconds-since-epoch->local-time
local-time->instant
local-time->seconds
local-time->milliseconds
seconds->local-time
milliseconds->local-time
instant->local-date-time
zoned-date-time->instant
zoned-date-time->milliseconds-since-epoch
zoned-date-time
instant->zoned-date-time
milliseconds-since-epoch->zoned-date-time
local-date-time->instant
local-date-time->zoned-date-time
local-date-time
milliseconds-since-epoch->local-date-time
local-date-time->milliseconds-since-epoch
local-date
local-date-time->local-date
local-date->local-date-time
local-date->days-since-epoch
days-since-epoch->local-date
local-date->instant
local-date->zoned-date-time
local-date->milliseconds-since-epoch
local-time->local-date-time
milliseconds-since-epoch->local-date
duration
duration->nanoseconds
nanoseconds->duration
duration->milliseconds
milliseconds->duration)
Is there some magic to getting Cursive to understand this form?I would have to look at that, probably. There are some similar macros that Cursive supports, but I’m not sure how that one works.
The first arg is a namespace and then var-arg list of symbols.
(defmacro export-symbols
[src-ns & symbol-list]
`(do
(require '~src-ns)
~@(->> symbol-list
(mapv
(fn [sym-name]
`(let [varval# (requiring-resolve (symbol ~(name src-ns)
~(name sym-name)))
var-meta# (meta varval#)]
(when-not varval#
(throw (ex-info
(format "Failed to find symbol '%s' in namespace '%s'"
~(name sym-name) ~(name src-ns))
{:symbol '~sym-name
:src-ns '~src-ns})))
(when (:macro var-meta#)
(throw
(ex-info
(format "Cannot export macros as this breaks aot: %s"
'~sym-name)
{:symbol '~sym-name})))
(def ~(symbol (name sym-name)) @varval#)
(alter-meta! #'~(symbol (name sym-name))
merge
(select-keys var-meta#
[:file :line :column
:doc
:column :tag
:arglists]))))))))
Here's the implCould you try resolving that one as cljs.core/import-macros
? See here for how to do that: https://cursive-ide.com/userguide/macros.html#customising-symbol-resolution
Unfortunately, it doesn't work
No worries. I can open an issue if helpful
Thanks!