Uploaded image for project: 'Clojure'
  1. CLJ-1169

Report line,column, and source in defmacro errors

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major
    • Resolution: Completed
    • Affects versions: Release 1.5, Release 1.4
    • Fix versions: Release 1.7
    • Labels:
    • Environment:

      Windows

    • Approval:
      Ok
    • Patch:
      Code

      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)
      

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              metaclass Yury Matylitski
            • Votes:
              2 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: