<< Back to previous view

[CLJ-2359] clojure.repl/source chokes when reading code with ::auto/resolved keys Created: 12/Jun/18  Updated: 12/Jun/18

Status: Open
Project: Clojure
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: Ghadi Shayban Assignee: Unassigned
Resolution: Unresolved Votes: 1
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


Generated at Thu Apr 25 07:00:36 CDT 2019 using JIRA 4.4#649-r158309.