From 9195818953cc89c190ead3f1ce5ef955dc54f9c6 Mon Sep 17 00:00:00 2001
From: Konrad Mrożek <konrad.mrozek@shareablee.com>
Date: Mon, 05 Jun 2023 15:42:30 +0000
Subject: [PATCH] First version of compiler

---
 TODO.org                    |    3 +++
 compiler/clojure-test.vim   |   17 +++++++++++++++++
 clojure/deps.edn            |    1 +
 clojure/src/test_runner.clj |   28 ++++++++++++++++++++++++++++
 4 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/TODO.org b/TODO.org
new file mode 100644
index 0000000..a5c7a63
--- /dev/null
+++ b/TODO.org
@@ -0,0 +1,3 @@
+* TODO
+  - [ ] Handle output codes properly
+  - [ ] Add errorformat compatible with clojure.test
diff --git a/clojure/deps.edn b/clojure/deps.edn
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/clojure/deps.edn
@@ -0,0 +1 @@
+{}
diff --git a/clojure/src/test_runner.clj b/clojure/src/test_runner.clj
new file mode 100644
index 0000000..2868c26
--- /dev/null
+++ b/clojure/src/test_runner.clj
@@ -0,0 +1,28 @@
+(binding [*compile-files* true]
+  (require 'clojure.test))
+
+(ns test-runner
+  (:require [clojure.test :as t]))
+
+(when-not (.exists (java.io.File. "classes"))
+  (.. (java.io.File. "classes") mkdir))
+
+(defmulti emacs-report :type)
+
+(defmethod emacs-report :pass
+  [m]
+  (t/with-test-out
+    (println "PASS:")))
+
+(defn -main  [& [test-file]]
+  (binding  [*compile-files* true]
+    (compile 'test-runner)
+    (let  [test-namespaces (->> (or test-file  "test")
+                                (java.io.File.)
+                                (file-seq)
+                                (filter (memfn isFile))
+                                (map (memfn getPath))
+                                (map load-file)
+                                (map (comp :ns meta))
+                                (into #{}))]
+      (run! (fn [n] (t/run-tests n)) test-namespaces))))
diff --git a/compiler/clojure-test.vim b/compiler/clojure-test.vim
new file mode 100644
index 0000000..02ea189
--- /dev/null
+++ b/compiler/clojure-test.vim
@@ -0,0 +1,17 @@
+vim9script
+if exists("g:current_compiler")
+    finish
+endif
+
+g:current_compiler = "clojure-test"
+
+if exists(":CompilerSet") != 2
+    command -nargs=* CompilerSet setlocal <args>
+endif
+
+echomsg expand('<sfile>:p:h:h')
+
+var clojure_test_deps = "'{:aliases {:clojure-test-vim {:extra-paths [\"classes\"] :extra-deps {mrroman/clojure-test.vim {:local/root \"" .. expand('<sfile>:p:h:h') .. "/clojure\"}}}}}'"
+
+execute 'CompilerSet makeprg=clojure\ -Sdeps\ ' .. escape(clojure_test_deps, ' \|"') .. '\ -Mtest:clojure-test-vim\ -m\ test-runner'
+CompilerSet errorformat&

--
Gitblit v1.9.3