<< Back to previous view

[TTRACE-4] trace-ns traces all vars in the ns, not just fns Created: 12/Sep/13  Updated: 15/Mar/14  Resolved: 14/Mar/14

Status: Resolved
Project: tools.trace
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Enhancement Priority: Minor
Reporter: Chris Jeris Assignee: Luc Préfontaine
Resolution: Completed Votes: 0
Labels: None
Environment:

Clojure 1.5.1, tools.trace 0.7.6


Attachments: Text File tools.trace-4.patch    
Patch: Code and Test

 Description   

trace-ns traces every var in the given namespace, fns and non-fns alike. This is counterintuitive from the docstring (which says "trace all fns in the given name space") – when I have a data object like a map in a var, it may happen to implement IFn, but if I trace it I can't assoc onto it any more.

trace.demo> (def x {:foo 1 :bar 2})
#'trace.demo/x
trace.demo> (trace/trace-ns 'trace.demo)
nil
trace.demo> x
#<trace$trace_var_STAR_$fn__1682$tracing_wrapper__1683 clojure.tools.trace$trace_var_STAR_$fn__1682$tracing_wrapper__1683@2b0ce330>
trace.demo> (assoc x :baz 3)
ClassCastException clojure.tools.trace$trace_var_STAR_$fn__1682$tracing_wrapper__1683 cannot be cast to clojure.lang.Associative  clojure.lang.RT.assoc (RT.java:691)

I assume it's useful to retain the ability to trace IFn's that aren't fns at the level of trace-var. The attached patch instead changes trace-ns to check that traced values are fn? (not just ifn?) before wrapping them. Andy Fingerhut suggests that, if the ability to trace IFn's that aren't fns is not actually all that useful, it's simpler just to change ifn? to fn? in trace-var*.



 Comments   
Comment by Luc Préfontaine [ 14/Mar/14 5:19 PM ]

Agree. Fixed.

Comment by Luc Préfontaine [ 14/Mar/14 5:51 PM ]

Fix accepted. Only fns are traced.

Comment by Luc Préfontaine [ 15/Mar/14 3:52 PM ]

Official release 0.7.8, bad readme in 0.7.7

Generated at Sun Apr 20 11:14:06 CDT 2014 using JIRA 4.4#649-r158309.