spring-projects / spring-projects/spring-tools

finish work on project-related XSD namespace resolution for XML language server

Open
#581 8 comments 0 reactions 1 assignee View on GitHub

@martinlippert is already working on this.

Since Feb 10, 2021.

for: eclipse status: assigned theme: xml-support
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:

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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.