Skip to content

Commit

Permalink
Refactor CLJC processing
Browse files Browse the repository at this point in the history
See #67 and #63. 

- [x] be more intelligent about cljs macros (see #97) 
- [x] CLJC analyses split into clj and cljs
- [x] dedupe output
- [x] get rid of case false positives
- [x] refactored loading of namespaces
  • Loading branch information
borkdude committed Apr 20, 2019
1 parent fc136d7 commit 9ef7f0b
Show file tree
Hide file tree
Showing 41 changed files with 782 additions and 577 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -88,7 +88,7 @@ Lint a directory:
``` shellsession
$ clj-kondo --lint src
src/clj_kondo/test.cljs:7:1: warning: redundant do
src/clj_kondo/vars.clj:291:3: error: Wrong number of args (1) passed to clj-kondo.vars/analyze-arities
src/clj_kondo/calls.clj:291:3: error: Wrong number of args (1) passed to clj-kondo.calls/analyze-calls
```

Lint a project classpath:
Expand Down
16 changes: 16 additions & 0 deletions corpus/case.clj
@@ -0,0 +1,16 @@
(ns case-ns)

(def fn-name 'select-keys)

(case fn-name
(select-keys filter)
(filter 1 2 3) ;; invalid
(odd? pos? neg?)
(filter 1 2 3) ;; invalid
)

(case fn-name
(select-keys filter)
(filter 1 2 3) ;; invalid
(odd? 1 2) ;; invalid
)
9 changes: 0 additions & 9 deletions corpus/case_without_default.clj

This file was deleted.

8 changes: 8 additions & 0 deletions corpus/cljc/datascript.cljc
@@ -0,0 +1,8 @@
(ns datascript.db
(:refer-clojure :exclude [seqable?]))

(defn #?@(:clj [^Boolean seqable?]
:cljs [^boolean seqable?])
[x] x)

(seqable? 1 2)
4 changes: 2 additions & 2 deletions corpus/cljc/test_cljc.cljc
@@ -1,8 +1,8 @@
(ns corpus.cljc.test-cljc)

#?(:clj (defn foo [x y]
#?(:clj (defmacro foo [x y]
x)
:cljs (defn foo [x]
:cljs (defmacro foo [x] ;; self-hosted macro? :-)
x))

;; valid calls on lines 9 and 10:
Expand Down
4 changes: 3 additions & 1 deletion corpus/cljc/test_cljc.cljs
@@ -1,5 +1,7 @@
(ns corpus.cljc.test-cljc
(:require [corpus.cljc.test-cljc :refer [foo]]))
(:require-macros [corpus.cljc.test-cljc :as c :refer [foo]]))

(foo 1) ;; correct
(foo 1 2) ;; incorrect

(bar 1 2 3) ;; this call should be be recognized, since we didn't refer bar
9 changes: 5 additions & 4 deletions corpus/inline_def.clj
@@ -1,13 +1,14 @@
(ns inline-def)
(ns inline-def
(:require [clojure.test :as t]))

(defn foo []
(def x 1))

(defn- foo []
(def x 1))

(def foo (def x 1))

(deftest foo (def x 1))
(t/deftest foo (def x 1))

(defmacro foo [] (def x 1))
(defmacro foo [] (def x 1))
5 changes: 5 additions & 0 deletions corpus/spec/alpha.cljc
@@ -0,0 +1,5 @@
(ns spec.alpha
(:refer-clojure :exclude [def]))

(defmacro def [_name _keyword _spec]
::TODO)
6 changes: 6 additions & 0 deletions corpus/spec/alpha.cljs
@@ -0,0 +1,6 @@
(ns spec.alpha
(:refer-clojure :exclude [def])
(:require-macros [spec.alpha :as m]))

(def x 1) ;; no arity error, although spec.alpha/def lives in a same-named ns
(m/def foo ::foo)
@@ -1 +1 @@
["^ ","~:cljc",["^ ","~$with-state",["^ ","~:name","^1","~:row",25,"~:col",1,"~:lang","^0","~:fixed-arities",["~#set",[2]],"~:ns","~$cljs.analyzer.api"],"~$find-ns",["^ ","^2","^:","^3",165,"^4",1,"^5","^0","^6",["^7",[1,2]],"^8","^9"],"~$remove-ns",["^ ","^2","^;","^3",207,"^4",1,"^5","^0","^6",["^7",[1,2]],"^8","^9"],"~$ns-publics",["^ ","^2","^<","^3",185,"^4",1,"^5","^0","^6",["^7",[1,2]],"^8","^9"],"~$get-options",["^ ","^2","^=","^3",55,"^4",1,"^5","^0","^6",["^7",[0,1]],"^8","^9"],"~$in-cljs-user",["^ ","^2","^>","^3",215,"^4",1,"^5","^0","~:var-args-min-arity",1,"^8","^9"],"~$warning-enabled?",["^ ","^2","^@","^3",43,"^4",1,"^5","^0","^6",["^7",[1]],"^8","^9"],"~$ns-resolve",["^ ","^2","^A","^3",198,"^4",1,"^5","^0","^6",["^7",[3,2]],"^8","^9"],"~$empty-state",["^ ","^2","^B","^3",20,"^4",1,"^5","^0","^6",["^7",[0]],"^8","^9"],"~$no-warn",["^ ","^2","^C","^3",36,"^4",1,"^5","^0","^?",0,"^8","^9"],"~$empty-env",["^ ","^2","^D","^3",31,"^4",1,"^5","^0","^6",["^7",[0]],"^8","^9"],"~$default-warning-handler",["^ ","^2","^E","^3",48,"^4",1,"^5","^0","^6",["^7",[3]],"^8","^9"],"~$ns-interns",["^ ","^2","^F","^3",174,"^4",1,"^5","^0","^6",["^7",[1,2]],"^8","^9"],"~$all-ns",["^ ","^2","^G","^3",157,"^4",1,"^5","^0","^6",["^7",[0,1]],"^8","^9"],"~$resolve",["^ ","^2","^H","^3",145,"^4",1,"^5","^0","^6",["^7",[2]],"^8","^9"],"~$get-js-index",["^ ","^2","^I","^3",61,"^4",1,"^5","^0","^6",["^7",[0,1]],"^8","^9"]],"~:clj",["^ ","~$analyze",["^ ","^2","^K","^3",69,"^4",4,"^5","^J","^6",["^7",[4,3,2,5]],"^8","^9","~:base-lang","^0"],"~$forms-seq",["^ ","^2","^M","^3",91,"^4",4,"^5","^J","^6",["^7",[1,2]],"^8","^9","^L","^0"],"~$parse-ns",["^ ","^2","^N","^3",98,"^4",4,"^5","^J","^6",["^7",[1,4,3,2]],"^8","^9","^L","^0"],"~$analyze-file",["^ ","^2","^O","^3",121,"^4",4,"^5","^J","^6",["^7",[1,3,2]],"^8","^9","^L","^0"]]]
["^ ","~:clj",["^ ","~$with-state",["^ ","~:name","^1","~:row",25,"~:col",1,"~:lang","^0","~:fixed-arities",["~#set",[2]],"~:ns","~$cljs.analyzer.api","~:base-lang","~:cljc"],"~$find-ns",["^ ","^2","^<","^3",165,"^4",1,"^5","^0","^6",["^7",[1,2]],"^8","^9","^:","^;"],"~$remove-ns",["^ ","^2","^=","^3",207,"^4",1,"^5","^0","^6",["^7",[1,2]],"^8","^9","^:","^;"],"~$ns-publics",["^ ","^2","^>","^3",185,"^4",1,"^5","^0","^6",["^7",[1,2]],"^8","^9","^:","^;"],"~$get-options",["^ ","^2","^?","^3",55,"^4",1,"^5","^0","^6",["^7",[0,1]],"^8","^9","^:","^;"],"~$in-cljs-user",["^ ","^2","^@","^3",215,"^4",1,"^5","^0","~:var-args-min-arity",1,"^8","^9","^:","^;"],"~$analyze",["^ ","^2","^B","^3",69,"^4",4,"^5","^0","^6",["^7",[4,3,2,5]],"^8","^9","^:","^;"],"~$warning-enabled?",["^ ","^2","^C","^3",43,"^4",1,"^5","^0","^6",["^7",[1]],"^8","^9","^:","^;"],"~$ns-resolve",["^ ","^2","^D","^3",198,"^4",1,"^5","^0","^6",["^7",[3,2]],"^8","^9","^:","^;"],"~$empty-state",["^ ","^2","^E","^3",20,"^4",1,"^5","^0","^6",["^7",[0]],"^8","^9","^:","^;"],"~$analyze-file",["^ ","^2","^F","^3",121,"^4",4,"^5","^0","^6",["^7",[1,3,2]],"^8","^9","^:","^;"],"~$no-warn",["^ ","^2","^G","^3",36,"^4",1,"^5","^0","^A",0,"^8","^9","^:","^;"],"~$empty-env",["^ ","^2","^H","^3",31,"^4",1,"^5","^0","^6",["^7",[0]],"^8","^9","^:","^;"],"~$default-warning-handler",["^ ","^2","^I","^3",48,"^4",1,"^5","^0","^6",["^7",[3]],"^8","^9","^:","^;"],"~$parse-ns",["^ ","^2","^J","^3",98,"^4",4,"^5","^0","^6",["^7",[1,4,3,2]],"^8","^9","^:","^;"],"~$ns-interns",["^ ","^2","^K","^3",174,"^4",1,"^5","^0","^6",["^7",[1,2]],"^8","^9","^:","^;"],"~$all-ns",["^ ","^2","^L","^3",157,"^4",1,"^5","^0","^6",["^7",[0,1]],"^8","^9","^:","^;"],"~$forms-seq",["^ ","^2","^M","^3",91,"^4",4,"^5","^0","^6",["^7",[1,2]],"^8","^9","^:","^;"],"~$resolve",["^ ","^2","^N","^3",145,"^4",1,"^5","^0","^6",["^7",[2]],"^8","^9","^:","^;"],"~$get-js-index",["^ ","^2","^O","^3",61,"^4",1,"^5","^0","^6",["^7",[0,1]],"^8","^9","^:","^;"]],"~:cljs",["^ ","^1",["^ ","^2","^1","^3",25,"^4",1,"^5","^P","^6",["^7",[2]],"^8","^9","^:","^;"],"^<",["^ ","^2","^<","^3",165,"^4",1,"^5","^P","^6",["^7",[1,2]],"^8","^9","^:","^;"],"^=",["^ ","^2","^=","^3",207,"^4",1,"^5","^P","^6",["^7",[1,2]],"^8","^9","^:","^;"],"^>",["^ ","^2","^>","^3",185,"^4",1,"^5","^P","^6",["^7",[1,2]],"^8","^9","^:","^;"],"^?",["^ ","^2","^?","^3",55,"^4",1,"^5","^P","^6",["^7",[0,1]],"^8","^9","^:","^;"],"^@",["^ ","^2","^@","^3",215,"^4",1,"^5","^P","^A",1,"^8","^9","^:","^;"],"^C",["^ ","^2","^C","^3",43,"^4",1,"^5","^P","^6",["^7",[1]],"^8","^9","^:","^;"],"^D",["^ ","^2","^D","^3",198,"^4",1,"^5","^P","^6",["^7",[3,2]],"^8","^9","^:","^;"],"^E",["^ ","^2","^E","^3",20,"^4",1,"^5","^P","^6",["^7",[0]],"^8","^9","^:","^;"],"^G",["^ ","^2","^G","^3",36,"^4",1,"^5","^P","^A",0,"^8","^9","^:","^;"],"^H",["^ ","^2","^H","^3",31,"^4",1,"^5","^P","^6",["^7",[0]],"^8","^9","^:","^;"],"^I",["^ ","^2","^I","^3",48,"^4",1,"^5","^P","^6",["^7",[3]],"^8","^9","^:","^;"],"^K",["^ ","^2","^K","^3",174,"^4",1,"^5","^P","^6",["^7",[1,2]],"^8","^9","^:","^;"],"^L",["^ ","^2","^L","^3",157,"^4",1,"^5","^P","^6",["^7",[0,1]],"^8","^9","^:","^;"],"^N",["^ ","^2","^N","^3",145,"^4",1,"^5","^P","^6",["^7",[2]],"^8","^9","^:","^;"],"^O",["^ ","^2","^O","^3",61,"^4",1,"^5","^P","^6",["^7",[0,1]],"^8","^9","^:","^;"]]]

