vscode-maven icon indicating copy to clipboard operation
vscode-maven copied to clipboard

Improve pom.xml editing experience

Open akaroml opened this issue 6 years ago β€’ 21 comments

  1. Better auto-completion
    • [x] a. Show dependency candidate list as users type
    • [x] b. Show version candidate list as users type
  2. Code snippet
    • [x] a. Code snippet for dependency
    • [x] b. Code snippet for properties
  3. Syntax highlighting - color logical nodes differently
  4. Error check
    • [x] a. Check compatibility errors between dependencies

akaroml avatar Apr 13 '18 07:04 akaroml

~We refactor structure and fix some other UX issues in v1.0.0. Plan to work on this issue in v.1.1.0~

Eskibear avatar Jul 18 '18 07:07 Eskibear

Adding a dependency to https://marketplace.visualstudio.com/items?itemName=redhat.vscode-xml will provide tag autocompletion and validation as per the Maven schema

fbricon avatar Oct 15 '18 20:10 fbricon

I've installed and played the extension for a while, and it looks good. And I'm also thinking about the possibility we provide other Maven-specified features based on the great work you guys have done. Take the dependency completion as an example, I believe there would be a bunch of interfaces required. Am I able to talk to lsp4xml to get sufficient context information? How does it work with a partially validated pom? Can we provide an extended .xsd file and ask lsp4xml to validate pom file with it? etc. Let me take an investigation with the team first, and later I will give you the feedback.

Eskibear avatar Oct 17 '18 07:10 Eskibear

Sorry for the delay. It takes me some time to compare and think of the functionality of each extension. And now I think it makes more sense for the Maven extension to:

  1. Not depend on XML extension directly.
  2. Recommend users to install XML extension to gain better XML editing experience.

Reasons:

  1. XML extension provides support for editing XML documents, Maven extension provides a project explorer and shortcuts to execute Maven commands. They complement each other. The relationship is more like "partners", instead of "dependency and dependent".
  2. Extension dependencies cause users unable to disable/uninstall the dependent extensions. From the engineering view, in the source code of vscode-maven, there's no call of vscode-xml APIs, and in fact the Maven extension can work without XML extension being enabled.

So I think it's better to avoid adding extension dependencies unless we have to. Let users decide what to install, and we provide choices.

Eskibear avatar Nov 16 '18 05:11 Eskibear

I understand there's no actual dependency between both extensions and I understand if you don't want to go that route. I made that suggestion as a workaround for https://github.com/Microsoft/vscode/issues/63001, as I strongly believe vscode-xml is currently the best way to improve editing experience.

fbricon avatar Nov 19 '18 04:11 fbricon

2. Extension dependencies cause users unable to disable/uninstall the dependent extensions.

Note that extensions can use the extensionPack property in package.json to avoid this, while still having such "soft" dependencies be installed automatically.

https://code.visualstudio.com/updates/v1_26#_extension-packs-revisited

Gama11 avatar Feb 26 '19 19:02 Gama11

I've installed and played the extension for a while, and it looks good.

Thanks!

And I'm also thinking about the possibility we provide other Maven-specified features based on the great work you guys have done.

It should be fantastic, but it seems that you change your mind.

Take the dependency completion as an example, I believe there would be a bunch of interfaces required. Am I able to talk to lsp4xml to get sufficient context information?

lsp4xml was designed to be extensible by implementing your own hover, completion, validation, refactoring, etc by using SPI.

All supports from LSP4XML (completion, hover, etc for XSD, DTD, etc are managed with a SPI extension).

For completion for instance you must implement ICompletionParticpant and in for instance if you wish to manage dependency completion, you could implement

void onXMLContent(ICompletionRequest request, ICompletionResponse response) throws Exception;

The request contains all informations like the DOM w3c node , position, etc.

How does it work with a partially validated pom?

It works well because our DOM parser are tolerant and can built a DOM document even if XML is not valid (like other language service JSON CSS, HTML). Our DOM parser is a port in Java of the vscode-html-languageservice which works pretty well.

