Back
select-keys (clj)
(source)function
(select-keys map keyseq)
Returns a map containing only those entries in map whose key is in keys
Examples
clojure
(deftest division
(is (= clojure.core// /))
(binding [*ns* *ns*]
(eval '(do (ns foo
(:require [clojure.core :as bar])
(:use [clojure.test]))
(is (= clojure.core// bar//))))))
(deftest t-Explicit-line-column-numbers
(is (= {:line 42 :column 99}
(-> "^{:line 42 :column 99} (1 2)" read-string meta (select-keys [:line :column]))))
(are [l c s] (= {:line l :column c} (-> s str->lnpr read meta (select-keys [:line :column])))
42 99 "^{:line 42 :column 99} (1 2)"
1 99 "^{:column 99} (1 2)")
(eval (-> "^{:line 42 :column 99} (defn explicit-line-numbering [])" str->lnpr read))
(is (= {:line 42 :column 99}
(-> 'explicit-line-numbering resolve meta (select-keys [:line :column])))))
penpot/penpot
#_:clj-kondo/ignore
(ns app.common.data.macros
"Data retrieval & manipulation specific macros."
(:refer-clojure :exclude [get-in select-keys str with-open min max])
#?(:cljs (:require-macros [app.common.data.macros]))
(:require
#?(:clj [clojure.core :as c]
:cljs [cljs.core :as c])
[app.common.data :as d]
[cljs.analyzer.api :as aapi]
[cuerdas.core :as str]))
(defmacro select-keys
"A macro version of `select-keys`. Useful when keys vector is known
at compile time (aprox 600% performance boost).
It is not 100% equivalent, this macro does not removes not existing
keys in contrast to clojure.core/select-keys"
[target keys]
(assert (vector? keys) "keys expected to be a vector")
`{~@(mapcat (fn [key] [key (list `c/get target key)]) keys) ~@[]})
typedclojure/typedclojure
(ns ^:no-doc typed.ann.clojure
"Type annotations for the base Clojure distribution."
#?(:cljs (:require-macros [typed.ann-macros.clojure :as macros]))
(:require [clojure.core :as cc]
[typed.clojure :as t]
#?(:clj [typed.ann-macros.clojure :as macros])
#?(:clj typed.ann.clojure.jvm) ;; jvm annotations
#?(:clj clojure.core.typed))
#?(:clj
(:import (clojure.lang PersistentHashSet PersistentList
APersistentMap #_IPersistentCollection
#_ITransientSet
IRef)
(java.util Comparator Collection))))
cc/select-keys (t/All [k v] [(t/Map k v) t/AnySeqable :-> (t/Map k v)])
re-path/studio
(ns renderer.tools.page
(:require
[clojure.core.matrix :as mat]
[clojure.string :as str]
[goog.string :as g.str]
[re-frame.core :as rf]
[reagent.dom.server :as dom]
[renderer.element.handlers :as element.h]
[renderer.tools.base :as tools]
[renderer.utils.pointer :as pointer]
[renderer.utils.units :as units]))
(defmethod tools/render :page
[{:keys [attrs children type] :as element}]
(let [child-elements @(rf/subscribe [:element/filter-visible children])
rect-attrs (select-keys attrs [:x :y :width :height])
text-attrs (select-keys attrs [:x :y])
filter @(rf/subscribe [:document/filter])
zoom @(rf/subscribe [:document/zoom])
pointer-handler #(pointer/event-handler % element)]
[:g
[:text
(merge
(update text-attrs :y - (/ 10 zoom))
{:on-pointer-up pointer-handler
:on-pointer-down pointer-handler
:on-pointer-move pointer-handler
:fill "#888"
:font-family "monospace"
:font-size (/ 12 zoom)}) (or (:name element) type)]
re-path/studio
(ns renderer.frame.events
(:require
[clojure.core.matrix :as mat]
[re-frame.core :as rf]
[renderer.element.handlers :as el]
[renderer.frame.handlers :as handlers]
[renderer.utils.units :as units]))
(rf/reg-event-db
:frame/resize
(fn [{content-rect :content-rect :as db} [_ updated-content-rect]]
(let [offset (-> (merge-with - content-rect updated-content-rect)
(select-keys [:width :height]))
pan (mat/div [(:width offset) (:height offset)] 2)]
(-> db
(assoc :content-rect updated-content-rect)
(handlers/pan pan)))))
re-path/studio
(ns renderer.tools.arc
(:require
["svg-path-bbox" :as svg-path-bbox]
[clojure.core.matrix :as mat]
[goog.math]
[re-frame.core :as rf]
[renderer.attribute.angle :as angle]
[renderer.attribute.hierarchy :as hierarchy]
[renderer.element.handlers :as element.h]
[renderer.overlay :as overlay]
[renderer.tools.base :as tools]
[renderer.utils.pointer :as pointer]
[renderer.utils.units :as units]))
(defmethod tools/render :arc
[{:keys [attrs children] :as element}]
(let [child-elements @(rf/subscribe [:element/filter-visible children])
pointer-handler #(pointer/event-handler % element)]
[:path (merge {:d (tools/path element)
:on-pointer-up pointer-handler
:on-pointer-down pointer-handler
:on-pointer-move pointer-handler
:on-double-click pointer-handler}
(select-keys attrs [:stroke-width
:opacity
:fill
:stroke
:stroke-linecap
:stroke-dasharray])) child-elements]))