Large diffs are not rendered by default.

Large diffs are not rendered by default.

@@ -1 +1 @@
["^ ","~:cljc",["^ ","~$even-number-of-forms?",["^ ","~:name","^1","~:row",58,"~:col",1,"~:lang","^0","~:fixed-arities",["~#set",[1]],"~:ns","~$cljs.core.specs.alpha"],"~$quoted",["^ ","^2","^:","^3",209,"^4",1,"^5","^0","^6",["^7",[1]],"~:private?",true,"^8","^9"]]]
["^ ","~:clj",["^ ","~$even-number-of-forms?",["^ ","~:name","^1","~:row",58,"~:col",1,"~:lang","^0","~:fixed-arities",["~#set",[1]],"~:ns","~$cljs.core.specs.alpha","~:base-lang","~:cljc"],"~$quoted",["^ ","^6",["^7",[1]],"~:private?",true,"^8","^9","^2","^<","^:","^;","^5","^0","^4",1,"^3",209]],"~:cljs",["^ ","^1",["^ ","^2","^1","^3",58,"^4",1,"^5","^>","^6",["^7",[1]],"^8","^9","^:","^;"],"^<",["^ ","^6",["^7",[1]],"^=",true,"^8","^9","^2","^<","^:","^;","^5","^>","^4",1,"^3",209]]]

