Hello. I tried to write small utility for importing java code. Because
sometimes I want to just copy and paste very long java import code and
hope it work in clojure rather than converting it to clojure style.

Functions and macros work as I expected. But if I try to apply '-
>:import' in ns statement:

;;slime
(use 'easy-import)

(ns test
  (->:import "import org.apache.http.HttpVersion; import
org.apache.http.http.client.HttpClient"))

-----------------

java.lang.Exception: No such var: clojure/->:import (NO_SOURCE_FILE:1)
  [Thrown class clojure.lang.Compiler$CompilerException]


;;Test
(java-import-code->lst "import org.apache.http.HttpVersion; import
org.apache.http.http.client.HttpClient") => '((org.apache.http
HttpVersion) (org.apache.http.client HttpClient))

(macroexpand-1 '(->:import "import org.apache.http.HttpVersion; import
org.apache.http.http.client.HttpClient"))
=> (:import (org.apache.http HttpVersion) (org.apache.http.client
HttpClient))

(macroexpand-1 '(->import "import org.apache.http.HttpVersion; import
org.apache.http.http.client.HttpClient"))
=> (import '(org.apache.http HttpVersion) '(org.apache.http.client
HttpClient))


How can I fix this? I paste my code.

;;code
(ns easy-import
  (:use clojure.contrib.str-utils))

(defn java-import-code->lst
  {:doc "converts java import code to a list for clojure import
code.   For example (java-import-code->lst \"import
org.apache.http.HttpVersion; import
org.apache.http.http.client.HttpClient\") => '((org.apache.http
HttpVersion) (org.apache.http.client HttpClient))"}
  [#^String code]
  (let [parsed-code (map re-split (repeat #"\.")
                         (re-split #";" (re-gsub #"\n+|\s+|import" "" code)))
        packages (map str-join "." (map drop-last parsed-code))
        classes (map last parsed-code)]
    (for [p packages c classes]
      (list (symbol p) (symbol c)))))

(defmacro ->:import
  {:doc "(->:import \"import org.apache.http.HttpVersion; import
org.apache.http.http.client.HttpClient\") expands to (:import
(org.apache.http HttpVersion) (org.apache.http.client HttpClient))"}
  [#^String code]
  `(:import ~@(java-import-code->lst code)))

(defn map-quote
  {:doc "(map-quote '((a b) (c d))) => '((quote (a b)) (quote (c
d)))"}
  [lst]
  (for [item lst]
    (list 'quote item)))

(defmacro ->import
  {:doc "(->import \"import org.apache.http.HttpVersion; import
org.apache.http.http.client.HttpClient\") expands to (import
'(org.apache.http HttpVersion) '(org.apache.http.client HttpClient))"}
  [#^String code]
  `(import ~@(map-quote (java-import-code->lst code))))


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to