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

clojure.repl/source chokes when reading code with ::auto/resolved keys

    Details

    • Type: Bug
    • Status: Open
    • Priority: Minor
    • Resolution: Unresolved
    • Affects versions: None
    • Fix versions: None
    • Labels:
      None

      Description

      Reproduction

      foo.clj
      (ns foo
        (:require [clojure.java.io :as io]))
      
      (defn f [] ::io/key)
      
      repl
      Clojure 1.10.0-alpha4
      user=> (require 'foo)
      nil
      user=> (source foo/f)
      RuntimeException Invalid token: ::io/key  clojure.lang.Util.runtimeException (Util.java:221)
      

      Problem analysis
      source calls read, without any underlying binding or notion of Compiler.currentNS(), which causes aliased keywords to fail to resolve.

      Possible solution
      Bind *reader-resolver* to the following before reading:

      (reify LispReader$Resolver
        (currentNS [_] 'ignored)
        (resolveClass [_ sym] 'ignored)
        (resolveAlias [_ sym] 'ignored)
        (resolveVar [_ sym] 'ignored))
      

      Aside, the logic inside source-fn can be simplified with read+string, modulo CLJ-2358 Closed

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              gshayban Ghadi Shayban
            • Votes:
              1 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated: