Skip to content
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

Support JPQL syntax #1114

Closed
cassis163 opened this issue Sep 28, 2023 · 12 comments
Closed

Support JPQL syntax #1114

cassis163 opened this issue Sep 28, 2023 · 12 comments
Assignees
Labels
for: eclipse something that is specific for Eclipse for: vscode something that is specific for VSCode theme: code completion theme: validation type: enhancement

Comments

@cassis163
Copy link

Expected Behavior
IntelliJ has built-in support for JPQL that comes with type-safety. I would expect this feature to be included in the Spring Boot extension pack, since JPQL is used extensively in most Spring Boot projects. What I expect the extension pack to do is to add syntax highlighting, linting and intellisense (copy what IntelliJ does).

Current Behavior
JPQL queries are shown as plain strings at the moment. There is not much to be said about it.

Context
I really like coding in VSCode, but writing JPQL queries has been a pain due to lack of support compared to IntelliJ. Not being able to see type-safety related errors and overal highlighting makes writing JPQL a lot harder than it should be.

@BoykoAlex
Copy link
Contributor

The only difficulty is creating from scratch a TextMate grammar for JPQL. Alternatively, we'd need to find one out there on the web as it is likely someone has created it. I have only managed to find the ANTLR grammar for JPQL but this serves a different purpose and doesn't look like it can be converted to TextMate grammar.
In any case if we are to implement support for JPQL it'd be in a dedicated VSCode extension.

@martinlippert
Copy link
Member

Step one here would be to do syntax highlighting. Once we figured out how to do this, we should probably apply this solution to even more cases where some other "language" is embedded in annotation params, like SpEL.

@martinlippert
Copy link
Member

The Spring Data JPA project itself contains parser implementations for all the various query languages: https://github.com/spring-projects/spring-data-jpa/tree/main/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query

Probably worth to re-use parts of this if we dive into deeper "language" support here, like auto-completion, syntax checking, etc.

For SpEL, we already use the Spring built-in SpEL parser to check syntax (but not to do syntax highlighting yet).

@martinlippert
Copy link
Member

Another pointer: I saw the Java support in VSCode supports syntax highlighting for the content of text blocks in Java, e.g. highlighting the string inside a text block as YAML.

@BoykoAlex BoykoAlex self-assigned this Apr 6, 2024
@BoykoAlex BoykoAlex added this to the 4.22.1.RELEASE milestone Apr 6, 2024
@BoykoAlex
Copy link
Contributor

Here is how sytax highlighting for JPQL looks like in VSCode

Inside Java code:
Screenshot 2024-04-14 at 19 31 04

Inside jpa-named-queries.properties file:
Screenshot 2024-04-14 at 19 31 11

Eclipse support for Semantic Tokens from LSP is very limited and buggy... Only the jpa-named-queries.properties file syntax is supported but there are limitations bugs :-
Screenshot 2024-04-14 at 19 32 05

@martinlippert I'm thinking of folding in what I have at the moment. No SPEL syntax highlighting (embedded SPEL) and limitations for Eclipse.

@martinlippert
Copy link
Member

@BoykoAlex Looks great and yes, let's fold that in.

@BoykoAlex
Copy link
Contributor

JPQL part went in with: 95b8e2f

Left:

  1. SPEL inside queries.
  2. HQL if hibernate core is on the classpath
  3. SPEL for HQL queries.

@BoykoAlex
Copy link
Contributor

HQL support: 8b4abbc

Only SPEL support left

@martinlippert
Copy link
Member

martinlippert commented Apr 17, 2024

I tried the latest Spring Boot Tools pre-release on VSCode with an older petclinic project, and I am seeing this a lot in the output view of VSCode:

[Error - 11:24:26] Request textDocument/semanticTokens/full failed.
  Message: Internal error.
  Code: -32603 
java.util.concurrent.CompletionException: java.lang.NullPointerException: Cannot invoke "org.springframework.ide.vscode.commons.util.text.TextDocument.getLanguageId()" because "doc" is null
	at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture.completeThrowable(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture$Completion.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: Cannot invoke "org.springframework.ide.vscode.commons.util.text.TextDocument.getLanguageId()" because "doc" is null
	at org.springframework.ide.vscode.commons.languageserver.composable.CompositeLanguageServerComponents$7.findHandler(CompositeLanguageServerComponents.java:261)
	at org.springframework.ide.vscode.commons.languageserver.composable.CompositeLanguageServerComponents$7.semanticTokensFull(CompositeLanguageServerComponents.java:245)
	at org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocumentService.lambda$semanticTokensFull$11(SimpleTextDocumentService.java:464)
	... 5 more

@BoykoAlex
Copy link
Contributor

NPE fix is included in 2543bdf

@martinlippert
Copy link
Member

I can see the syntax highlighting showing up nicely after updating to the latest pre-release build of the Spring Boot Tools extension in VSCode. Great work.

We should probably close this issue as done as soon as the syntax highlighting parts are complete and create additional issues around diagnostics, enabling the semantic token highlighting for java files in Eclipse, auto-completion, etc.

@BoykoAlex
Copy link
Contributor

SPEL syntax highlighting moved to #1234. Closing this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
for: eclipse something that is specific for Eclipse for: vscode something that is specific for VSCode theme: code completion theme: validation type: enhancement
Projects
None yet
Development

No branches or pull requests

3 participants