Can we provide an extended .xsd file and ask lsp4xml to validate pom file with it? etc.

You mean that you wish to validate and manage completion from a custom XSD file, if it that, yes you can use XML catalog or XML file association that user can configure.

Let me take an investigation with the team first, and later I will give you the feedback.

Bad news, you are not interested -(

I have read quickly your code and it seems you don't use LSP, but you consume JDT LS with workspace command. I think your great work with JDT LS could be re-used and consume it inside a SPI LSP4XML ICompletionParticipant. If we have that, it means that we could reuse your work in another client like Eclipse (but I'm not sure that you are interested by this topic), but I know @mickaelistria and @akurtakov are very interested by this topic).

For your case LSP4XML provides :

  • the capability to customize completion, hover, validation, rename, etc
  • a DOM w3c document (tolerant parser) with position

The only part that it misses in vscode-xml, is to configure it to use the custom ICompletionParticipant from a JAR but I will work on this issue https://github.com/redhat-developer/vscode-xml/issues/190

angelozerr avatar Oct 18 '19 13:10 angelozerr

but it seems that you change your mind. Bad news, you are not interested -(

Yes, I changed my mind and was no more interested then :) It would be more helpful if you could have shared these great progress to me one year ago back in 2018, but now it's the end of year 2019 πŸ€·β€β™‚ . As you mentioned, this extension doesn't implement the whole LSP for the moment, instead it simply implements some providers to unblock users with the basic features. However it's never too late, looking forward to any chance of future collaboration to provide more help for Maven developers.

Eskibear avatar Oct 31 '19 07:10 Eskibear

However it's never too late, looking forward to any chance of future collaboration to provide more help for Maven developers.

Glad you could be opened with this idea. vscode-xml 0.9.2 (not released) will provide the capability to declare JAR in package.json which hosts the custom XML completion, hover, validation, etc (in Java with SPI). See https://github.com/redhat-developer/vscode-xml#custom-xml-extensions

In this explanation, I have written a very basic little POC with maven to have completion for test scope:

image

The last thing that it doesn't support, is the capability to communicate with JDT LS from the SPI Java extension. I have some ideas how to do that and it is in my scope. Once we will have this feature, I will try to improve https://github.com/angelozerr/vscode-xml-maven again by using your JDT LS extension to manage search group id, etc

One of my motivation ( @mickaelistria and @akurtakov ) is to provide the same maven support for Eclipse IDE https://github.com/eclipse/wildwebdeveloper. I think if we can share our work and consume the same XML language server with custom extension, it shoud be very nice and we will able to collaborate to improve maven support for vscode, Eclipse IDE and other IDE (the main idea of LSP).

angelozerr avatar Oct 31 '19 08:10 angelozerr

One more auto-completion request. Typical pom file uses lots of properties. Auto completion suggestion of property name when $ is typed.

Also when mouse over on property value should be seen as hint.

hemang-ajmera avatar Nov 08 '19 06:11 hemang-ajmera

Now that lemminx-maven has made some good progress, it may be time to think about integrating it into this extension.

Features

Additionally to the XSD based assistance provided by LemMinX when editing pom files, this extension adds:

  • model error reports are diagnostics
  • completion and hover documentation for dependency/scope (test, provided, runtime, ...)
  • completion and hover documentation for plugins/execution/phase (process-resources, package, test, verify...)
  • completion and hover for GAVs or any groupId, artifactId, version item under depedencies, dependency, plugins, plugin, parent
  • completion and hover evaluation for properties
  • completion, hover documentation and validation for plugins configuration elements
  • results use local repository and remote repositories (with index)

Here a demo in Eclipse IDE:

fbricon avatar Jul 16 '20 18:07 fbricon

I was trying to integrate lemminx-maven, but completion for dependencies failed with some errors. I don't know if I missed some critical steps.

What I did was:

  • clone code base: https://github.com/eclipse/lemminx-maven/commit/372b373d114b58393730894c818ac5e8d8068b6e
  • build the project, extract lemminx-maven/target/lemminx-maven-0.2.1-SNAPSHOT-zip-with-dependencies.zip into a folder "lemminx" under vscode-maven (74 .jar files, 16.1MB in total)
  • in package.json of vscode-maven, add
    "contributes": {
      "xml.javaExtensions": [
        "./lemminx/*.jar"
      ], 
      ...
    }
    
  • launch Extenison Host, open a pom.xml and do some editing.
  • Note that in below video, after I typed "junit", the suggestion was not triggered automatically as shown in GIF above, so I pressed ctrl + space to force triggering it, but still not working.

https://user-images.githubusercontent.com/2351748/103735562-4a939800-5029-11eb-9de5-3417daeec053.mp4

logs

click to expand

[Info  - δΈ‹εˆ2:07:50] Jan 06, 2021 02:07:50 org.eclipse.lemminx.XMLLanguageServer initialize()
Message: Initializing XML Language server
LemMinX Server info:
 - Version : 0.14.1
 - Java : C:\Users\yanzh\AppData\Local\Programs\AdoptOpenJDK\jdk-11.0.8.10-hotspot
 - Git 67a2463 - [maven-release-plugin] prepare release 0.14.1
[Error - δΈ‹εˆ2:08:20] Jan 06, 2021 02:08:20 org.eclipse.lemminx.extensions.maven.MavenProjectCache parseAndCache()
Message: unexpected character in markup \n (position: END_TAG seen ...\n\t\n\t[Error - δΈ‹εˆ2:08:20] Jan 06, 2021 02:08:20 org.eclipse.lemminx.extensions.maven.MavenProjectCache parseAndCache()
Message: start tag unexpected character < (position: TEXT seen ...\n\t<d\n<... @27:2)
org.codehaus.plexus.util.xml.pull.XmlPullParserException: start tag unexpected character < (position: TEXT seen ...\n\t<d\n<... @27:2)
at org.codehaus.plexus.util.xml.pull.MXParser.parseStartTag(MXParser.java:2226)
at org.codehaus.plexus.util.xml.pull.MXParser.nextImpl(MXParser.java:1356)
at org.codehaus.plexus.util.xml.pull.MXParser.next(MXParser.java:1319)
at org.codehaus.plexus.util.xml.pull.MXParser.nextTag(MXParser.java:1305)
at org.apache.maven.model.io.xpp3.MavenXpp3Reader.parseModel(MavenXpp3Reader.java:2072)
at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:3872)
at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:595)
at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:609)
at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:638)
at org.eclipse.lemminx.extensions.maven.MavenProjectCache.parseAndCache(MavenProjectCache.java:160)
at org.eclipse.lemminx.extensions.maven.MavenProjectCache.check(MavenProjectCache.java:112)
at org.eclipse.lemminx.extensions.maven.MavenProjectCache.getProblemsFor(MavenProjectCache.java:105)
at org.eclipse.lemminx.extensions.maven.MavenDiagnosticParticipant.doDiagnostics(MavenDiagnosticParticipant.java:49)
at org.eclipse.lemminx.services.XMLDiagnostics.doExtensionsDiagnostics(XMLDiagnostics.java:58)
at org.eclipse.lemminx.services.XMLDiagnostics.doDiagnostics(XMLDiagnostics.java:41)
at org.eclipse.lemminx.services.XMLLanguageService.doDiagnostics(XMLLanguageService.java:161)
at org.eclipse.lemminx.services.XMLLanguageService.publishDiagnostics(XMLLanguageService.java:170)
at org.eclipse.lemminx.XMLTextDocumentService.validate(XMLTextDocumentService.java:512)
at org.eclipse.lemminx.XMLTextDocumentService.lambda$triggerValidationFor$26(XMLTextDocumentService.java:505)
at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:714)
at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:479)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

[Error - δΈ‹εˆ2:08:21] Jan 06, 2021 02:08:21 org.eclipse.lemminx.extensions.maven.MavenProjectCache parseAndCache() Message: start tag unexpected character < (position: TEXT seen ...\n\t<de\n<... @27:2) org.codehaus.plexus.util.xml.pull.XmlPullParserException: start tag unexpected character < (position: TEXT seen ...\n\t<de\n<... @27:2) at org.codehaus.plexus.util.xml.pull.MXParser.parseStartTag(MXParser.java:2226) at org.codehaus.plexus.util.xml.pull.MXParser.nextImpl(MXParser.java:1356) at org.codehaus.plexus.util.xml.pull.MXParser.next(MXParser.java:1319) at org.codehaus.plexus.util.xml.pull.MXParser.nextTag(MXParser.java:1305) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.parseModel(MavenXpp3Reader.java:2072) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:3872) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:595) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:609) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:638) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.parseAndCache(MavenProjectCache.java:160) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.check(MavenProjectCache.java:112) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.getProblemsFor(MavenProjectCache.java:105) at org.eclipse.lemminx.extensions.maven.MavenDiagnosticParticipant.doDiagnostics(MavenDiagnosticParticipant.java:49) at org.eclipse.lemminx.services.XMLDiagnostics.doExtensionsDiagnostics(XMLDiagnostics.java:58) at org.eclipse.lemminx.services.XMLDiagnostics.doDiagnostics(XMLDiagnostics.java:41) at org.eclipse.lemminx.services.XMLLanguageService.doDiagnostics(XMLLanguageService.java:161) at org.eclipse.lemminx.services.XMLLanguageService.publishDiagnostics(XMLLanguageService.java:170) at org.eclipse.lemminx.XMLTextDocumentService.validate(XMLTextDocumentService.java:512) at org.eclipse.lemminx.XMLTextDocumentService.lambda$triggerValidationFor$26(XMLTextDocumentService.java:505) at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:714) at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:479) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

[Error - δΈ‹εˆ2:08:21] Jan 06, 2021 02:08:21 org.eclipse.lemminx.extensions.maven.MavenProjectCache parseAndCache() Message: start tag unexpected character < (position: TEXT seen ...\n\t<dep\n<... @27:2) org.codehaus.plexus.util.xml.pull.XmlPullParserException: start tag unexpected character < (position: TEXT seen ...\n\t<dep\n<... @27:2) at org.codehaus.plexus.util.xml.pull.MXParser.parseStartTag(MXParser.java:2226) at org.codehaus.plexus.util.xml.pull.MXParser.nextImpl(MXParser.java:1356) at org.codehaus.plexus.util.xml.pull.MXParser.next(MXParser.java:1319) at org.codehaus.plexus.util.xml.pull.MXParser.nextTag(MXParser.java:1305) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.parseModel(MavenXpp3Reader.java:2072) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:3872) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:595) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:609) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:638) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.parseAndCache(MavenProjectCache.java:160) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.check(MavenProjectCache.java:112) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.getProblemsFor(MavenProjectCache.java:105) at org.eclipse.lemminx.extensions.maven.MavenDiagnosticParticipant.doDiagnostics(MavenDiagnosticParticipant.java:49) at org.eclipse.lemminx.services.XMLDiagnostics.doExtensionsDiagnostics(XMLDiagnostics.java:58) at org.eclipse.lemminx.services.XMLDiagnostics.doDiagnostics(XMLDiagnostics.java:41) at org.eclipse.lemminx.services.XMLLanguageService.doDiagnostics(XMLLanguageService.java:161) at org.eclipse.lemminx.services.XMLLanguageService.publishDiagnostics(XMLLanguageService.java:170) at org.eclipse.lemminx.XMLTextDocumentService.validate(XMLTextDocumentService.java:512) at org.eclipse.lemminx.XMLTextDocumentService.lambda$triggerValidationFor$26(XMLTextDocumentService.java:505) at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:714) at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:479) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

