Skip to content
This repository has been archived by the owner on Oct 2, 2020. It is now read-only.

Commit

Permalink
Collapse :use clauses.
Browse files Browse the repository at this point in the history
  • Loading branch information
technomancy committed Apr 25, 2011
1 parent 863c6d3 commit 64d22b7
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 15 deletions.
21 changes: 13 additions & 8 deletions src/slam/hound/stitch.clj
Expand Up @@ -16,20 +16,25 @@
(defn- package-grouper [class-name]
(-> class-name resolve .getPackage .getName))

(defn group-by-package [imports]
(for [[package classes] (group-by package-grouper imports)]
(cons (symbol package)
(sort (for [c classes]
(-> c resolve .getSimpleName symbol))))))

(defmethod collapse-clause :import [ns-map clause]
(assoc ns-map :import
(for [[package classes] (group-by package-grouper (:import ns-map))]
(cons (symbol package)
(for [c classes]
(-> c resolve .getSimpleName symbol))))))
(update-in ns-map [:import] group-by-package))

(defmethod collapse-clause :require [ns-map clause]
ns-map)

(defn group-by-namespace [uses]
(for [[namespace subclause] (group-by first uses)]
[namespace :only (vec (sort (for [[_ _ [var]] subclause]
var)))]))

(defmethod collapse-clause :use [ns-map clause]
ns-map
#_(let [subclauses (:use ns-map)]
(assoc ns-map :use [])))
(update-in ns-map [:use] group-by-namespace))

(defn collapse-clauses [ns-map]
(reduce collapse-clause ns-map ns-clauses))
Expand Down
13 changes: 6 additions & 7 deletions test/slamhound/test_reconstruct.clj
Expand Up @@ -76,11 +76,11 @@
(deftest test-collapse-import
(is (= {:import '[(java.io ByteArrayInputStream File)
(java.util UUID)]}
(stitch/collapse-clause {:import '(java.io.ByteArrayInputStream
java.io.File java.util.UUID)}
:import))))
(stitch/collapse-clause {:import '(java.io.ByteArrayInputStream
java.io.File java.util.UUID)}
:import))))

#_(deftest test-collapse-use
(deftest test-collapse-use
(is (= {:use '[[clojure.test :only [deftest is]]
[slam.hound.stitch :only [ns-from-map]]]}
(stitch/collapse-clause {:use '[[clojure.test :only [deftest]]
Expand All @@ -94,9 +94,8 @@
\"Testing some things going on here.\"
(:refer-clojure :exclude [compile test])
(:use
[clojure.test :only [deftest]]
[clojure.test :only [is]]
[clojure.test :only [deftest is]]
[slam.hound.stitch :only [ns-from-map]])
(:require [clojure.java.io :as io] [clojure.set :as set])
(:import (java.io File ByteArrayInputStream) (java.util UUID)))
(:import (java.io ByteArrayInputStream File) (java.util UUID)))
" (stitch/stitch-up sample-ns-map))))

0 comments on commit 64d22b7

Please sign in to comment.