michaelb / sniprun

A neovim plugin to run lines/blocs of code (independently of the rest of the file), supporting multiples languages
MIT License
1.5k stars 47 forks source link

[quick question] what's the status on file level and project level support? #298

Open 4rtemis-4rrow opened 1 month ago

4rtemis-4rrow commented 1 month ago

first of all, great project btw, been using it for ages now

second of all, idk rust, otherwise I'd have contributed towards those 2 features

so, what's the status of them? did work on them begin? is it planned for the near future? and what languages would get support first

thanks in advance for taking the time to read this

michaelb commented 1 month ago

Hi!

Unfortunately, file and project support require (by design) very intelligent handling of the dependency of symbols (what requires what in order to be 'run'). Such a thing would have to be engineered around treesitter or LSP (in order to support multiple languages) and LSP is ... somewhat a mess

(I tried my hand at treesitter some time ago and unfortunately it was already quite 'hard' and neovim devs' advice was that treesitter wouldn't be powerful enough.)

So especially for the first few languages, there's a huge cost of implementing the LSP plumbing... and unlike when I was in college, with a full-time job I have less free time, and more importantly, less motivation to jump on my projects on the evening when I spend all day coding. I currently maintain sniprun at the rate the issues are coming in, about once every two weekends...but that's it. And I have other projects too. Unless something major in my life changes, file/project support level is years ahead

However, all hope is not lost! Sniprun comes from a time where treesitter and LSP didn't even exist 🦕; their usability has likely improved since I last gave them a chance.

If you want to give it a try, knowing Rust in not that necessary, actually. LSP (/treesitter) is so tightly embeded in neovim that I would rather implement the logic in Lua. I would have to implement some hooks from the Rust part of the code, sure, but that I can reasonably do. But we'd probably have to work together for a few hours to agree on how and what to do