[Error - δΈ‹εˆ2:08:26] Jan 06, 2021 02:08:26 org.eclipse.lemminx.extensions.maven.MavenProjectCache parseAndCache() Message: expected START_TAG or END_TAG not TEXT (position: TEXT seen ...\n\t\tj\n\t</... @28:4) org.codehaus.plexus.util.xml.pull.XmlPullParserException: expected START_TAG or END_TAG not TEXT (position: TEXT seen ...\n\t\tj\n\t</... @28:4) at org.codehaus.plexus.util.xml.pull.MXParser.nextTag(MXParser.java:1309) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.parseModel(MavenXpp3Reader.java:2235) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:3872) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:595) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:609) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:638) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.parseAndCache(MavenProjectCache.java:160) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.check(MavenProjectCache.java:112) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.getProblemsFor(MavenProjectCache.java:105) at org.eclipse.lemminx.extensions.maven.MavenDiagnosticParticipant.doDiagnostics(MavenDiagnosticParticipant.java:49) at org.eclipse.lemminx.services.XMLDiagnostics.doExtensionsDiagnostics(XMLDiagnostics.java:58) at org.eclipse.lemminx.services.XMLDiagnostics.doDiagnostics(XMLDiagnostics.java:41) at org.eclipse.lemminx.services.XMLLanguageService.doDiagnostics(XMLLanguageService.java:161) at org.eclipse.lemminx.services.XMLLanguageService.publishDiagnostics(XMLLanguageService.java:170) at org.eclipse.lemminx.XMLTextDocumentService.validate(XMLTextDocumentService.java:512) at org.eclipse.lemminx.XMLTextDocumentService.lambda$triggerValidationFor$26(XMLTextDocumentService.java:505) at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:714) at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:479) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

[Error - δΈ‹εˆ2:08:26] Jan 06, 2021 02:08:26 org.eclipse.lemminx.extensions.maven.MavenProjectCache parseAndCache() Message: expected START_TAG or END_TAG not TEXT (position: TEXT seen ...\n\t\tju\n\t</... @28:4) org.codehaus.plexus.util.xml.pull.XmlPullParserException: expected START_TAG or END_TAG not TEXT (position: TEXT seen ...\n\t\tju\n\t</... @28:4) at org.codehaus.plexus.util.xml.pull.MXParser.nextTag(MXParser.java:1309) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.parseModel(MavenXpp3Reader.java:2235) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:3872) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:595) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:609) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:638) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.parseAndCache(MavenProjectCache.java:160) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.check(MavenProjectCache.java:112) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.getProblemsFor(MavenProjectCache.java:105) at org.eclipse.lemminx.extensions.maven.MavenDiagnosticParticipant.doDiagnostics(MavenDiagnosticParticipant.java:49) at org.eclipse.lemminx.services.XMLDiagnostics.doExtensionsDiagnostics(XMLDiagnostics.java:58) at org.eclipse.lemminx.services.XMLDiagnostics.doDiagnostics(XMLDiagnostics.java:41) at org.eclipse.lemminx.services.XMLLanguageService.doDiagnostics(XMLLanguageService.java:161) at org.eclipse.lemminx.services.XMLLanguageService.publishDiagnostics(XMLLanguageService.java:170) at org.eclipse.lemminx.XMLTextDocumentService.validate(XMLTextDocumentService.java:512) at org.eclipse.lemminx.XMLTextDocumentService.lambda$triggerValidationFor$26(XMLTextDocumentService.java:505) at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:714) at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:479) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

