TL;DR: I have a project in an early stage and don't know when I should publish something(cargo and github). I would like to get community help, and I want to encourage long term adoption if the project is successful, but it's currently a single component of a larger project useless on it's own, and the implementation of each component is likely to change in a way that breaks things if people decide to build on it.
I'm working on what I hope will be a cross editor snippet manager, Sniper, which uses a superset of LSP's snippet syntax specification, and meant to have features that don't seem to be offered by other snippet managers(essentially my goal is ultisnips feature parity with a few extras). Plus, if it really does become partially editor agnostic, you'll have mostly the same snippet capabilities across multiple editors, similar to how language servers offer mostly the same capabilities to multiple editors.
It's composed of 3 parts:
- all the stateless logic(and components for handling state), are defined here.
- handles deserialization and storage of snippets
- the first target is node via wasm, followed by java or python(via pyO3)
- written in whatever language is either easiest to write or implement for that editor
- first target is vscode via typescript, then either kakoune via python or eclipse via java
- actually handles state, such as tracking user input and deciding when to suggest/insert a snippet.
- may leverage interaction with the language server for the target language in order to have smarter loading or completion
with a 4th component I'm considering:
- a download manager for snippets for language/library x
- if it becomes actually editor agnostic, it makes sense not to leave this to just bulk download everything or leave it to editor X
This is meant to handle snippets for multiple libraries which will be loaded as needed. For example serde snippets would get loaded either when importing serde, or sniper becomes aware somehow that you are using serde; snippets can also be composed of other snippets to make implementations of larger blocks of code(and file templates) much easier for the user.
I have the parts of sniper-core defined, confirmed that I can deserialize a few toml files containing snippets, and that I can grab them. I started a vscode extension last night via a yo template and started reading on compiling rust to wasm which, unless I'm missing something, after reading the Mozilla page on it seems to be a lot easier than I thought it would be.
Because pretty much every aspect of this project is a first for me, I can't really go any further with the core library without learning what I can and can't do with the editor and LSP. I also may change the nature of how much is handled by the core library (making more and more editor agnostic after I build an editor interface). I may change from toml to json if it turns out to make more sense to use a StreamDeserializer which doesn't seem to have an equivelent in the toml implementation. I have plenty of other parts that are likely to get rethought or reworked once I have a basic working POC for an editor.
So given that this project is composed of multiple parts, each which is useless without the other, and that once each is defined (because I'm unlikely to implement it for every editor in existence) other projects may break if people start building on it while I'm still figuring out the best way to skin this cat, when is advisable to publish my project, both on cargo and on github?