Merge pull request #307 from AndreaCrotti/reporting

Reporting
This commit is contained in:
Andrea Crotti 2019-03-09 09:45:29 +00:00 committed by GitHub
commit 827908d7cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
366 changed files with 973 additions and 875 deletions

10
report/project.clj Normal file
View File

@ -0,0 +1,10 @@
(defproject report "0.1.0-SNAPSHOT"
:description "Give a report of the yas snippets"
:dependencies [[org.clojure/clojure "1.10.0"]
[hiccup "1.0.5"]]
:uberjar-name "report.jar"
:min-lein-version "2.8.1"
:source-paths ["src"]
:test-paths ["test"]
:resource-paths ["resources"])

88
report/src/core.clj Normal file
View File

@ -0,0 +1,88 @@
(ns core
"Parse files and generate some html reports"
(:require [clojure.string :as str]
[hiccup.core :as hiccup]
[clojure.java.io :as io]))
;; TODO: do something whenever the mode has just `.yas-parents` and nothing else?
(def bulma-url "https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.4/css/bulma.css")
(defn kw-pattern
[kw]
(re-pattern (format "# %s: (.*)" kw)))
(defn extract-keyword
[filename keyword]
(let [lines (-> filename
slurp
str/split-lines)]
(first
(remove nil?
(map #(last (re-find (kw-pattern keyword) %)) lines)))))
(defn mode-files
[mode-dir]
(filter #(.isFile %)
(file-seq (io/file mode-dir))))
(defn parse-mode
[mode-dir]
(for [f (mode-files mode-dir)]
{:filename (.getName (io/file mode-dir f))
:name (extract-keyword f "name")
:key (or (extract-keyword f "key")
(extract-keyword f "name"))
:group (extract-keyword f "group")
:desc (extract-keyword f "desc")}))
(defn parse-everything
[snippets-dir]
(into {}
(remove nil?)
(for [d (file-seq (io/file snippets-dir))]
(when (.isDirectory d)
{(.getName d) (parse-mode d)}))))
(defn store-to-edn
[snippets-dir output-file]
(spit output-file (parse-everything snippets-dir)))
(def header [:name :key :filename :group :desc])
(defn table
"Generate a table"
[header rows]
[:table.table.is-striped
[:thead (into [:tr.tr]
(for [h header]
[:td.td (name h)]))]
(into [:tbody.tbody]
(for [r rows]
(into [:tr.tr]
(for [h header]
[:td.td (r h)]))))])
(defn structure
[body]
[:html
[:head
[:link {:rel "stylesheet"
:href bulma-url
:crossorigin "anonymous"}]]
(into [:body] body)])
(defn gen-html
[snips-dir]
(let [all-modes (parse-everything snips-dir)
tables (for [[m snips] (sort all-modes)]
[:div.section
[:h2.subtitle m]
(table header snips)])]
(spit
"hello.html"
(hiccup/html
(structure tables)))))
(comment
(gen-html "../snippets"))