Fork me on GitHub
#clojure-russia
<
2017-10-16
>
Roman Liutikov05:10:37

+ это привычка из жс, делать по модулю на компонент

dottedmag07:10:20

Не из джавы ли? 😄

y.khmelevskii07:10:42

та да, у меня, в частности, из js привычка 🙂

seryh08:10:27

у меня была такая проблема в проекте с селениум тестами. написал макрос который подключает все ns с определенным префиксом

seryh08:10:34

#_(:require [clojure.tools.namespace.find :as ns]
            [clojure.java.classpath :as cp])

(defmacro loading-my-tests
  "Подключает все ns из каталога test"
  []
  (let [all-ns (ns/find-namespaces (cp/classpath))
        test-ns-list (filter #(re-matches #"test(.*)" (str %)) all-ns)
        name-to-fn (fn [ns-name] `(require '[~ns-name :refer :all]))
        fn-list (mapv name-to-fn test-ns-list)]
    `(do ~@fn-list)))

dottedmag09:10:07

Чо уж, тогда (defmacro загрузить-все-тесты ...)

kuzmin_m09:10:28

про core.match кто-нибудь сталкивался с тем, что не работает вот это:

(let [x [:k1 :k2 :k3]]
  (m/match [x]
           [(:k1 :<< first)] :first))
а вот так - работает
(let [k1 :k1
      x [:k1 :k2 :k3]]
  (m/match [x]
           [(k1 :<< first)] :first))

kuzmin_m09:10:51

может быть есть какой-то другой синтаксис?

kuzmin_m09:10:13

Invalid list syntax :<< in (:k1 :<< first). Valid syntax:
   [[:default :guard] [:or :default] [:default :only] [:default :seq]
   [:default :when] [:default :as] [:default :<<] [:default
   :clojure.core.match/vector]]

kuzmin_m09:10:11

т.е. он не прнимает keyword первым элементом в такой конструкции (:keyword :<< fn)

anjensan09:10:48

@kuzmin_m судя по https://github.com/clojure/core.match/blob/master/src/main/clojure/clojure/core/match.clj#L1809 это деталь реализации - оно пытается заресолвить синтаксис по первым двум кейвордам. т.е. пытается воспринять :k1 как часть синтаксиса core.match

kuzmin_m09:10:56

а что такое :default?

anjensan09:10:03

при этом игнорирует :<<

kuzmin_m09:10:16

или это из multimethod?

anjensan09:10:17

это "магический" диспач-кей для defmulti

anjensan09:10:01

т.е. если 2 кейворда - оно принципиально считает, что первый часть синтаксиса - второй - тупо value и не участвует в парсинге

anjensan09:10:04

имхо это "баг" 🙂

kuzmin_m09:10:55

я завел issue им

y.khmelevskii13:10:04

подскажите, можно, как-то, с помощью cljs.spec описать пропсы reagent-компонента? как вы описываете PropTypes reagent-компонента?

Roman Liutikov13:10:12

@y.khmelevskii если это функция, то спекой для функций

Roman Liutikov13:10:24

но от этого сомнительный профит

kuzmin_m13:10:25

еще spec/assert есть

Roman Liutikov13:10:33

+ вроде бы, instrument не валидирует все аспекты спеки функции

kuzmin_m13:10:50

он только парамеры проверяет

Roman Liutikov13:10:51

угу, была билиотека поверх спеки с проверкой return value

Roman Liutikov14:10:20

а еще спека не подается DCE в cljs

Roman Liutikov14:10:27

так и будет висеть в бандле

Roman Liutikov14:10:27

@y.khmelevskii проще наверное сделать pre- post- ассерты

y.khmelevskii14:10:36

@roman01la спасибо. печально как-то без propTypes и ворнингов реакта. pre- ассерты, на сколько я понимаю, если не пройдут, то будут вызывать исключения, чего не хочется, нужны просто ворнинги. И да, спека в бандле тоже неприятно.

dottedmag15:10:16

Так а ворнинг-то на основании чего делать, если спеки в бандле не будет?

y.khmelevskii15:10:51

Ворнинги на деве полезны, для прода обычно проптайпсы вырезают с бандла.

dottedmag15:10:34

Так положить спек в исходники, которые цепляются только при :dev.

Roman Liutikov16:10:00

значит без ns алиасов придется писать?

mike_ananev21:10:09

эта либа?

dottedmag21:10:47

да, она

dragoncube23:10:09

интересно, а чем обусловлено существование этой либы? почему спек из коробки не делает тоже самое?