Fork me on GitHub
#cursive
<
2021-08-01
>
Joe R. Smith16:08:43

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)

markaddleman23:08:42

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?

cfleming23:08:24

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.

markaddleman00:08:16

The first arg is a namespace and then var-arg list of symbols.

markaddleman00:08:39

(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 impl

cfleming00:08:37

Could 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

markaddleman00:08:03

Unfortunately, it doesn't work

cfleming00:08:22

Sadly, I’ll have to look at it in that case.

markaddleman00:08:01

No worries. I can open an issue if helpful

cfleming00:08:19

Yes please!