<div dir="ltr">Thanks!<div><br></div><div style>re: current-directory-for-user: I also don&#39;t see a better way. Probably the docs should say &quot;don&#39;t set this path&quot;, roughly (with some caveats that would include things like drracket) and if only we&#39;d written similar docs for current-directory back in the day ....</div>
<div style><br></div><div style>Robby</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, May 29, 2013 at 12:01 PM, Matthew Flatt <span dir="ltr">&lt;<a href="mailto:mflatt@cs.utah.edu" target="_blank">mflatt@cs.utah.edu</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">All correct.<br>
<br>
As it happens, though, I had to tweak the module-loading handler stack<br>
to add &quot;missing-module&quot; exception support (for the package system).<br>
Those changes make a source location possible in many cases<br>
(intentionally), but I hadn&#39;t taken the last step of including<br>
locations in the error-message text.<br>
<br>
I&#39;ve implemented the last step, now, and I think the example below will<br>
now show a source location.<br>
<br>
<br>
While I&#39;m here, a related problem is that source location paths have<br>
been shown relative to `current-directory&#39;, but `raco setup&#39; and other<br>
things change `current-directory&#39; in a way that sometimes obscures the<br>
path. For example, an error might be reported for &quot;main.rkt&quot;, in which<br>
case it may take a while to sort out which &quot;main.rkt&quot; is relevant.<br>
<br>
As an experiment, I&#39;ve added `current-directory-for-user&#39;, which is<br>
initialized the same as `current-directory&#39; and used to print<br>
source-location paths. Errors from `raco setup&#39; are then reported<br>
relative to the initial directory, while DrRacket can set<br>
`current-directory-for-user&#39; to keep paths relative to the directory of<br>
the main file. I&#39;m not sure that adding Even More Stuff is a good idea,<br>
though.<br>
<div class="HOEnZb"><div class="h5"><br>
At Tue, 28 May 2013 11:25:50 -0500, Robby Findler wrote:<br>
&gt; IIUC, the problem is that the source location information (for the require)<br>
&gt; is no longer present when the filesystem access happens that turns into the<br>
&gt; error.<br>
&gt;<br>
&gt; It is not those particular multiple parts of the system (raco, cm, tr) but<br>
&gt; I think it is a non-trivial change, all inside the core. Also, IIUC, the<br>
&gt; change leaks out and requires a change to publicly visible parts of the<br>
&gt; infrastructure (the module name resolver). I&#39;m not sure about that, but I<br>
&gt; think that&#39;s also an obstacle.<br>
&gt;<br>
&gt; Robby<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Tue, May 28, 2013 at 11:15 AM, Ray Racine &lt;<a href="mailto:ray.racine@gmail.com">ray.racine@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; &gt; I&#39;ve created a mini-collection out on Github.<br>
&gt; &gt; <a href="https://github.com/RayRacine/tlib.git" target="_blank">https://github.com/RayRacine/tlib.git</a><br>
&gt; &gt;<br>
&gt; &gt; Consider the single collection, c1, with 4 modules.<br>
&gt; &gt;<br>
&gt; &gt; m1.rkt -&gt; m1a.rkt -&gt; m1aa.rkt<br>
&gt; &gt; m2.rkt<br>
&gt; &gt;<br>
&gt; &gt; Where m1 depends on m1a, m1a on m1aa and m2 had no dependencies.<br>
&gt; &gt;<br>
&gt; &gt; --&gt; raco link /code/tlib/c1<br>
&gt; &gt; --&gt; raco link -l<br>
&gt; &gt; User links:<br>
&gt; &gt;  collection: &quot;c1&quot;  path: &quot;/code/tlib/c1&quot;<br>
&gt; &gt; Installation links:<br>
&gt; &gt;<br>
&gt; &gt; --&gt; raco setup c1<br>
&gt; &gt; &lt;stuff&gt;<br>
&gt; &gt;<br>
&gt; &gt; Completes without error.<br>
&gt; &gt;<br>
&gt; &gt; Now imagine one performs some amount of intra-collection module<br>
&gt; &gt; refactoring, module renamings, splitting and combing modules etc.<br>
&gt; &gt;<br>
&gt; &gt; We simulate this activity with a single modification to the require in<br>
&gt; &gt; m1.rkt to a now non-existent module.<br>
&gt; &gt;<br>
&gt; &gt; ;;Change<br>
&gt; &gt; (require<br>
&gt; &gt;  (only-in &quot;m1a.rkt&quot;<br>
&gt; &gt;        c1-m1a-v1))<br>
&gt; &gt;<br>
&gt; &gt; ;; to<br>
&gt; &gt;<br>
&gt; &gt; (require<br>
&gt; &gt;  (only-in &quot;m1x.rkt&quot;<br>
&gt; &gt;        c1-m1a-v1))<br>
&gt; &gt;<br>
&gt; &gt; Build the refactored collection.<br>
&gt; &gt;<br>
&gt; &gt; --&gt; raco setup c1<br>
&gt; &gt; raco setup: version: 5.3.4.10 [3m]<br>
&gt; &gt; raco setup: variants: 3m<br>
&gt; &gt; raco setup: main collects: /usr/local/racket/collects<br>
&gt; &gt; raco setup: collects paths:<br>
&gt; &gt; raco setup:   /home/ray/.racket/<a href="http://5.3.4.10/collects" target="_blank">5.3.4.10/collects</a><br>
&gt; &gt; raco setup:   /usr/local/racket/collects<br>
&gt; &gt; raco setup: --- pre-installing collections ---<br>
&gt; &gt; raco setup: --- installing foreign libraries ---<br>
&gt; &gt; raco setup: --- compiling collections ---<br>
&gt; &gt; raco setup: --- parallel build using 8 processes ---<br>
&gt; &gt; raco setup: 7 making: /code/tlib/c1<br>
&gt; &gt; default-load-handler: cannot open module file<br>
&gt; &gt;   module path: #&lt;path:/code/tlib/c1/m1x.rkt&gt;<br>
&gt; &gt;   path: /code/tlib/c1/m1x.rkt<br>
&gt; &gt;   system error: No such file or directory; errno=2<br>
&gt; &gt;   context...:<br>
&gt; &gt;    standard-module-name-resolver<br>
&gt; &gt;    /usr/local/racket/collects/racket/require-transform.rkt:266:2:<br>
&gt; &gt; expand-import<br>
&gt; &gt;    /usr/local/racket/collects/racket/private/reqprov.rkt:375:5<br>
&gt; &gt;    /usr/local/racket/collects/racket/require-transform.rkt:266:2:<br>
&gt; &gt; expand-import<br>
&gt; &gt;    try-next<br>
&gt; &gt;    /usr/local/racket/collects/racket/private/reqprov.rkt:242:2<br>
&gt; &gt;    success<br>
&gt; &gt;    /usr/local/racket/collects/typed-racket/typed-racket.rkt:53:4<br>
&gt; &gt;    /usr/local/racket/collects/compiler/cm.rkt:372:0: compile-zo*<br>
&gt; &gt;    /usr/local/racket/collects/compiler/cm.rkt:579:26<br>
&gt; &gt;    /usr/local/racket/collects/compiler/cm.rkt:572:42<br>
&gt; &gt;    /usr/local/racket/collects/compiler/cm.rkt:537:0: maybe-compile-zo<br>
&gt; &gt;    /usr/local/racket/collects/compiler/cm.rkt:650:2: do-check<br>
&gt; &gt;    /usr/local/racket/collects/compiler/cm.rkt:731:4<br>
&gt; &gt;    /usr/local/racket/collects/setup/parallel-do.rkt:420:20: loop<br>
&gt; &gt;<br>
&gt; &gt; raco setup: --- updating info-domain tables ---<br>
&gt; &gt; raco setup: --- creating launchers ---<br>
&gt; &gt; raco setup: --- installing man pages ---<br>
&gt; &gt; raco setup: --- building documentation ---<br>
&gt; &gt; raco setup: --- installing collections ---<br>
&gt; &gt; raco setup: --- post-installing collections ---<br>
&gt; &gt; raco setup:<br>
&gt; &gt; raco setup: error: during making for /code/tlib/c1<br>
&gt; &gt; raco setup:   default-load-handler: cannot open module file<br>
&gt; &gt; raco setup:     module path: #&lt;path:/code/tlib/c1/m1x.rkt&gt;<br>
&gt; &gt; raco setup:     path: /code/tlib/c1/m1x.rkt<br>
&gt; &gt; raco setup:     system error: No such file or directory; errno=2<br>
&gt; &gt; raco setup:     context...:<br>
&gt; &gt; raco setup:      standard-module-name-resolver<br>
&gt; &gt; raco setup:<br>
&gt; &gt; /usr/local/racket/collects/racket/require-transform.rkt:266:2: expand-import<br>
&gt; &gt; raco setup:<br>
&gt; &gt; /usr/local/racket/collects/racket/private/reqprov.rkt:375:5<br>
&gt; &gt; raco setup:<br>
&gt; &gt; /usr/local/racket/collects/racket/require-transform.rkt:266:2: expand-import<br>
&gt; &gt; raco setup:      try-next<br>
&gt; &gt; raco setup:<br>
&gt; &gt; /usr/local/racket/collects/racket/private/reqprov.rkt:242:2<br>
&gt; &gt; raco setup:      success<br>
&gt; &gt; raco setup:<br>
&gt; &gt; /usr/local/racket/collects/typed-racket/typed-racket.rkt:53:4<br>
&gt; &gt; raco setup:      /usr/local/racket/collects/compiler/cm.rkt:372:0:<br>
&gt; &gt; compile-zo*<br>
&gt; &gt; raco setup:      /usr/local/racket/collects/compiler/cm.rkt:579:26<br>
&gt; &gt; raco setup:      /usr/local/racket/collects/compiler/cm.rkt:572:42<br>
&gt; &gt; raco setup:      /usr/local/racket/collects/compiler/cm.rkt:537:0:<br>
&gt; &gt; maybe-compile-zo<br>
&gt; &gt; raco setup:      /usr/local/racket/collects/compiler/cm.rkt:650:2: do-check<br>
&gt; &gt; raco setup:      /usr/local/racket/collects/compiler/cm.rkt:731:4<br>
&gt; &gt; raco setup:      /usr/local/racket/collects/setup/parallel-do.rkt:420:20:<br>
&gt; &gt; loop<br>
&gt; &gt; raco setup:<br>
&gt; &gt;<br>
&gt; &gt; Assuming co-occurrence of output happens across an N processor raco build,<br>
&gt; &gt; we know that during the making of collection c1, module m1x was not found.<br>
&gt; &gt;<br>
&gt; &gt; making: /code/tlib/c1<br>
&gt; &gt; default-load-handler: cannot open module file<br>
&gt; &gt;   module path: #&lt;path:/code/tlib/c1/m1x.rkt&gt;<br>
&gt; &gt;   path: /code/tlib/c1/m1x.rkt<br>
&gt; &gt;<br>
&gt; &gt; The critical information of whom to blame is missing.  In this case, the<br>
&gt; &gt; culprit is m1.rkt, line xxx with a bogus require.<br>
&gt; &gt;<br>
&gt; &gt; With a collection of a hundred module files or so, combined with multiple<br>
&gt; &gt; issues from the refactoring, one is in for an afternoon of recursive<br>
&gt; &gt; grepping etc.<br>
&gt; &gt;<br>
&gt; &gt; Questions:<br>
&gt; &gt;<br>
&gt; &gt; 1) Is this currently a &quot;deep&quot; issue, in the sense of how module resolving<br>
&gt; &gt; and instantiation is performed, layered with Typed Racket&#39;s mode of<br>
&gt; &gt; implementation, layered with CM and Raco&#39;s build system that prevents a<br>
&gt; &gt; more informative error message?<br>
&gt; &gt;<br>
&gt; &gt; Or<br>
&gt; &gt;<br>
&gt; &gt; 2) Is this just a simple a bug, in the sense of oops, just forgot to print<br>
&gt; &gt; the error message concerning the offending source module and line?<br>
&gt; &gt;<br>
&gt; &gt; If its 2) I&#39;ll work on debugging for a fix.  If 1) I&#39;m just not going to<br>
&gt; &gt; be able to tunnel through raco -&gt; cm -&gt; tr -&gt; module expansion to run this<br>
&gt; &gt; down, so I&#39;ll punt.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Thanks,<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Ray<br>
&gt; &gt;<br>
&gt; &gt; ____________________<br>
&gt; &gt;   Racket Users list:<br>
&gt; &gt;   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; ____________________<br>
&gt;   Racket Users list:<br>
&gt;   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</div></div></blockquote></div><br></div>