Make dictionary namespaces bb compatible

Now that translations are just data no excuse for them not being bb
compatible. Also gets rid of needless sexp parsing
This commit is contained in:
Gabriel Horner
2022-03-28 12:33:28 -04:00
parent 5635469d7a
commit f4839da1e1
9 changed files with 71 additions and 128 deletions

View File

@@ -1,58 +1,28 @@
(ns logseq.tasks.lang
"Tasks related to language translations"
(:require [logseq.tasks.rewrite-clj :as rewrite-clj]
[clojure.set :as set]
(:require [clojure.set :as set]
[frontend.dicts :as dicts]
[frontend.modules.shortcut.dicts :as shortcut-dicts]
[logseq.tasks.util :as task-util]))
(defn- get-dicts
[]
(dissoc (rewrite-clj/metadata-var-sexp "src/main/frontend/dicts.cljs" "dicts")
:tongue/fallback))
(dissoc dicts/dicts :tongue/fallback))
(defn- get-non-en-shortcuts
(defn- get-all-dicts
[]
(nth (rewrite-clj/metadata-var-sexp "src/main/frontend/modules/shortcut/dict.cljs"
"dict")
3))
;; unnecessary complexity :(
(defn- decorate-namespace [k]
(let [n (name k)
ns (namespace k)]
(keyword (str "command." ns) n)))
(defn- get-en-shortcut-dicts
[]
(->> (rewrite-clj/metadata-var-sexp
"src/main/frontend/modules/shortcut/config.cljs"
"all-default-keyboard-shortcuts")
(map (fn [[k v]] (vector (decorate-namespace k) (:desc v))))
(into {})))
(defn- get-en-categories
[]
(->> (rewrite-clj/metadata-var-sexp
"src/main/frontend/modules/shortcut/config.cljs"
"category")
(map (fn [[k v]] (vector k (:doc (meta v)))))
(into {})))
(defn- get-shortcuts
[]
(merge {:en (merge (get-en-categories)
(get-en-shortcut-dicts))}
(get-non-en-shortcuts)))
(merge-with merge (get-dicts) shortcut-dicts/dicts))
(defn- get-languages
[]
(->> (rewrite-clj/var-sexp "src/main/frontend/dicts.cljs" "languages")
(->> dicts/languages
(map (juxt :value :label))
(into {})))
(defn list-langs
"List translated langagues with their number of translations"
[]
(let [dicts (merge-with merge (get-dicts) (get-shortcuts))
(let [dicts (get-all-dicts)
en-count (count (dicts :en))
langs (get-languages)]
(->> dicts
@@ -79,7 +49,7 @@
(println "Language" lang "does not have an entry in dicts.cljs")
(System/exit 1))
all-dicts [[(get-dicts) "frontend/dicts.cljs"]
[(get-shortcuts) "shortcut/dict.cljs"]]
[shortcut-dicts/dicts "shortcut/dicts.cljs"]]
all-missing (map (fn [[dicts file]]
[(select-keys (dicts :en)
(set/difference (set (keys (dicts :en)))
@@ -102,7 +72,7 @@
(defn invalid-translations
"Lists translation that don't exist in English"
[]
(let [dicts (merge-with merge (get-dicts) (get-shortcuts))
(let [dicts (get-all-dicts)
;; For now defined as :en but clj-kondo analysis could be more thorough
valid-keys (set (keys (dicts :en)))
invalid-dicts
@@ -122,7 +92,7 @@
(defn list-duplicates
"Lists translations that are the same as the one in English"
[& args]
(let [dicts (merge-with merge (get-dicts) (get-shortcuts))
(let [dicts (get-all-dicts)
en-dicts (dicts :en)
lang (or (keyword (first args))
(task-util/print-usage "LOCALE"))

View File

@@ -1,27 +0,0 @@
(ns logseq.tasks.rewrite-clj
"Rewrite-clj fns"
(:require [rewrite-clj.zip :as z]))
(defn- find-symbol-value-sexpr
([zloc sym] (find-symbol-value-sexpr zloc sym z/right))
([zloc sym nav-fn]
;; Returns first symbol found
(-> (z/find-value zloc z/next sym)
nav-fn
z/sexpr)))
(defn var-sexp
"Returns value sexp to the right of var"
[file string-var]
(let [zloc (z/of-string (slurp file))
sexp (find-symbol-value-sexpr zloc (symbol string-var))]
(or sexp
(throw (ex-info "var-sexp must not return nil" {:file file :string-var string-var})))))
(defn metadata-var-sexp
"Returns value sexp to the right of var with metadata"
[file string-var]
(let [zloc (z/of-string (slurp file))
sexp (find-symbol-value-sexpr zloc (symbol string-var) (comp z/right z/up))]
(or sexp
(throw (ex-info "sexp must not return nil" {:file file :string-var string-var})))))