2024 年 Clojure 状态调查! 中分享您的想法。

欢迎!请参阅 关于 页面以了解更多关于此功能的信息。

0
ClojureScript
如果您有下面的代码,


(ns foo.core
  (:require [cljs.test])
  (:require [clojure.string]))


它将触发“每个命名空间定义只允许一个 :require 表达式”的诊断。

但是,如果您使用行内宏规范语法,则此诊断将被绕过


(ns foo.core
  (:require [cljs.test :refer-macros [deftest]])
  (:require [clojure.string]))


这导致编译器出现以下错误


clojure.lang.ExceptionInfo: 仅支持 :as, :refer 和 :rename 选项在 :require / :require-macros 中;受影响的规范:[cljs.test :refer-macros [deftest]] 的第 1 行 <cljs repl> {:file "<cljs repl>", :line 1, :column 1, :root-source-info {:source-type :fragment, :source-form (ns foo.core (:require [cljs.test :refer-macros [deftest]]) (:require [clojure.string]))}, :tag :cljs/analysis-error}
    at clojure.core$ex_info.invokeStatic(core.clj:4617)
    at cljs.analyzer$error.invokeStatic(analyzer.cljc:693)
    at cljs.analyzer$error.invoke(analyzer.cljc:693)
    at cljs.analyzer$error.invokeStatic(analyzer.cljc:695)
    at cljs.analyzer$basic_validate_ns_spec.invokeStatic(analyzer.cljc:2256)
    at cljs.analyzer$parse_require_spec.invokeStatic(analyzer.cljc:2344)
    at cljs.analyzer$parse_require_spec.invoke(analyzer.cljc:2343)
    at clojure.lang.AFn.applyToHelper(AFn.java:171)
    at clojure.lang.AFn.applyTo(AFn.java:144)
    at clojure.core$apply.invokeStatic(core.clj:652)
    at clojure.core$partial$fn__4765.doInvoke(core.clj:2534)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.core$map$fn__4785.invoke(core.clj:2644)
    at clojure.lang.LazySeq.sval(LazySeq.java:40)
    at clojure.lang.LazySeq.seq(LazySeq.java:49)
    at clojure.lang.Cons.next(Cons.java:39)
    at clojure.lang.RT.boundedLength(RT.java:1749)
    at clojure.lang.RestFn.applyTo(RestFn.java:130)
    at clojure.core$apply.invokeStatic(core.clj:650)
    at cljs.analyzer$fn__2052$fn__2062.invoke(analyzer.cljc:2622)
    at clojure.core.protocols$fn__6755.invokeStatic(protocols.clj:167)
    at clojure.core.protocols$fn__6755.invoke(protocols.clj:124)
    at clojure.core.protocols$fn__6755$G__6705__6719.invoke(protocols.clj:19)
    at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31)
    at clojure.core.protocols$fn__6738.invokeStatic(protocols.clj:75)
    at clojure.core.protocols$fn__6738.invoke(protocols.clj:75)
    at clojure.core.protocols$fn__6684$G__6679__6697.invoke(protocols.clj:13)
    at clojure.core$reduce.invokeStatic(core.clj:6545)
    at cljs.analyzer$fn__2052.invokeStatic(analyzer.cljc:2575)
    at cljs.analyzer$fn__2052.invoke(analyzer.cljc:2556)
    at clojure.lang.MultiFn.invoke(MultiFn.java:251)
    at cljs.analyzer$analyze_seq_STAR_.invokeStatic(analyzer.cljc:3333)
    at cljs.analyzer$analyze_seq_STAR__wrap.invokeStatic(analyzer.cljc:3336)
    at cljs.analyzer$analyze_seq.invokeStatic(analyzer.cljc:3361)
    at cljs.analyzer$analyze_form.invokeStatic(analyzer.cljc:3530)
    at cljs.analyzer$analyze_STAR_.invokeStatic(analyzer.cljc:3577)
    at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3603)
    在 cljs.repl$evaluate_form$__GT_ast__6169.invoke(repl.cljc:471)
    在 cljs.repl$evaluate_form.invokeStatic(repl.cljc:472)
    在 cljs.repl$eval_cljs.invokeStatic(repl.cljc:631)
    在 cljs.repl$eval_cljs.invoke(repl.cljc:618)
    在 cljs.repl$repl_STAR_$read_eval_print__6300.invoke(repl.cljc:880)
    在 cljs.repl$repl_STAR_$fn__6306$fn__6315.invoke(repl.cljc:922)
    在 cljs.repl$repl_STAR_$fn__6306.invoke(repl.cljc:921)
    在 cljs.compiler$with_core_cljs.invokeStatic(compiler.cljc:1252)
    在 cljs.repl$repl_STAR_.invokeStatic(repl.cljc:882)
    在 cljs.repl$repl.invokeStatic(repl.cljc:1001)
    在 cljs.repl$repl.doInvoke(repl.cljc:933)
    在 clojure.lang.RestFn.invoke(RestFn.java:410)
    在 cljs.repl.node$_main.invokeStatic(node.clj:234)
    在 cljs.repl.node$_main.invoke(node.clj:233)
    在 clojure.lang.Var.invoke(Var.java:375)
    在 clojure.lang.AFn.applyToHelper(AFn.java:152)
    在 clojure.lang.Var.applyTo(Var.java:700)
    在 clojure.core$apply.invokeStatic(core.clj:646)
    在 clojure.main$main_opt.invokeStatic(main.clj:314)
    在 clojure.main$main_opt.invoke(main.clj:310)
    在 clojure.main$main.invokeStatic(main.clj:421)
    在 clojure.main$main.doInvoke(main.clj:384)
    在 clojure.lang.RestFn.invoke(RestFn.java:421)
    在 clojure.lang.Var.invoke(Var.java:383)
    在 clojure.lang.AFn.applyToHelper(AFn.java:156)
    在 clojure.lang.Var.applyTo(Var.java:700)
    在 clojure.main.main(main.java:37)

1 答案

0
by
参考:https://clojure.atlassian.net/browse/CLJS-2343 (由mfikes报告)
...