Fork me on GitHub
#clojuredesign-podcast
<
2020-11-15
>
sogaiu02:11:10

on the topic of rich comments containing tests, i have been using this a bit: https://github.com/sogaiu/alc.x-as-tests one can put simple tests within rich comments like this:

(comment

  (- 1 1)
  ;; => 0

 ,) 
there is a "runner" mode which can execute these tests

neumann16:11:03

@UG1C3AD5Z That's neat! I could see that being useful for simple tests or getting some tests going quickly. Do you use code folding in your development environment? One of the reasons why I created separate "fiddle" files was to get the non-production code into its own place.

nate18:11:34

This is interesting. Reminds me of Stuart Halloway's https://github.com/cognitect-labs/transcriptor

genekim23:11:43

OMG. I just learned how I could use commas to keep that last paren on a separate line!!! 🎉

nate23:11:37

ah, that keeps it from jumping up to after 1)?

🎉 1
sogaiu01:11:42

@U5FV4MJHG indeed i do use code-folding for comment blocks when using emacs. still trying to get that to work well in neovim but haven't had much luck there 🙂 fwiw, in emacs i do something like:

(add-hook 'clojure-mode-hook
              (lambda ()
                (hs-minor-mode)
                (setq hs-hide-comments-when-hiding-all nil)
                (setq hs-block-start-regexp "\\s(comment")))

sogaiu02:11:54

@nate yes, this definitely takes inspiration from stuart halloway's transcriptor. i don't know if you've taken a look at mal, but i just noticed in the last few days that its test files do something similar.

sogaiu02:11:38

@U6VPZS1EK i learned about the "door stop" technique in #parinfer -- though there folks were using other constructs such as [] to achieve the same end. i have been collecting good uses for the comma in clojure -- it appears it's got more to it than at first glance. this particular use of "preventing the editor from moving things around" i also use for formatting part of cond forms and a few other places.

sogaiu02:11:50

@U5FV4MJHG ah i forgot to mention -- one of my ulterior motives is to try to get simple / illustrative uses to live close to definitions. so i decided to try having the examples / tests live in the same file as the definitions. i'm not trying to have a comprehensive testing system -- it's supposed to be light and informative. geared toward explorative phases of development. i wrote a version for the janet programming language first before making a port to clojure. in both implementations, separate files are generated containing tests and these can be used as a starting point for more traditional testing if desired.

nate02:11:56

@UG1C3AD5Z I have folding working in neovim. I'll dig up the proper config bits when I'm at my terminal again.

sogaiu02:11:28

@nate wow, that'd be great! looking forward to it :)

nate04:11:56

@UG1C3AD5Z I use https://github.com/gberenfield/cljfold.vim, with this in my vimrc:

let g:clojure_foldwords = "def,defn,defmacro,defmethod,defschema,defprotocol,defrecord"

sogaiu04:11:14

@nate thanks! i gave that a try using "comment" as the value. unfortunately, the fold somehow seems to "swallow" defns that follow comment blocks. fwiw, here is a relatively minimal section of code that demos it here:

(ns my.ns)                                                                                                           
                                                                                                                     
(comment

  (+ 1 1)
  ;; => 

  )

(defn my-fn
  []
  :my-value)
any ideas about this? (it also seems to match on "comment-block?" which by sheer coincidence happened to be in the file i tested.)

nate04:11:44

interesting

nate04:11:08

perhaps put another new line between the end comment paren and the defn?

nate04:11:22

I've found the cljfold to be a little eager sometimes

sogaiu04:11:35

the extra line did it! thanks 🙂 on a side note, i've been looking at nvim-treesitter recently. they seem to have plans for some folding, so perhaps there will be other options before long.

sogaiu04:11:34

for any interested parties, i jotted down some of the situations i've found the comma to be useful in: https://gist.github.com/sogaiu/d8d2b9765bef37f645211d4d5df1d7c8 happy to hear about other uses too :)

neumann22:11:29

@UG1C3AD5Z I like your idea of putting illustrative uses of a function near to the function. That is indeed handy. @U0510902N is definitely more hooked on code folding than I am, but I can see how folding helps to eliminate some of the visual noise associated with mixing the function code and the example code.

sogaiu22:11:39

i haven't found anything other than folding so far, but perhaps there are other alternatives (or will be at some point). at the moment i'm happy at least this option exists 🙂 on a side note, i've also experimented with applying folding to long strings such as docstrings. i'm usually grateful for docstrings those but also find that those can interfere with my code reading process sometimes.