spring-projects / spring-projects/spring-tools
finish work on project-related XSD namespace resolution for XML language server
@martinlippert is already working on this.
Since Feb 10, 2021.
- Dominant language
- Java
- Stars
- 983
- Forks
- 240
- Avg merge
- 7d 1h
- Merged PRs (30d)
- 7
Description
Spring uses a specific lookup mechanism for XML namespace definition files that loads XSD files from projects instead of from the web using the URL. Support for this was implemented a long time ago for the (old) XML tooling in Eclipse (from the WTP project) as part of the Spring IDE and got extracted into a self-contained feature that got re-used as part of the Spring Tools 4 for Eclipse. That makes the project-based XSD namespace resolution work for the old WTP-based XML support in Eclipse.
For Spring Tools 4, we recently adopted the Wild Web Developer features to support working on modern web applications (see https://github.com/spring-projects/sts4/issues/354). As a side effect of adopting this new feature from Eclipse, the Eclipse-based IDEs now have two different sorts of XML support: the old one from WTP and a new one from Wild Web Developer, which is based on an XML language server (https://github.com/eclipse/lemminx).
A result of this side effect is that both tooling for XML now validates XML files by default. But the XML language server doesn't know anything about the project-related XSD namespace lookup mechanism that was implemented for the old WTP-based XML tooling, so that validation errors appear in certain cases (e.g. https://github.com/spring-projects/sts4/issues/447).
Therefore, we went ahead and implemented an extension to the XML language server, so that the XML language server can use the project-related XSD namespace lookup mechanism as well. In order to do that, we did:
The main implementation is at:
https://github.com/spring-projects/sts4/commit/787aa0fc0b54684503e548ef49896bbe20118010
In order to make this work, a few more changes to other projects where necessary:
- https://github.com/eclipse/lemminx/pull/905
- https://github.com/redhat-developer/vscode-xml/pull/339
- https://github.com/eclipse/wildwebdeveloper/pull/543
- https://git.eclipse.org/r/c/lsp4e/lsp4e/+/170859
- https://github.com/eclipse-m2e/m2e-core/pull/35
- https://github.com/eclipse-m2e/m2e-core/pull/31
With that, the work is almost done. The two remaining items that need more work in order to ship this are:
-
the validation in the XML language server doesn't seem to take the specialized namespace resolver into account - or our implementation is too slow. The validation still happens super quickly after opening an XML file and shows wrong errors (based on non-project-related lookup) and that error doesn't go away.
-
content-assist works as soon as the initial lookup inside of the classpath of the project is done, but that takes way too long. Hitting content-assist for the first time typically shows wrong results (non-project-related lookup) or takes ages to populate. While this isn't a huge difference compared to the old implementation for the WTP-based XML tools, it feels way too slow for the modern world of language-server-based tooling.
This ticket tracks the work that is necessary to solve those two remaining issues.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.