Skip to content

Allow jumping to source file,line and column for compilation errors #715

@tbatchelli

Description

@tbatchelli

When a compilation error happens, the error message from the compiler contains the file, line and column of the error. This appears on the stacktrace buffer, but I couldn't find any way to jump from the stacktrace to the actual error, as the offending source does not appear in any of the frames.

The feature request would be to identify compilation errors and get the information about the file and position within the file from the error message. Then turn that information into a link to the right buffer and position within the buffer.

Here is an example:


  Show: Clojure Java REPL Tooling Duplicates All  (47 frames hidden)

2. Unhandled clojure.lang.Compiler$CompilerException
   Error compiling:
   /Users/tbatchelli/dev/palletops/admin-user-crate/src/pallet/crate/admin_user/admin_user.clj:249:41

                 Compiler.java: 7137  clojure.lang.Compiler/load
                          REPL:    1  user/eval18774
                 Compiler.java: 6703  clojure.lang.Compiler/eval
                 Compiler.java: 6666  clojure.lang.Compiler/eval
                      core.clj: 2927  clojure.core/eval
                      main.clj:  239  clojure.main/repl/read-eval-print/fn
                      main.clj:  239  clojure.main/repl/read-eval-print
                      main.clj:  257  clojure.main/repl/fn
                      main.clj:  257  clojure.main/repl
                   RestFn.java: 1096  clojure.lang.RestFn/invoke
        interruptible_eval.clj:   56  clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn
                      AFn.java:  152  clojure.lang.AFn/applyToHelper
                      AFn.java:  144  clojure.lang.AFn/applyTo
                      core.clj:  624  clojure.core/apply
                      core.clj: 1862  clojure.core/with-bindings*
                   RestFn.java:  425  clojure.lang.RestFn/invoke
        interruptible_eval.clj:   41  clojure.tools.nrepl.middleware.interruptible-eval/evaluate
        interruptible_eval.clj:  171  clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
                      core.clj: 2402  clojure.core/comp/fn
        interruptible_eval.clj:  138  clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn
                      AFn.java:   22  clojure.lang.AFn/run
       ThreadPoolExecutor.java: 1145  java.util.concurrent.ThreadPoolExecutor/runWorker
       ThreadPoolExecutor.java:  615  java.util.concurrent.ThreadPoolExecutor$Worker/run
                   Thread.java:  745  java.lang.Thread/run

1. Caused by java.lang.RuntimeException
   Invalid token: sudoers/

                     Util.java:  221  clojure.lang.Util/runtimeException
               LispReader.java:  316  clojure.lang.LispReader/interpretToken
               LispReader.java:  209  clojure.lang.LispReader/read
               LispReader.java: 1147  clojure.lang.LispReader/readDelimitedList
               LispReader.java:  972  clojure.lang.LispReader$ListReader/invoke
               LispReader.java: 1138  clojure.lang.LispReader/readDelimitedList
               LispReader.java: 1081  clojure.lang.LispReader$MapReader/invoke
               LispReader.java: 1138  clojure.lang.LispReader/readDelimitedList
               LispReader.java: 1081  clojure.lang.LispReader$MapReader/invoke
               LispReader.java: 1138  clojure.lang.LispReader/readDelimitedList
               LispReader.java:  972  clojure.lang.LispReader$ListReader/invoke
               LispReader.java: 1138  clojure.lang.LispReader/readDelimitedList
               LispReader.java:  972  clojure.lang.LispReader$ListReader/invoke
               LispReader.java:  183  clojure.lang.LispReader/read
                 Compiler.java: 7126  clojure.lang.Compiler/load
                          REPL:    1  user/eval18774
                 Compiler.java: 6703  clojure.lang.Compiler/eval
                 Compiler.java: 6666  clojure.lang.Compiler/eval
                      core.clj: 2927  clojure.core/eval
                      main.clj:  239  clojure.main/repl/read-eval-print/fn
                      main.clj:  239  clojure.main/repl/read-eval-print
                      main.clj:  257  clojure.main/repl/fn
                      main.clj:  257  clojure.main/repl
                   RestFn.java: 1096  clojure.lang.RestFn/invoke
        interruptible_eval.clj:   56  clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn
                      AFn.java:  152  clojure.lang.AFn/applyToHelper
                      AFn.java:  144  clojure.lang.AFn/applyTo
                      core.clj:  624  clojure.core/apply
                      core.clj: 1862  clojure.core/with-bindings*
                   RestFn.java:  425  clojure.lang.RestFn/invoke
        interruptible_eval.clj:   41  clojure.tools.nrepl.middleware.interruptible-eval/evaluate
        interruptible_eval.clj:  171  clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
                      core.clj: 2402  clojure.core/comp/fn
        interruptible_eval.clj:  138  clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn
                      AFn.java:   22  clojure.lang.AFn/run
       ThreadPoolExecutor.java: 1145  java.util.concurrent.ThreadPoolExecutor/runWorker
       ThreadPoolExecutor.java:  615  java.util.concurrent.ThreadPoolExecutor$Worker/run
                   Thread.java:  745  java.lang.Thread/run

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions