Re: [racket-users] Re: single-file packages and embedded documentation and metadata

2017-11-10 Thread Neil Van Dyke

Jack Firth wrote on 11/10/2017 11:32 PM:


I have to redo my tools once more, and am sick of my current `(doc
...)` and `@doc` format, *and the resulting dependency on McFly.*


Could you elaborate on your experience with this?


A snippet of an example of embedded-docs source file for 
"http://www.neilvandyke.org/racket/roomba/"; is at the bottom of this 
file.  See the dependency on `mcfly`, which simply provides a dummy 
`doc` form so that the Racket compiler ignores everything in `doc`.


(I later added support for `at-exp` `@doc` syntax, which makes the 
documentation easier to type and look at than in that painful-looking 
example, and also visually differentiates it from code.)


The result works OK, but I have to write a new tool for other reasons, 
with no time to do so, and I'd like to simplify this.


For a module with embedded docs I'd want to treat them the same as 
tests: in a special submodule which results in "build-time" 
dependencies instead of runtime dependencies.


Yes, I'm sympathetic to something like that.

I've thought of having `doc` transform to `(module+ doc`, and having 
that then `provide` the data in some easily-computer-accessible form, as 
well as generate the contemporary Scribble manuals.


One reason I've been shying away from that is that it's not only more 
work (I don't really have time to write more tools, which distract from 
my actual work), but then it looks like it wants to be a core Racket 
thing, on something for which compromise would have to be found among 
people from different schools of thought and goals (like a standards 
effort; again, no time for this).  And I'm still subconsciously always 
figuring out the nuances to support the full-lifecycle story for my 
industry practitioner's book, which is for people with needs and 
thinking somewhat different than that of core Racket developers.  So, 
going with another quick-to-implement approach that lets me hit all the 
nuances I can, without creating big core Racket work for everyone, and 
seems the most likely way that I'll ever get all the nuances I want.


I suppose I could do this in a tractably quick&dirty way, without a big 
production, if I'm willing to keep a dependency on another package -- 
either for a `#lang` variant of `racket/base`, or maybe a `require` from 
`racket/base` and suboptimal syntax.  But that's more work, people won't 
like that dependency (I've had people fork my packages to remove the 
dependency before), and using `racket/base` seems most friendly for 
sharing reusable open source modules.


Which is why I'm currently leaning towards the presentable and 
uncomplicated three-semicolon approach.



#lang racket/base
;; Copyright Neil Van Dyke.  See file "info.rkt".

(require (for-syntax racket/base
 syntax/parse)
 racket/match
 racket/system
 mcfly)

(module+ test
  (require overeasy))

(doc (require scribble/bnf
  "roomba-doc-utils.rkt"))

(doc (section "Introduction")

 (para "This package implements a "
   (hyperlink "http://docs.racket-lang.org/";
  "Racket")
   " interface for controlling many "
   (tech "models")
   " of the "
   (hyperlink "http://en.wikipedia.org/wiki/Roomba";
  "iRobot Roomba")
   " robot vacuum cleaner, and the "
   (hyperlink "http://www.irobot.com/create";
  "iRobot Create")

--
You received this message because you are subscribed to the Google Groups "Racket 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[racket-users] Re: single-file packages and embedded documentation and metadata

2017-11-10 Thread Jack Firth

>
> I have to redo my tools once more, and am sick of my current `(doc ...)` 
> and `@doc` format, *and the resulting dependency on McFly.* 
>

Could you elaborate on your experience with this? For a module with 
embedded docs I'd want to treat them the same as tests: in a special 
submodule which results in "build-time" dependencies instead of runtime 
dependencies. With the current package build system, users could install my 
package with embedded docs in pre-built form without installing build-time 
dependencies using `raco pkg install 
--catalog https://pkg-build.racket-lang.org/server/built/catalog/ --binary 
mypackage`, assuming they're running the same version of Racket as the 
package build server.

My gut instinct is that I'd like to explore making pre-built package 
installations more automatic and pain-free for package users, rather than 
asking package developers to avoid adding dependencies entirely by using 
special comments and separately installed special tools. Putting docs in 
specially-formatted comments means running my code in DrRacket won't check 
my docs for syntax errors.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.