File tree 5 files changed +50
-4
lines changed
5 files changed +50
-4
lines changed Original file line number Diff line number Diff line change 60
60
^String [dep]
61
61
(str/lower-case
62
62
(if (sequential? dep)
63
- (let [name (-> dep first name )
63
+ (let [name (-> dep first pr-str )
64
64
; ; penalize prefix forms so [foo.bar :as bar]
65
65
; ; comes before [foo.bar [qux :as qux] [quux ..]]
66
66
suffix (if (and (> (count dep) 1 ) (sequential? (second dep)))
Original file line number Diff line number Diff line change 1
1
(ns refactor-nrepl.ns.tracker
2
- (:require [clojure.tools.namespace
2
+ (:require [clojure.java.io :as io]
3
+ [clojure.tools.namespace
3
4
[dependency :as dep]
4
5
[file :as file]
5
6
[track :as tracker]]
6
- [refactor-nrepl.core :as core]))
7
+ [refactor-nrepl.core :as core]
8
+ [refactor-nrepl.ns.ns-parser :as ns-parser]))
9
+
10
+ ; ; Exclude cljs files that use npm string requires until they fix this bug:
11
+ ; ; https://clojure.atlassian.net/projects/TNS/issues/TNS-51
12
+ (defn- safe-for-clojure-tools-namespace? [f]
13
+ (->> (io/file f)
14
+ (.getAbsolutePath )
15
+ ns-parser/parse-ns
16
+ :cljs
17
+ :require
18
+ (map :ns )
19
+ (not-any? string?)))
7
20
8
21
(defn build-tracker
9
22
" Build a tracker for the project.
10
23
11
24
If file-predicate is provided, use that instead of `core/source-file?`"
12
25
([]
13
- (build-tracker core/source-file?))
26
+ (build-tracker #(and (core/source-file? %)
27
+ (safe-for-clojure-tools-namespace? %))))
14
28
([file-predicate]
15
29
(file/add-files (tracker/tracker ) (core/find-in-project file-predicate))))
16
30
Original file line number Diff line number Diff line change 53
53
(def ns1-relative-path {:path " I do not exist.clj"
54
54
:relative-path " test/resources/ns1.clj" })
55
55
56
+ (def ns-with-npm-strs (clean-msg " test/resources/ns_with_npm_strs.cljs" ))
57
+ (def ns-with-npm-strs-clean (clean-msg " test/resources/ns_with_npm_strs_clean.cljs" ))
58
+
56
59
(deftest combines-requires
57
60
(let [requires (core/get-ns-component (clean-ns ns2) :require )
58
61
combined-requires (core/get-ns-component ns2-cleaned :require )]
233
236
(deftest fallback-to-relative-path
234
237
(is (= (pprint-ns (clean-ns ns1))
235
238
(pprint-ns (clean-ns ns1-relative-path)))))
239
+
240
+ ; ; keep quotes around string requires
241
+ (deftest npm-string-preservation
242
+ (let [cleaned (pprint-ns (clean-ns ns-with-npm-strs))]
243
+ (is (re-find #"\[\" react-native\" :as rn\] " cleaned))))
244
+
245
+ ; ; group string requires together when sorting
246
+ (deftest npm-string-sorting
247
+ (is (= (pprint-ns (clean-ns ns-with-npm-strs))
248
+ (pprint-ns (read-string (slurp (:path ns-with-npm-strs-clean)))))))
Original file line number Diff line number Diff line change
1
+ (ns resources.ns-with-npm-strs
2
+ (:require [" react-native" :as rn]
3
+ [clojure.string :as str]
4
+ [" @react-native-community/async-storage" :as async-storage]
5
+ [" @fortawesome/react-native-fontawesome" :as fa]
6
+ [" @fortawesome/free-solid-svg-icons" :as fa-icons]))
7
+
8
+ (defmacro black-hole [& body])
9
+
10
+ (black-hole
11
+ rn/View
12
+ str/join
13
+ fa/FontAwesomeIcon
14
+ fa-icons/faCoffee)
Original file line number Diff line number Diff line change
1
+ (ns resources.ns-with-npm-strs
2
+ (:require [" @fortawesome/free-solid-svg-icons" :as fa-icons]
3
+ [" @fortawesome/react-native-fontawesome" :as fa]
4
+ [" react-native" :as rn]
5
+ [clojure.string :as str]))
You can’t perform that action at this time.
0 commit comments