-
Notifications
You must be signed in to change notification settings - Fork 145
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Formalize API handling and semantic version rules #538
Comments
Off the top of my head:
This is just to get the ball rolling. |
A related question is whether LSP4J will continue to be versioned as a whole (each "part" having the same version). |
In an attempt to make my vague comments above a bit more clear, here are more concrete suggestions (post
By way of example: LSP4J 1.0.0 is released. All bundles and exported packages have the same version number, An OSGi consumer of LSP4J imports some packages:
Due to LSP evolution, a breaking API change occurs in the LSP4J 2.0.0 is released. The version number clearly indicates that there have been some breaking API changes. When the above mentioned consumer is ready to move to the new LSP4J version, it needs to change the version range only for the
(and adapt to the breaking API changes in that package as documented in LSP4J 2.1.0 is released. The version number clearly indicates that there have been no breaking API changes. The consumer can use the new LSP4J version without any adaptation. |
I am fine with proper Semantic Versioning - but that probably means releasing a new major version most every time. e.g. #534 required a breaking API change and I would argue that the benefit of adding #534 would have been worth a major version change. Reading through the changelog there aren't many releases that haven't broken API in the past. IMHO* we should have all packages have the same version in a bundle. BTW does Eclipse API tooling support version checking on package version exports? * strong opinion - weakly held |
Yes, and IMHO there is nothing wrong with it per se. Breaking changes are breaking changes, and this needs to be clearly communicated. Besides, regular major releases should allow us more flexibility in deprecating and removing the old stuff.
I see no reason to disagree :-) After all, there are only a few packages in a bundle. |
👍 Lets see what others have to say - but I am all for having semantic versioning. It is easier to explain to people! |
Yes, and I even think it is sort of requirement for Eclipse projects, or at least a strong recommendation. |
<Somewhat off topic> |
I see. However, this seems to be just a thoroughly arranged exception process to the general rule. And it seems to be not without its own issues. There is a difference between the Eclipse Platform and LSP4J. Consumers of the Platform have learned to expect API stability and not to be regularly broken by API changes, while unfortunately this cannot be the case for consumers of LSP4J, where breaking changes will probably occur in just about every release (based on the current and past experience). E.g. currently LXTK uses the version range [0.12, 0.13) for LSP4J, because I know from experience that almost certainly it will not work with the next version of LSP4J. And if proven wrong, I will just adjust the version range to [0.12, 0.14) then. Semantic versioning would just make such 'workarounds' no longer necessary. On the other hand, it is not clear (to me, currently) what benefit can be gained from not using proper semantic versioning for all API in the LSP4J case. |
No, unfortunately it does not. Just checked it. Either we will have to maintain package version exports manually or not use them at all. |
In that case I recommend not having them until/unless there is a strong demand for it. We should continue to document breaking API changes in the changelog so that consumers can easily identify what code they need to review/refactor. |
+1 for that. |
This has been on the todo list for a while and is required for us to graduate the project.
It was most recently discussed in the mailing list but there have been other discussions such as #537.
The consensus is to formalize something along the lines of:
This means consumers of LSP4J will probably want a very tight bound on LSP4J version they use all the time. Therefore, one of the other requirements is that LSP4J must not become a singleton to that in an OSGi environment multiple versions can be imported if needed.
One of the biggest consumers of LSP4J in an OSGi environment is LSP4E which is a singleton bundle.
This issue is to get approval from the community and document the above "formally". The earlier mailing list discussion probably counts as approval already, but please comment anyway.
The text was updated successfully, but these errors were encountered: