|
1757 | 1757 | the-ns #?(:clj (find-ns lib) :cljs (find-macros-ns lib))]
|
1758 | 1758 | (or (nil? the-ns) (nil? (.findInternedVar ^clojure.lang.Namespace the-ns sym)))))
|
1759 | 1759 |
|
1760 |
| -(defn missing-uses [uses env] |
| 1760 | +;; returns (s/map-of symbol? symbol?) |
| 1761 | +(defn missing-uses |
| 1762 | + [uses env] |
1761 | 1763 | (let [cenv @env/*compiler*]
|
1762 | 1764 | (into {} (filter (fn [[sym lib]] (missing-use? lib sym cenv)) uses))))
|
1763 | 1765 |
|
1764 |
| -(defn missing-renames [renames] |
| 1766 | +;; returns (s/map-of symbol? qualified-symbol?) |
| 1767 | +(defn missing-renames [renames env] |
1765 | 1768 | (let [cenv @env/*compiler*]
|
1766 | 1769 | (into {} (filter (fn [[_ qualified-sym]] (missing-rename? qualified-sym cenv)) renames))))
|
1767 | 1770 |
|
| 1771 | +;; returns (s/map-of symbol? symbol?) |
1768 | 1772 | (defn missing-use-macros [use-macros env]
|
1769 | 1773 | (let [cenv @env/*compiler*]
|
1770 | 1774 | (into {} (filter (fn [[sym lib]] (missing-use-macro? lib sym)) use-macros))))
|
1771 | 1775 |
|
| 1776 | +;; returns (s/map-of symbol? symbol?) |
1772 | 1777 | (defn inferred-use-macros [use-macros env]
|
1773 | 1778 | (let [cenv @env/*compiler*]
|
1774 | 1779 | (into {} (filter (fn [[sym lib]] (not (missing-use-macro? lib sym))) use-macros))))
|
1775 | 1780 |
|
| 1781 | +;; returns (s/map-of symbol? symbol?) |
1776 | 1782 | (defn inferred-rename-macros [rename-macros env]
|
1777 | 1783 | (into {} (filter (fn [[_ qualified-sym]] (not (missing-rename-macro? qualified-sym))) rename-macros)))
|
1778 | 1784 |
|
|
1798 | 1804 | (inferred-use-macros missing-uses env))))
|
1799 | 1805 |
|
1800 | 1806 | (defn check-use-macros-inferring-missing
|
1801 |
| - [ast name use-macros missing-uses env] |
1802 |
| - (let [remove-missing-uses #(apply dissoc % (keys missing-uses)) |
1803 |
| - missing-renames (missing-renames (:renames ast)) |
1804 |
| - missing-rename-macros (inferred-rename-macros missing-renames env) |
1805 |
| - remove-missing-renames #(apply dissoc % (keys missing-renames)) |
| 1807 | + [{:keys [name uses use-macros] :as ast} env] |
| 1808 | + (let [missing-uses (when (and *analyze-deps* (seq uses)) |
| 1809 | + (missing-uses uses env)) |
| 1810 | + remove-missing-uses #(apply dissoc % (keys missing-uses)) |
1806 | 1811 | ast' (-> ast
|
1807 | 1812 | (update-in [:use-macros] merge
|
1808 | 1813 | (check-use-macros use-macros missing-uses env))
|
1809 |
| - (update-in [:uses] remove-missing-uses) |
| 1814 | + (update-in [:uses] remove-missing-uses))] |
| 1815 | + (swap! env/*compiler* |
| 1816 | + #(-> % |
| 1817 | + (update-in [::namespaces name :use-macros] merge (:use-macros ast')) |
| 1818 | + (update-in [::namespaces name :uses] remove-missing-uses))) |
| 1819 | + ast')) |
| 1820 | + |
| 1821 | +(defn check-rename-macros-inferring-missing |
| 1822 | + [{:keys [name renames] :as ast} env] |
| 1823 | + (let [missing-renames (when (and *analyze-deps* (seq renames)) |
| 1824 | + (missing-renames (:renames ast) env)) |
| 1825 | + missing-rename-macros (inferred-rename-macros missing-renames env) |
| 1826 | + remove-missing-renames #(apply dissoc % (keys missing-renames)) |
| 1827 | + ast' (-> ast |
1810 | 1828 | (update-in [:rename-macros] merge missing-rename-macros)
|
1811 | 1829 | (update-in [:renames] remove-missing-renames))]
|
1812 |
| - ;; we also need to side-effect the compilation environment |
1813 |
| - ;; the returned AST isn't actually used directly |
1814 | 1830 | (swap! env/*compiler*
|
1815 | 1831 | #(-> %
|
1816 |
| - (update-in [::namespaces name :use-macros] merge (:use-macros ast')) |
1817 |
| - (update-in [::namespaces name :uses] remove-missing-uses) |
1818 | 1832 | (update-in [::namespaces name :rename-macros] merge (:rename-macros ast'))
|
1819 | 1833 | (update-in [::namespaces name :renames] remove-missing-renames)))
|
1820 | 1834 | ast'))
|
|
2773 | 2787 | (let [{:keys [name deps uses require-macros use-macros reload reloads]} ast]
|
2774 | 2788 | (when (and *analyze-deps* (seq deps))
|
2775 | 2789 | (analyze-deps name deps env (dissoc opts :macros-ns)))
|
2776 |
| - (let [missing (when (and *analyze-deps* (seq uses)) |
2777 |
| - (missing-uses uses env))] |
2778 |
| - (if *load-macros* |
2779 |
| - (do |
2780 |
| - (load-core) |
2781 |
| - (doseq [nsym (vals use-macros)] |
2782 |
| - (let [k (or (:use-macros reload) |
2783 |
| - (get-in reloads [:use-macros nsym]) |
2784 |
| - (and (= nsym name) *reload-macros* :reload))] |
2785 |
| - (if k |
2786 |
| - (locking load-mutex |
2787 |
| - (clojure.core/require nsym k)) |
2788 |
| - (locking load-mutex |
2789 |
| - (clojure.core/require nsym))) |
2790 |
| - (intern-macros nsym k))) |
2791 |
| - (doseq [nsym (vals require-macros)] |
2792 |
| - (let [k (or (:require-macros reload) |
2793 |
| - (get-in reloads [:require-macros nsym]) |
2794 |
| - (and (= nsym name) *reload-macros* :reload))] |
2795 |
| - (if k |
2796 |
| - (locking load-mutex |
2797 |
| - (clojure.core/require nsym k)) |
2798 |
| - (locking load-mutex |
2799 |
| - (clojure.core/require nsym))) |
2800 |
| - (intern-macros nsym k))) |
2801 |
| - (check-use-macros-inferring-missing ast name use-macros missing env)) |
2802 |
| - (do |
2803 |
| - (check-uses missing env) |
2804 |
| - ast)))) |
| 2790 | + (if *load-macros* |
| 2791 | + (do |
| 2792 | + (load-core) |
| 2793 | + (doseq [nsym (vals use-macros)] |
| 2794 | + (let [k (or (:use-macros reload) |
| 2795 | + (get-in reloads [:use-macros nsym]) |
| 2796 | + (and (= nsym name) *reload-macros* :reload))] |
| 2797 | + (if k |
| 2798 | + (locking load-mutex |
| 2799 | + (clojure.core/require nsym k)) |
| 2800 | + (locking load-mutex |
| 2801 | + (clojure.core/require nsym))) |
| 2802 | + (intern-macros nsym k))) |
| 2803 | + (doseq [nsym (vals require-macros)] |
| 2804 | + (let [k (or (:require-macros reload) |
| 2805 | + (get-in reloads [:require-macros nsym]) |
| 2806 | + (and (= nsym name) *reload-macros* :reload))] |
| 2807 | + (if k |
| 2808 | + (locking load-mutex |
| 2809 | + (clojure.core/require nsym k)) |
| 2810 | + (locking load-mutex |
| 2811 | + (clojure.core/require nsym))) |
| 2812 | + (intern-macros nsym k))) |
| 2813 | + (-> ast |
| 2814 | + (check-use-macros-inferring-missing env) |
| 2815 | + (check-rename-macros-inferring-missing env))) |
| 2816 | + (do |
| 2817 | + (check-uses |
| 2818 | + (when (and *analyze-deps* (seq uses)) |
| 2819 | + (missing-uses uses env)) |
| 2820 | + env) |
| 2821 | + ast))) |
2805 | 2822 | ast)))
|
2806 | 2823 |
|
2807 | 2824 | (def ^:dynamic *passes* nil)
|
|
0 commit comments