|
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