Clojure

Report line,column, and source in defmacro errors

Details

  • Type: Enhancement Enhancement
  • Status: Open Open
  • Priority: Major Major
  • Resolution: Unresolved
  • Affects Version/s: Release 1.4, Release 1.5
  • Fix Version/s: Release 1.7
  • Component/s: None
  • Labels:
  • Environment:
    Windows
  • Patch:
    Code
  • Approval:
    Screened

Description

Summary This patch grew out of a desire to have defn report filename and line numbers for parameter declaration errors, but the approach chosen does something more broad, and likely very useful: Anytime defmacro is throwing a non-CompilerException, wrap it in a CompilerException that captures LINE, COLUMN, and SOURCE. Presumably this would improve reporting for many other macros as well. The patch also tweaks errors messages to add quotes, e.g. "problem" instead of problem, which seems useful.

Screened By Stu
Patch CLJ-1169-code-and-test-1.patch, which aggregates the work in other patches to a single patch that works on current master.

When mistyping parameter list in defn declaration, e.g.

(defn test
 (some-error))

error message shows name of parameter (without quotes), but not function name, filename or line number:

Exception in thread "main" java.lang.IllegalArgumentException: Parameter declaration some-error should be a vector
        at clojure.core$assert_valid_fdecl.invoke(core.clj:6567)
        at clojure.core$sigs.invoke(core.clj:220)
        at clojure.core$defn.doInvoke(core.clj:294)
        at clojure.lang.RestFn.invoke(RestFn.java:467)
        at clojure.lang.Var.invoke(Var.java:427)
        at clojure.lang.AFn.applyToHelper(AFn.java:172)
        at clojure.lang.Var.applyTo(Var.java:532)
        at clojure.lang.Compiler.macroexpand1(Compiler.java:6366)
        at clojure.lang.Compiler.macroexpand(Compiler.java:6427)
        at clojure.lang.Compiler.eval(Compiler.java:6495)
        at clojure.lang.Compiler.load(Compiler.java:6952)
        at clojure.lang.Compiler.loadFile(Compiler.java:6912)
        at clojure.main$load_script.invoke(main.clj:283)
        at clojure.main$init_opt.invoke(main.clj:288)
        at clojure.main$initialize.invoke(main.clj:316)
        at clojure.main$null_opt.invoke(main.clj:349)
        at clojure.main$main.doInvoke(main.clj:427)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at clojure.lang.Var.invoke(Var.java:419)
        at clojure.lang.AFn.applyToHelper(AFn.java:163)
        at clojure.lang.Var.applyTo(Var.java:532)
        at clojure.main.main(main.java:37)
  1. 0001-CLJ-1169-proposed-patch.patch
    22/Feb/13 5:39 AM
    2 kB
    Andrei Kleschinski
  2. 0002-CLJ-1169-fix-unit-tests.patch
    01/Mar/13 10:25 AM
    3 kB
    Andrei Kleschinski
  3. CLJ-1169-code-and-test-1.patch
    28/Jun/14 1:13 PM
    6 kB
    Stuart Halloway
  4. defn_error_message.clj
    22/Feb/13 3:25 AM
    0.0 kB
    Andrei Kleschinski

Activity

Hide
Andrei Kleschinski added a comment -

Proposed patch for issue
Process exceptions in macroexpand1 and wraps them in CompilerException with source,line,column information.

Also patch adds quotes around invalid symbol name in error message to make them more distinguishable from rest of message.

Show
Andrei Kleschinski added a comment - Proposed patch for issue Process exceptions in macroexpand1 and wraps them in CompilerException with source,line,column information. Also patch adds quotes around invalid symbol name in error message to make them more distinguishable from rest of message.
Hide
Andy Fingerhut added a comment -

Patch 0001-CLJ-1169-proposed-patch.patch dated Feb 22 2013 causes several tests to fail. Run "./antsetup.sh" then "ant" to see which ones (or "mvn package").

Show
Andy Fingerhut added a comment - Patch 0001-CLJ-1169-proposed-patch.patch dated Feb 22 2013 causes several tests to fail. Run "./antsetup.sh" then "ant" to see which ones (or "mvn package").
Hide
Andrei Kleschinski added a comment -

Fix for failed unit-tests

Show
Andrei Kleschinski added a comment - Fix for failed unit-tests
Hide
Stuart Halloway added a comment -

Andrei, can you please sign the CA (e-form at http://clojure.org/contributing) so that we can consider this patch?

Thanks!

Show
Stuart Halloway added a comment - Andrei, can you please sign the CA (e-form at http://clojure.org/contributing) so that we can consider this patch? Thanks!
Hide
Andrei Kleschinski added a comment -

Ok, I have signed the CA.

Show
Andrei Kleschinski added a comment - Ok, I have signed the CA.
Hide
Alex Miller added a comment -

I can confirm that Andrei has signed the CA. Back in Vetted.

Show
Alex Miller added a comment - I can confirm that Andrei has signed the CA. Back in Vetted.

People

Vote (2)
Watch (1)

Dates

  • Created:
    Updated: