cursive

imre 2026-01-28T11:41:20.831919Z

Hey @cfleming, when do you think a version compatible with IJ 2026.1 EAP will be out?

cfleming 2026-02-01T08:40:17.195619Z

@imre Release with 2026.1 EAP support out now!

🙏 1
cfleming 2026-01-28T18:49:12.471129Z

Shortly! Sorry for the delay with this.

imre 2026-01-28T18:50:54.072869Z

No worries. So far I haven't seen anything that makes me want to rush upgrading 🙂 Since Jetbrains stopped publishing those nice EAP release pages I kinda lost interest. I'm not going to parse pages or release notes...

cfleming 2026-01-28T18:57:09.048599Z

Yeah, I'm not even sure where they announce the new EAP series these days, they used to write a blog post but no longer do.

imre 2026-01-28T18:57:28.845909Z

I was always looking forward to those posts

cfleming 2026-01-28T19:01:20.467169Z

BTW I just found https://github.com/imrekoszo/unlazy, which was just what I was looking for.

cfleming 2026-01-28T19:01:23.969039Z

Thanks!

imre 2026-01-28T19:02:02.291419Z

nice! what are you looking to use it for?

cfleming 2026-01-28T19:02:32.413819Z

I'd like to write this as an inspection in Cursive with quick fixes to translate to the transducer equivalents.

cfleming 2026-01-28T19:02:51.074469Z

But right now I'd just like to get warned when I use those forms.

👍 1
imre 2026-01-28T19:03:27.744969Z

Sometimes the rewrite isn't trivial 😛

cfleming 2026-01-28T19:03:37.927499Z

You don't have for on the list there, any reason why?

cfleming 2026-01-28T19:03:43.149459Z

Oh I'm sure.

imre 2026-01-28T19:04:07.627349Z

That's actually something I was wondering a few weeks ago

cfleming 2026-01-28T19:04:25.470549Z

Sometimes it's easier if you have cgrand's xforms around.

imre 2026-01-28T19:04:49.248419Z

x/for should be a good replacement but it must be noted that it produces an eduction and so it isn't cached

imre 2026-01-28T19:04:59.237849Z

gotta love xforms

imre 2026-01-28T19:05:18.132489Z

PRs are welcome to unlazy

imre 2026-01-28T19:05:49.461749Z

both on "what to warn on" and "what alternatives to suggest" line

cfleming 2026-01-28T19:06:13.315299Z

Yes, I'm not sure how the inspection could adequately warn the user when the semantics aren't identical. Often I don't care, and I actually want a vector instead of a seq, even though the semantics are different.

cfleming 2026-01-28T19:07:19.967899Z

Maybe something like "Convert (map foo x) to (into [] (map foo) x) (semantic change)"?

cfleming 2026-01-28T19:12:43.227709Z

Not sure how long those descriptions can be, might have to be "Convert lazy map to use into [] (semantic change)?"

cfleming 2026-01-28T19:12:43.609059Z

Then there could be a couple of different options to convert to into []', sequence` etc, and just warn on those which are semantic changes.

imre 2026-01-28T19:13:27.388379Z

It depends on usage really. If the entire result is then consumed somehow then it's good. But if it's further processed with another sequence op, then transducer composition might be better. Or a transducible context that produces the wanted result, like a string rendering of the vector.

cfleming 2026-01-28T19:14:02.142029Z

Yes, I'm sure there's approximately infinity refactorings in there somewhere 🙂

imre 2026-01-28T19:14:03.160239Z

I only added vague suggestions to tgis collection of linter rules because of this.

imre 2026-01-28T19:19:13.061759Z

I'm not sure what a good ux would be here. Low hanging fruit quick fixes is nice for simpler cases and devs newer to the concept. But they might make it easier to miss a more impactful refactor, which could be too complex to suggest in a quick fix.

imre 2026-01-28T19:19:25.028089Z

Warning is nice as a start

cfleming 2026-01-28T19:21:09.041899Z

Yes, I wonder if it would be possible to factor the refactorings into simple atomic operations, so first you could convert ->> to some form, and then have additional operations to factor out the transducible context from the resulting comp.

danieroux 2026-01-28T12:54:58.997899Z

I have all this information, how do I print/format/meta it so that it becomes clickable in the REPL output?

danieroux 2026-01-28T12:55:42.359459Z

{:file   *source-path*
 :line   (.getLineNumber *in*)
 :column (.getColumnNumber *in*)
 :e      (main/root-cause e)}
I cannot use cursive.inline.nodes because I do not control the return value of the eval 😕

danieroux 2026-01-28T17:39:25.299159Z

Printing file://<absolute-path>:<line>:<column> got me there

cfleming 2026-01-28T19:08:35.056189Z

Sounds good, I'm not sure there's a better solution if you can't control the eval.