From 66d352acdedb5acc5bb860a7fc30411eac67c30c Mon Sep 17 00:00:00 2001 From: roman01la Date: Mon, 29 Jun 2020 11:13:04 +0300 Subject: [PATCH] add warn-on-interpretation flag --- src/daiquiri/compiler.clj | 24 ++++++++++++++++++++++-- src/rum/core.clj | 3 +++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/daiquiri/compiler.clj b/src/daiquiri/compiler.clj index ea25538..bcb3a07 100644 --- a/src/daiquiri/compiler.clj +++ b/src/daiquiri/compiler.clj @@ -4,6 +4,21 @@ [clojure.set :as set] [cljs.analyzer :as ana])) +(def warn-on-interpretation (atom false)) + +(defn maybe-warn-on-interpret + ([env expr] + (maybe-warn-on-interpret env expr nil)) + ([env expr tag] + (when @warn-on-interpretation + (binding [*out* *err*] + (let [column (:column env) + line (:line env)] + (println (str "WARNING: interpreting by default at " ana/*cljs-file* ":" line ":" column)) + (prn expr) + (when tag + (println "Inferred tag was:" tag))))))) + (def ^:private primitive-types "The set of primitive types that can be handled by React." #{'js 'clj-nil 'js/React.Element @@ -126,8 +141,12 @@ `daiquiri.interpreter/interpret` if the inferred return type is not a primitive React type." [expr] - (if (primitive-type? (infer-tag &env expr)) - expr `(daiquiri.interpreter/interpret ~expr))) + (let [tag (infer-tag &env expr)] + (if (primitive-type? tag) + expr + (do + (maybe-warn-on-interpret &env expr tag) + `(daiquiri.interpreter/interpret ~expr))))) (defn- form-name "Get the name of the supplied form." @@ -346,6 +365,7 @@ (defmethod compile-element :default [element env] + (maybe-warn-on-interpret env element) `(daiquiri.interpreter/interpret [~(first element) ~@(for [x (rest element)] diff --git a/src/rum/core.clj b/src/rum/core.clj index 334a7e4..7bd7a42 100644 --- a/src/rum/core.clj +++ b/src/rum/core.clj @@ -12,6 +12,9 @@ [rum.cursor Cursor] (rum.server_render JSComponent))) +(defmacro set-warn-on-interpretation! [v] + (reset! compiler/warn-on-interpretation v)) + (defn- fn-body? [form] (when (and (seq? form) (vector? (first form)))