Search code examples
clojurespacemacs

Error running a Hello World app using spacemacs and clojure


(ns myname.myapp
  (:gen-class))

(defn -main
  "I don't do a whole lot ... yet."
  [& args]
   (println "Hello, World!"))

Running "evaluate last sexpression" with the marker on (println "Hello, World!") caused the following error:

Show: Project-Only All 
Hide: Clojure Java REPL Tooling Duplicates  (15 frames hidden)

2 Unhandled clojure.lang.Compiler$CompilerException
   Error compiling src/myname/myapp.clj at (0:0)
   #:clojure.error{:phase :compile-syntax-check,
                   :line 0,
                   :column 0,
                   :source "/Users/*/dev/myapp/src/myname/myapp.clj"}
             Compiler.java: 6808  clojure.lang.Compiler/analyze
             Compiler.java: 6745  clojure.lang.Compiler/analyze
             Compiler.java: 7181  clojure.lang.Compiler/eval
             Compiler.java: 7132  clojure.lang.Compiler/eval
                  core.clj: 3216  clojure.core/eval
                  core.clj: 3212  clojure.core/eval
    interruptible_eval.clj:   91  nrepl.middleware.interruptible-eval/evaluate/fn
                  main.clj:  437  clojure.main/repl/read-eval-print/fn
                  main.clj:  437  clojure.main/repl/read-eval-print
                  main.clj:  458  clojure.main/repl/fn
                  main.clj:  458  clojure.main/repl
                  main.clj:  368  clojure.main/repl
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  665  clojure.core/apply
                  core.clj:  660  clojure.core/apply
                regrow.clj:   20  refactor-nrepl.ns.slam.hound.regrow/wrap-clojure-repl/fn
               RestFn.java: 1523  clojure.lang.RestFn/invoke
    interruptible_eval.clj:   84  nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:   56  nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:  155  nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
                  AFn.java:   22  clojure.lang.AFn/run
               session.clj:  190  nrepl.middleware.session/session-exec/main-loop/fn
               session.clj:  189  nrepl.middleware.session/session-exec/main-loop
                  AFn.java:   22  clojure.lang.AFn/run
               Thread.java:  832  java.lang.Thread/run
1 Caused by java.lang.RuntimeException
   Unable to resolve symbol: World! in this context

                 Util.java:  221  clojure.lang.Util/runtimeException
             Compiler.java: 7414  clojure.lang.Compiler/resolveIn
             Compiler.java: 7358  clojure.lang.Compiler/resolve
             Compiler.java: 7319  clojure.lang.Compiler/analyzeSymbol
             Compiler.java: 6768  clojure.lang.Compiler/analyze
             Compiler.java: 6745  clojure.lang.Compiler/analyze
             Compiler.java: 7181  clojure.lang.Compiler/eval
             Compiler.java: 7132  clojure.lang.Compiler/eval
                  core.clj: 3216  clojure.core/eval
                  core.clj: 3212  clojure.core/eval
    interruptible_eval.clj:   91  nrepl.middleware.interruptible-eval/evaluate/fn
                  main.clj:  437  clojure.main/repl/read-eval-print/fn
                  main.clj:  437  clojure.main/repl/read-eval-print
                  main.clj:  458  clojure.main/repl/fn
                  main.clj:  458  clojure.main/repl
                  main.clj:  368  clojure.main/repl
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  665  clojure.core/apply
                  core.clj:  660  clojure.core/apply
                regrow.clj:   20  refactor-nrepl.ns.slam.hound.regrow/wrap-clojure-repl/fn
               RestFn.java: 1523  clojure.lang.RestFn/invoke
    interruptible_eval.clj:   84  nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:   56  nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:  155  nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
                  AFn.java:   22  clojure.lang.AFn/run
               session.clj:  190  nrepl.middleware.session/session-exec/main-loop/fn
               session.clj:  189  nrepl.middleware.session/session-exec/main-loop
                  AFn.java:   22  clojure.lang.AFn/run
               Thread.java:  832  java.lang.Thread/run

How do I resolve this?


Solution

  • My guess is that you haven't placed your cursor right after the expression you wanted to evaluate. "Evaluate last sexp" should be invoked when your cursor is right after the form you want to eval.

    Here's a more visual explanation. For the command to work your cursor (represented as |) should be here:

    (defn -main
      "I don't do a whole lot ... yet."
      [& args]
       (println "Hello, World!")|)
    

    or here:

    (defn -main
      "I don't do a whole lot ... yet."
      [& args]
       (println "Hello, World!"))|
    

    You can also try "eval defun" ("defun" means top-level form in CIDER's lingo) or "eval buffer". Those command are easier to work with for people new to Clojure/Lisp.