+ это привычка из жс, делать по модулю на компонент
Не из джавы ли? 😄
ухххх :D
та да, у меня, в частности, из js привычка 🙂
у меня была такая проблема в проекте с селениум тестами. написал макрос который подключает все ns с определенным префиксом
#_(: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)))
Чо уж, тогда (defmacro загрузить-все-тесты ...)
про 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))
может быть есть какой-то другой синтаксис?
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]]
т.е. он не прнимает keyword первым элементом в такой конструкции (:keyword :<< fn)
@kuzmin_m судя по https://github.com/clojure/core.match/blob/master/src/main/clojure/clojure/core/match.clj#L1809 это деталь реализации - оно пытается заресолвить синтаксис по первым двум кейвордам. т.е. пытается воспринять :k1 как часть синтаксиса core.match
а что такое :default
?
при этом игнорирует :<<
или это из multimethod?
это "магический" диспач-кей для defmulti
а, ок
т.е. если 2 кейворда - оно принципиально считает, что первый часть синтаксиса - второй - тупо value и не участвует в парсинге
имхо это "баг" 🙂
я завел issue им
подскажите, можно, как-то, с помощью cljs.spec описать пропсы reagent-компонента? как вы описываете PropTypes reagent-компонента?
@y.khmelevskii если это функция, то спекой для функций
s/fdef
но от этого сомнительный профит
имхо
еще spec/assert есть
+ вроде бы, instrument
не валидирует все аспекты спеки функции
он только парамеры проверяет
угу, была билиотека поверх спеки с проверкой return value
а еще спека не подается DCE в cljs
так и будет висеть в бандле
@y.khmelevskii проще наверное сделать pre- post- ассерты
@roman01la спасибо. печально как-то без propTypes и ворнингов реакта. pre- ассерты, на сколько я понимаю, если не пройдут, то будут вызывать исключения, чего не хочется, нужны просто ворнинги. И да, спека в бандле тоже неприятно.
Так а ворнинг-то на основании чего делать, если спеки в бандле не будет?
Ворнинги на деве полезны, для прода обычно проптайпсы вырезают с бандла.
Так положить спек в исходники, которые цепляются только при :dev
.
значит без ns алиасов придется писать?
эта либа?
да, она
интересно, а чем обусловлено существование этой либы? почему спек из коробки не делает тоже самое?