[Error - δΈ‹εˆ2:08:27] Jan 06, 2021 02:08:27 org.eclipse.lemminx.extensions.maven.MavenProjectCache parseAndCache() Message: expected START_TAG or END_TAG not TEXT (position: TEXT seen ...\n\t\tjun\n\t</... @28:4) org.codehaus.plexus.util.xml.pull.XmlPullParserException: expected START_TAG or END_TAG not TEXT (position: TEXT seen ...\n\t\tjun\n\t</... @28:4) at org.codehaus.plexus.util.xml.pull.MXParser.nextTag(MXParser.java:1309) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.parseModel(MavenXpp3Reader.java:2235) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:3872) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:595) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:609) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:638) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.parseAndCache(MavenProjectCache.java:160) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.check(MavenProjectCache.java:112) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.getProblemsFor(MavenProjectCache.java:105) at org.eclipse.lemminx.extensions.maven.MavenDiagnosticParticipant.doDiagnostics(MavenDiagnosticParticipant.java:49) at org.eclipse.lemminx.services.XMLDiagnostics.doExtensionsDiagnostics(XMLDiagnostics.java:58) at org.eclipse.lemminx.services.XMLDiagnostics.doDiagnostics(XMLDiagnostics.java:41) at org.eclipse.lemminx.services.XMLLanguageService.doDiagnostics(XMLLanguageService.java:161) at org.eclipse.lemminx.services.XMLLanguageService.publishDiagnostics(XMLLanguageService.java:170) at org.eclipse.lemminx.XMLTextDocumentService.validate(XMLTextDocumentService.java:512) at org.eclipse.lemminx.XMLTextDocumentService.lambda$triggerValidationFor$26(XMLTextDocumentService.java:505) at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:714) at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:479) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

[Error - δΈ‹εˆ2:08:28] Jan 06, 2021 02:08:28 org.eclipse.lemminx.extensions.maven.MavenProjectCache parseAndCache() Message: expected START_TAG or END_TAG not TEXT (position: TEXT seen ...\n\t\tjuni\n\t</... @28:4) org.codehaus.plexus.util.xml.pull.XmlPullParserException: expected START_TAG or END_TAG not TEXT (position: TEXT seen ...\n\t\tjuni\n\t</... @28:4) at org.codehaus.plexus.util.xml.pull.MXParser.nextTag(MXParser.java:1309) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.parseModel(MavenXpp3Reader.java:2235) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:3872) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:595) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:609) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:638) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.parseAndCache(MavenProjectCache.java:160) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.check(MavenProjectCache.java:112) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.getProblemsFor(MavenProjectCache.java:105) at org.eclipse.lemminx.extensions.maven.MavenDiagnosticParticipant.doDiagnostics(MavenDiagnosticParticipant.java:49) at org.eclipse.lemminx.services.XMLDiagnostics.doExtensionsDiagnostics(XMLDiagnostics.java:58) at org.eclipse.lemminx.services.XMLDiagnostics.doDiagnostics(XMLDiagnostics.java:41) at org.eclipse.lemminx.services.XMLLanguageService.doDiagnostics(XMLLanguageService.java:161) at org.eclipse.lemminx.services.XMLLanguageService.publishDiagnostics(XMLLanguageService.java:170) at org.eclipse.lemminx.XMLTextDocumentService.validate(XMLTextDocumentService.java:512) at org.eclipse.lemminx.XMLTextDocumentService.lambda$triggerValidationFor$26(XMLTextDocumentService.java:505) at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:714) at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:479) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

[Error - δΈ‹εˆ2:08:28] Jan 06, 2021 02:08:28 org.eclipse.lemminx.extensions.maven.MavenProjectCache parseAndCache() Message: expected START_TAG or END_TAG not TEXT (position: TEXT seen ...\n\t\tjunit\n\t</... @28:4) org.codehaus.plexus.util.xml.pull.XmlPullParserException: expected START_TAG or END_TAG not TEXT (position: TEXT seen ...\n\t\tjunit\n\t</... @28:4) at org.codehaus.plexus.util.xml.pull.MXParser.nextTag(MXParser.java:1309) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.parseModel(MavenXpp3Reader.java:2235) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:3872) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:595) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:609) at org.apache.maven.model.io.xpp3.MavenXpp3Reader.read(MavenXpp3Reader.java:638) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.parseAndCache(MavenProjectCache.java:160) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.check(MavenProjectCache.java:112) at org.eclipse.lemminx.extensions.maven.MavenProjectCache.getProblemsFor(MavenProjectCache.java:105) at org.eclipse.lemminx.extensions.maven.MavenDiagnosticParticipant.doDiagnostics(MavenDiagnosticParticipant.java:49) at org.eclipse.lemminx.services.XMLDiagnostics.doExtensionsDiagnostics(XMLDiagnostics.java:58) at org.eclipse.lemminx.services.XMLDiagnostics.doDiagnostics(XMLDiagnostics.java:41) at org.eclipse.lemminx.services.XMLLanguageService.doDiagnostics(XMLLanguageService.java:161) at org.eclipse.lemminx.services.XMLLanguageService.publishDiagnostics(XMLLanguageService.java:170) at org.eclipse.lemminx.XMLTextDocumentService.validate(XMLTextDocumentService.java:512) at org.eclipse.lemminx.XMLTextDocumentService.lambda$triggerValidationFor$26(XMLTextDocumentService.java:505) at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:714) at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:479) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

