Skip to content

Instantly share code, notes, and snippets.

View JacobNinja's full-sized avatar

JR Richardson JacobNinja

View GitHub Profile
@JacobNinja
JacobNinja / gist:f463717d99aadc0d903ebdb6c67c7f3b
Created May 11, 2016 15:48
Loop/recur compiled example
cljs.user=> (defn foo [] (loop [i 1] (if (>i 10) i (recur (inc i)))))
#'cljs.user/foo
cljs.user=> foo
#object[cljs$user$foo "function cljs$user$foo(){
var i = 1;
while(true){
if(cljs.core.truth_(cljs.user._GT_i.call(null,10))){
return i;
} else {
var G__23 = (i + 1);
@JacobNinja
JacobNinja / template.clj
Last active September 17, 2015 16:59
Hiccup templates using syntax-quote
(defn- make-stylesheet [link]
[:link {:rel "stylesheet" :href link}])
;; Programatic style
[:body (into [:head] (map make-stylesheet ["foo.css" "bar.css"]))
[:p "content"]]
;; Syntax-quote style
`[:body [:head ~@(map make-stylesheet ["foo.css" "bar.css"])]
[:p "content"]]
@JacobNinja
JacobNinja / pp.clj
Created September 10, 2015 17:36
Pretty print last repl return value
user=> (macroexpand-1 '(async/go (inc 1)))
(clojure.core/let [c__12900__auto__ (clojure.core.async/chan 1) captured-bindings__12901__auto__ (clojure.lang.Var/getThreadBindingFrame)] (clojure.core.async.impl.dispatch/run (clojure.core/fn [] (clojure.core/let [f__12902__auto__ (clojure.core/fn state-machine__12729__auto__ ([] (clojure.core.async.impl.ioc-macros/aset-all! (java.util.concurrent.atomic.AtomicReferenceArray. 7) 0 state-machine__12729__auto__ 1 1)) ([state_7171] (clojure.core/let [old-frame__12730__auto__ (clojure.lang.Var/getThreadBindingFrame) ret-value__12731__auto__ (try (clojure.lang.Var/resetThreadBindingFrame (clojure.core.async.impl.ioc-macros/aget-object state_7171 3)) (clojure.core/loop [] (clojure.core/let [result__12732__auto__ (clojure.core/case (clojure.core/int (clojure.core.async.impl.ioc-macros/aget-object state_7171 1)) 1 (clojure.core/let [inst_7169 (do (inc 1))] (clojure.core.async.impl.ioc-macros/return-chan state_7171 inst_7169)))] (if (clojure.core/identical? result__12732__au
@JacobNinja
JacobNinja / greeting-kata.clj
Created August 12, 2015 20:08
Greeting kata solution
;; Core
(defn- maplast
"Apply map-fn to the last element in s
unless s contains only 1 element"
[map-fn s]
(if (> (count s) 1)
(conj (vec (butlast s))
(map-fn (last s)))
s))
@JacobNinja
JacobNinja / aot.clj
Created August 4, 2015 00:55
Scan namespace declarations for potential AOT targets
; Add the resulting vector to `:aot` on your dev profile
(def directory ".")
(defn- read-file [file]
(binding [*read-eval* false]
(read-string (slurp file))))
(defn- require-form? [form]
(and (seq? form)
@JacobNinja
JacobNinja / pipeline.clj
Last active April 6, 2022 09:14
Clojure core.async pipeline example
(require '[clojure.core.async :as async]
'[clj-http.client :as client]
'[clojure.data.json :as json])
(def concurrency 5)
(let [in (async/chan)
out (async/chan)
request-handler (fn [url out*]
(async/go
@JacobNinja
JacobNinja / gist:0032e88f980f217bc61f
Created January 22, 2015 19:30
' vs " in MRI parser
irb(main):002:0> Ripper.sexp "'foo'"
=> [:program, [[:string_literal, [:string_content, [:@tstring_content, "foo", [1, 1]]]]]]
irb(main):003:0> Ripper.sexp '"foo"'
=> [:program, [[:string_literal, [:string_content, [:@tstring_content, "foo", [1, 1]]]]]]
irb(main):004:0> Ripper.sexp '"#{foo}"'
=> [:program, [[:string_literal, [:string_content, [:string_embexpr, [[:vcall, [:@ident, "foo", [1, 3]]]]]]]]]
@JacobNinja
JacobNinja / gist:f5fda976f38d23477547
Created November 23, 2014 15:47
Destructuring with splat
class NilClass
def to_a
p 'calling to_a within NilClass'
[]
end
end
# irb(main):017:0> [*nil]
# "calling to_a within NilClass"
# => []
Parse results for Rails
user system total real
"Codeminer parse results: 0 parse errors, 0 runtime errors, 1621 files total"
7.760000 0.080000 7.840000 ( 7.980644)
"Codeminer sexp results: 0 parse errors, 0 runtime errors, 1621 files total"
11.080000 0.040000 11.120000 ( 11.136238)
"Codeminer (RubyParser compatible) sexp results: 0 parse errors, 0 runtime errors, 1621 files total"
11.250000 0.070000 11.320000 ( 11.317630)
"Codeminer flog results: 0 parse errors, 0 runtime errors, 1621 files total"
@JacobNinja
JacobNinja / substitution_example.rb
Created July 9, 2014 21:45
Source tree substitution examples
# Example 1: Swap the consequence and else statements in an if expression
if_node = CodeMiner.parse(<<-RUBY).each.first
if foo
begin
do_something
end
else
do_something_else
end