Large diffs are not rendered by default.

@@ -1 +1 @@
["^ ","~:cljc",["^ ","~$default-compiler-env*",["^ ","~:name","^1","~:row",46,"~:col",1,"~:lang","^0","~:fixed-arities",["~#set",[1]],"~:ns","~$cljs.env"],"~$default-compiler-env",["^ ","^2","^:","^3",59,"^4",1,"^5","^0","^6",["^7",[0,1]],"^8","^9"]],"~:clj",["^ ","~$with-compiler-env",["^ ","^2","^<","^3",65,"^4",4,"^5","^;","~:var-args-min-arity",1,"^8","^9","~:base-lang","^0"],"~$ensure",["^ ","^2","^?","^3",80,"^4",4,"^5","^;","^=",0,"^8","^9","^>","^0"]]]
["^ ","~:clj",["^ ","~$default-compiler-env*",["^ ","~:name","^1","~:row",46,"~:col",1,"~:lang","^0","~:fixed-arities",["~#set",[1]],"~:ns","~$cljs.env","~:base-lang","~:cljc"],"~$default-compiler-env",["^ ","^2","^<","^3",59,"^4",1,"^5","^0","^6",["^7",[0,1]],"^8","^9","^:","^;"],"~$with-compiler-env",["^ ","^2","^=","^3",65,"^4",4,"^5","^0","~:var-args-min-arity",1,"^8","^9","^:","^;"],"~$ensure",["^ ","^2","^?","^3",80,"^4",4,"^5","^0","^>",0,"^8","^9","^:","^;"]],"~:cljs",["^ ","^1",["^ ","^2","^1","^3",46,"^4",1,"^5","^@","^6",["^7",[1]],"^8","^9","^:","^;"],"^<",["^ ","^2","^<","^3",59,"^4",1,"^5","^@","^6",["^7",[0,1]],"^8","^9","^:","^;"]]]
@@ -1 +1 @@
["^ ","~:cljc",["^ ","~$unpack-string",["^ ","~:name","^1","~:row",212,"~:col",1,"~:lang","^0","~:fixed-arities",["~#set",[1]],"~:private?",true,"~:ns","~$cljs.js-deps"],"~$zip-file",["^ ","^2","^;","^3",39,"^4",1,"^5","^0","^6",["^7",[1]],"^9","^:"],"~$find-js-jar",["^ ","^2","^<","^3",54,"^4",1,"^5","^0","^6",["^7",[2]],"^9","^:"],"~$find-js-fs",["^ ","^2","^=","^3",71,"^4",1,"^5","^0","^6",["^7",[1]],"^9","^:"],"~$find-js-resources",["^ ","^2","^>","^3",99,"^4",1,"^5","^0","^6",["^7",[1]],"^9","^:"],"~$library-graph-node",["^ ","^2","^?","^3",257,"^4",1,"^5","^0","^6",["^7",[1,2]],"^8",true,"^9","^:"],"~$build-index",["^ ","^2","^@","^3",150,"^4",1,"^5","^0","^6",["^7",[1]],"^9","^:"],"~$find-js-classpath",["^ ","^2","^A","^3",78,"^4",1,"^5","^0","^6",["^7",[1]],"^9","^:"],"~$goog-dependencies*",["^ ","^2","^B","^3",314,"^4",1,"^5","^0","^6",["^7",[0]],"^9","^:"],"~$pack-string",["^ ","^2","^C","^3",204,"^4",1,"^5","^0","^6",["^7",[1]],"^8",true,"^9","^:"],"~$lib-spec-merge",["^ ","^2","^D","^3",145,"^4",1,"^5","^0","^6",["^7",[2]],"^9","^:"],"~$dependency-order-visit",["^ ","^2","^E","^3",187,"^4",1,"^5","^0","^6",["^7",[3,2]],"^9","^:"],"~$js-dependency-index",["^ ","^2","^F","^3",334,"^4",1,"^5","^0","^6",["^7",[1]],"^9","^:"],"~$load-foreign-library*",["^ ","^2","^G","^3",241,"^4",1,"^5","^0","^6",["^7",[1,2]],"^9","^:"],"~$find-url",["^ ","^2","^H","^3",231,"^4",1,"^5","^0","^6",["^7",[1]],"^9","^:"],"~$get-file",["^ ","^2","^I","^3",140,"^4",1,"^5","^0","^6",["^7",[2]],"^9","^:"],"~$load-library*",["^ ","^2","^J","^3",269,"^4",1,"^5","^0","^6",["^7",[1]],"^9","^:"],"~$jar-entry-names*",["^ ","^2","^K","^3",47,"^4",1,"^5","^0","^6",["^7",[1]],"^9","^:"],"~$library-dependencies",["^ ","^2","^L","^3",280,"^4",1,"^5","^0","^6",["^7",[1]],"^9","^:"],"~$classpath-files",["^ ","^2","^M","^3",19,"^4",1,"^5","^0","^6",["^7",[0]],"^8",true,"^9","^:"],"~$find-classpath-lib",["^ ","^2","^N","^3",346,"^4",1,"^5","^0","^6",["^7",[1]],"^9","^:"],"~$parse-js-ns",["^ ","^2","^O","^3",108,"^4",1,"^5","^0","^6",["^7",[1]],"^9","^:"],"~$dependency-order",["^ ","^2","^P","^3",215,"^4",1,"^5","^0","^6",["^7",[1]],"^9","^:"]]]
["^ ","~:clj",["^ ","~$unpack-string",["^ ","~:fixed-arities",["~#set",[1]],"~:private?",true,"~:ns","~$cljs.js-deps","~:name","^1","~:base-lang","~:cljc","~:lang","^0","~:col",1,"~:row",212],"~$zip-file",["^ ","^7","^=","^<",39,"^;",1,"^:","^0","^2",["^3",[1]],"^5","^6","^8","^9"],"~$find-js-jar",["^ ","^7","^>","^<",54,"^;",1,"^:","^0","^2",["^3",[2]],"^5","^6","^8","^9"],"~$find-js-fs",["^ ","^7","^?","^<",71,"^;",1,"^:","^0","^2",["^3",[1]],"^5","^6","^8","^9"],"~$find-js-resources",["^ ","^7","^@","^<",99,"^;",1,"^:","^0","^2",["^3",[1]],"^5","^6","^8","^9"],"~$library-graph-node",["^ ","^2",["^3",[1,2]],"^4",true,"^5","^6","^7","^A","^8","^9","^:","^0","^;",1,"^<",257],"~$build-index",["^ ","^7","^B","^<",150,"^;",1,"^:","^0","^2",["^3",[1]],"^5","^6","^8","^9"],"~$find-js-classpath",["^ ","^7","^C","^<",78,"^;",1,"^:","^0","^2",["^3",[1]],"^5","^6","^8","^9"],"~$goog-dependencies*",["^ ","^7","^D","^<",314,"^;",1,"^:","^0","^2",["^3",[0]],"^5","^6","^8","^9"],"~$pack-string",["^ ","^2",["^3",[1]],"^4",true,"^5","^6","^7","^E","^8","^9","^:","^0","^;",1,"^<",204],"~$lib-spec-merge",["^ ","^7","^F","^<",145,"^;",1,"^:","^0","^2",["^3",[2]],"^5","^6","^8","^9"],"~$dependency-order-visit",["^ ","^7","^G","^<",187,"^;",1,"^:","^0","^2",["^3",[3,2]],"^5","^6","^8","^9"],"~$js-dependency-index",["^ ","^7","^H","^<",334,"^;",1,"^:","^0","^2",["^3",[1]],"^5","^6","^8","^9"],"~$load-foreign-library*",["^ ","^7","^I","^<",241,"^;",1,"^:","^0","^2",["^3",[1,2]],"^5","^6","^8","^9"],"~$find-url",["^ ","^7","^J","^<",231,"^;",1,"^:","^0","^2",["^3",[1]],"^5","^6","^8","^9"],"~$get-file",["^ ","^7","^K","^<",140,"^;",1,"^:","^0","^2",["^3",[2]],"^5","^6","^8","^9"],"~$load-library*",["^ ","^7","^L","^<",269,"^;",1,"^:","^0","^2",["^3",[1]],"^5","^6","^8","^9"],"~$jar-entry-names*",["^ ","^7","^M","^<",47,"^;",1,"^:","^0","^2",["^3",[1]],"^5","^6","^8","^9"],"~$library-dependencies",["^ ","^7","^N","^<",280,"^;",1,"^:","^0","^2",["^3",[1]],"^5","^6","^8","^9"],"~$classpath-files",["^ ","^2",["^3",[0]],"^4",true,"^5","^6","^7","^O","^8","^9","^:","^0","^;",1,"^<",19],"~$find-classpath-lib",["^ ","^7","^P","^<",346,"^;",1,"^:","^0","^2",["^3",[1]],"^5","^6","^8","^9"],"~$parse-js-ns",["^ ","^7","^Q","^<",108,"^;",1,"^:","^0","^2",["^3",[1]],"^5","^6","^8","^9"],"~$dependency-order",["^ ","^7","^R","^<",215,"^;",1,"^:","^0","^2",["^3",[1]],"^5","^6","^8","^9"]],"~:cljs",["^ ","^1",["^ ","^2",["^3",[1]],"^4",true,"^5","^6","^7","^1","^8","^9","^:","^S","^;",1,"^<",212],"^=",["^ ","^7","^=","^<",39,"^;",1,"^:","^S","^2",["^3",[1]],"^5","^6","^8","^9"],"^>",["^ ","^7","^>","^<",54,"^;",1,"^:","^S","^2",["^3",[2]],"^5","^6","^8","^9"],"^?",["^ ","^7","^?","^<",71,"^;",1,"^:","^S","^2",["^3",[1]],"^5","^6","^8","^9"],"^@",["^ ","^7","^@","^<",99,"^;",1,"^:","^S","^2",["^3",[1]],"^5","^6","^8","^9"],"^A",["^ ","^2",["^3",[1,2]],"^4",true,"^5","^6","^7","^A","^8","^9","^:","^S","^;",1,"^<",257],"^B",["^ ","^7","^B","^<",150,"^;",1,"^:","^S","^2",["^3",[1]],"^5","^6","^8","^9"],"^C",["^ ","^7","^C","^<",78,"^;",1,"^:","^S","^2",["^3",[1]],"^5","^6","^8","^9"],"^D",["^ ","^7","^D","^<",314,"^;",1,"^:","^S","^2",["^3",[0]],"^5","^6","^8","^9"],"^E",["^ ","^2",["^3",[1]],"^4",true,"^5","^6","^7","^E","^8","^9","^:","^S","^;",1,"^<",204],"^F",["^ ","^7","^F","^<",145,"^;",1,"^:","^S","^2",["^3",[2]],"^5","^6","^8","^9"],"^G",["^ ","^7","^G","^<",187,"^;",1,"^:","^S","^2",["^3",[3,2]],"^5","^6","^8","^9"],"^H",["^ ","^7","^H","^<",334,"^;",1,"^:","^S","^2",["^3",[1]],"^5","^6","^8","^9"],"^I",["^ ","^7","^I","^<",241,"^;",1,"^:","^S","^2",["^3",[1,2]],"^5","^6","^8","^9"],"^J",["^ ","^7","^J","^<",231,"^;",1,"^:","^S","^2",["^3",[1]],"^5","^6","^8","^9"],"^K",["^ ","^7","^K","^<",140,"^;",1,"^:","^S","^2",["^3",[2]],"^5","^6","^8","^9"],"^L",["^ ","^7","^L","^<",269,"^;",1,"^:","^S","^2",["^3",[1]],"^5","^6","^8","^9"],"^M",["^ ","^7","^M","^<",47,"^;",1,"^:","^S","^2",["^3",[1]],"^5","^6","^8","^9"],"^N",["^ ","^7","^N","^<",280,"^;",1,"^:","^S","^2",["^3",[1]],"^5","^6","^8","^9"],"^O",["^ ","^2",["^3",[0]],"^4",true,"^5","^6","^7","^O","^8","^9","^:","^S","^;",1,"^<",19],"^P",["^ ","^7","^P","^<",346,"^;",1,"^:","^S","^2",["^3",[1]],"^5","^6","^8","^9"],"^Q",["^ ","^7","^Q","^<",108,"^;",1,"^:","^S","^2",["^3",[1]],"^5","^6","^8","^9"],"^R",["^ ","^7","^R","^<",215,"^;",1,"^:","^S","^2",["^3",[1]],"^5","^6","^8","^9"]]]

0 comments on commit 9ef7f0b

Please sign in to comment.