[Error - δΈ‹εˆ2:08:34] Jan 06, 2021 02:08:34 org.eclipse.lemminx.services.XMLCompletions collectInsideContent() Message: While performing ICompletionParticipant#onXMLContent java.util.concurrent.CancellationException: Text document version '9' has changed to version '13. at org.eclipse.lemminx.commons.TextDocumentVersionChecker.checkCanceled(TextDocumentVersionChecker.java:41) at org.eclipse.lemminx.commons.MultiCancelChecker.checkCanceled(MultiCancelChecker.java:33) at org.eclipse.lemminx.dom.DOMDocument.checkCanceled(DOMDocument.java:944) at org.eclipse.lemminx.dom.DOMDocument.positionAt(DOMDocument.java:89) at org.eclipse.lemminx.utils.XMLPositionUtility.createRange(XMLPositionUtility.java:862) at org.eclipse.lemminx.extensions.maven.MavenCompletionParticipant.internalCollectRemoteGAVCompletion(MavenCompletionParticipant.java:562) at org.eclipse.lemminx.extensions.maven.MavenCompletionParticipant.onXMLContent(MavenCompletionParticipant.java:287) at org.eclipse.lemminx.services.XMLCompletions.collectInsideContent(XMLCompletions.java:764) at org.eclipse.lemminx.services.XMLCompletions.doComplete(XMLCompletions.java:244) at org.eclipse.lemminx.services.XMLLanguageService.doComplete(XMLLanguageService.java:147) at org.eclipse.lemminx.XMLTextDocumentService.lambda$completion$1(XMLTextDocumentService.java:203) at java.base/java.util.concurrent.CompletableFuture.biApply(CompletableFuture.java:1236) at java.base/java.util.concurrent.CompletableFuture$BiApply.tryFire(CompletableFuture.java:1205) at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:479) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

[Info - δΈ‹εˆ2:08:39] Jan 06, 2021 02:08:39 org.eclipse.lemminx.extensions.maven.searcher.RemoteRepositoryIndexSearcher updateIndex() Message: Updating Index for https://repo.maven.apache.org/maven2... [Info - δΈ‹εˆ2:08:41] Jan 06, 2021 02:08:41 org.eclipse.lemminx.extensions.maven.searcher.RemoteRepositoryIndexSearcher$1 transferStarted() Message: Downloadingnexus-maven-repository-index.properties [Info - δΈ‹εˆ2:08:41] Jan 06, 2021 02:08:41 org.eclipse.lemminx.extensions.maven.searcher.RemoteRepositoryIndexSearcher$1 transferCompleted() Message: Done downloading nexus-maven-repository-index.properties [Info - δΈ‹εˆ2:08:41] Jan 06, 2021 02:08:41 org.eclipse.lemminx.extensions.maven.searcher.RemoteRepositoryIndexSearcher lambda$updateIndex$6() Message: Update successful for https://repo.maven.apache.org/maven2 [Info - δΈ‹εˆ2:08:41] Jan 06, 2021 02:08:41 org.eclipse.lemminx.extensions.maven.searcher.RemoteRepositoryIndexSearcher lambda$updateIndex$6() Message: No update needed, index is up to date!

