Unibeautify/cli

Passing file descriptor numbers to avoid tempfiles

Opened this issue · 2 comments

Continuing from #82 (comment)

The file descriptor support seemed weird at first but it's starting to grow on me. Tempfiles are the bane of inter-process communication. It's much cleaner to pass everything around with pipes. If we support routing output to arbitrary file descriptors, callers can create a pipe for every kind of output they need, then just assign the pipes to pre-determined file descriptors and tell unibeautify about those fd numbers. No tempfiles ever 🎉

And from #82 (comment)

No tempfiles ever 🎉

@lassik A goal I share. I'd be open to receiving a Pull Request implementing this. Of course, we need to continue support for Linux, Mac, and Windows.

Linux, Mac and all other unixes are easy - passing around file descriptor numbers has a long history there and the relevant APIs are extremely stable.

After investigating for a bit, I think it can be done the same way one Windows, but not sure if there are any gotchas.

This is actually an implementation detail of each individual beautifier -- not specific to Unibeautify CLI or even Unibeautify core itself. Ideally, we don't use anything except stdin and stdout, however, for too many beautifiers this is not an option 😢. Therefore, this issue is more so a discussion of the best practice for developing beautifiers and then each beautifier which is currently afflicted with temporary files should be migrated towards the best practice.

Ah, I thought people who call our CLI would benefit from having the option to use arbitrary file descriptors of their choosing. I agree that we should definitely call the beautifiers using stdin/stdout/stderr whenever possible. If it works at all (on Windows) then it should be quite easy to implement. It's definitely easy on Unix if Node comes with an OS API of similar scope to e.g. Python.