We're updating the issue view to help you get more done. 

Double require guard bypassed if :refer-macros

Description

If you have this code,

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

it will trigger the "Only one :require form is allowed per namespace definition" diagnostic.

But this diagnostic is bypassed if you use inline macro spec sugar:

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

This causes the compiler to derail with this:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 clojure.lang.ExceptionInfo: Only :as, :refer and :rename options supported in :require / :require-macros; offending spec: [cljs.test :refer-macros [deftest]] at line 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__6710$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) at cljs.repl$evaluate_form$__GT_ast__6169.invoke(repl.cljc:471) at cljs.repl$evaluate_form.invokeStatic(repl.cljc:472) at cljs.repl$eval_cljs.invokeStatic(repl.cljc:631) at cljs.repl$eval_cljs.invoke(repl.cljc:618) at cljs.repl$repl_STAR_$read_eval_print__6300.invoke(repl.cljc:880) at cljs.repl$repl_STAR_$fn__6306$fn__6315.invoke(repl.cljc:922) at cljs.repl$repl_STAR_$fn__6306.invoke(repl.cljc:921) at cljs.compiler$with_core_cljs.invokeStatic(compiler.cljc:1252) at cljs.repl$repl_STAR_.invokeStatic(repl.cljc:882) at cljs.repl$repl.invokeStatic(repl.cljc:1001) at cljs.repl$repl.doInvoke(repl.cljc:933) at clojure.lang.RestFn.invoke(RestFn.java:410) at cljs.repl.node$_main.invokeStatic(node.clj:234) at cljs.repl.node$_main.invoke(node.clj:233) at clojure.lang.Var.invoke(Var.java:375) at clojure.lang.AFn.applyToHelper(AFn.java:152) at clojure.lang.Var.applyTo(Var.java:700) at clojure.core$apply.invokeStatic(core.clj:646) at clojure.main$main_opt.invokeStatic(main.clj:314) at clojure.main$main_opt.invoke(main.clj:310) at clojure.main$main.invokeStatic(main.clj:421) at clojure.main$main.doInvoke(main.clj:384) at clojure.lang.RestFn.invoke(RestFn.java:421) at clojure.lang.Var.invoke(Var.java:383) at clojure.lang.AFn.applyToHelper(AFn.java:156) at clojure.lang.Var.applyTo(Var.java:700) at clojure.main.main(main.java:37)

Environment

None

Status

Assignee

Unassigned

Reporter

Mike Fikes

Labels

Approval

Vetted

Patch

None

Affects versions

0.0-3196
1.9.908

Priority

Major