Eskibear avatar Jan 06 '21 06:01 Eskibear

@mickaelistria @datho7561 have you some ideas?

angelozerr avatar Jan 06 '21 17:01 angelozerr

@Eskibear @angelozerr I get the same error when following those steps. If I open completion with Ctrl+Space, then type junit, the dependency completion items shows up.

datho7561 avatar Jan 06 '21 18:01 datho7561

The XmlPullParserException can be ignored. Please open a bug to lemminx-maven in order to silence them as they are expected while user is typing. The java.util.concurrent.CancellationException: Text document version '9' has changed to version '13. is more intriguing. I'm wondering whether this exception could cause the extension/completion participant to fail after?

mickaelistria avatar Jan 06 '21 20:01 mickaelistria

The java.util.concurrent.CancellationException: Text document version '9' has changed to version '13. is more intriguing. I'm wondering whether this exception could cause the extension/completion participant to fail after?

Good catch! I create a PR to avoid having this issue in https://github.com/eclipse/lemminx/pull/956

@datho7561 could you review my PR please and check if it fixes the problem please.

angelozerr avatar Jan 07 '21 05:01 angelozerr

After some discussion, it seems there's 2 remaining issues (but feel free to mention others)

  1. completion performance

Not only on initial setup of local data (take some time but happens in background), but also on every trigger of completion, which can take ~2-3s . I believe this will be resolved with eclipse/lemminx-maven#193 which should now permit extensions to set xml.maven.index.skip=true. This should probably be the default as it makes the completion instantaneous. Solutions to eclipse/lemminx-maven#184 may also improve things.

  1. Size of lemminx-maven extension

The total size of all jars needed to run lemminx-maven is ~16MB . However, about 11MB are directly in common with m2e.maven.{runtime,index} which is part of JDT-LS (vscode-java). I believe the shared jars are likely identical since both JDT-LS and lemminx-maven could use the same version of m2e. There are 2 approaches that came up in dealing with this :

a) Simply download the dependencies (or maybe all of lemminx-maven) from some remote location at runtime. The XML LS would probably need to be restarted and this doesn't reduce the total install size. However, if we don't care about installation size, and just the size of the vscode-maven extension on download, then this should work nicely.

b) Allow resolving dependencies from Maven central and refer to them in the local repository. In this way they could actually be shared, thus reducing the installation size.

Thoughts ?

rgrunber avatar Feb 03 '21 20:02 rgrunber

After some discussion on redhat-developer/vscode-xml#417 , in considering lemminx-maven for inclusion, it would be ideal for the client to set configuration option xml.maven.index.skip to true. This should address the performance issues in (1) from above. I don't think there's a need to expose this option to users for now.

rgrunber avatar Feb 17 '21 15:02 rgrunber

As an update, in https://github.com/eclipse/lemminx-maven/issues/232 , lemminx-maven has added support for Maven Central search API for artifact queries. ~~This should also (eventually) eliminate the dependence on Lucene, which represented 5MB (30%) of the total size.~~

Update : The lemminx-maven zip has gone from 16MB to 9.8MB since removal of Maven Indexer.

So looks like the issues blocking this investigation from https://github.com/microsoft/vscode-maven/issues/47#issuecomment-772800525 have been addressed.

rgrunber avatar Jan 19 '22 15:01 rgrunber

Any update. This would really make editing POM files easier

ansgarkroger avatar Jun 23 '23 09:06 ansgarkroger

I wrote a post at https://rgrunber.github.io/vscode/xml/maven/2023/07/28/vscode-xml-pomfile-support.html trying to summarize what I see as nice features provided by vscode-xml + lemminx-maven. Since a lot of the vscode-xml examples are general to all XML, I've done image/gif examples in pom files to make it clearer. Otherwise I've linked directly to the documentation that explains the feature.

rgrunber avatar Jul 28 '23 16:07 rgrunber