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

request: Jet Brains Goland plugin #127

Closed
a-h opened this issue Aug 20, 2023 · 68 comments
Closed

request: Jet Brains Goland plugin #127

a-h opened this issue Aug 20, 2023 · 68 comments

Comments

@a-h
Copy link
Owner

a-h commented Aug 20, 2023

Since Goland now supports LSPs - it's possible to create a plugin for it.

https://blog.jetbrains.com/platform/2023/07/lsp-for-plugin-developers/

It has to be written in Java, but it's potentially not many lines of code. I don't use JetBrains IDEs myself day to day to test it though.

@PaluMacil
Copy link

Super pumped! I've never written Java or used the LSP on a programmatic level, but I use Goland for 100% of my Go code except where I'm writing some templ right now. I'll be able to test it out a bit for you.

@Crocmagnon
Copy link

I'd love to beta-test implementations if needed. I don't have experience with templ though, nor do I have extensive codebase to test in.
(currently listening to the Changelog Go Time podcast 😊)

@DRSchlaubi
Copy link

I predict that there will be a solution to this within the next 5 minutes

@topi314
Copy link

topi314 commented Sep 14, 2023

I quickly threw together this plugin: https://github.com/topi314/templ-goland
That being said it works, but there is sadly no syntax highlighting yet

I'd be happy to transfer this code to you and assist with the next steps to publish & co

@a-h
Copy link
Owner Author

a-h commented Sep 29, 2023

I realised that Jet Brains have a programme where you can ask for a license to support open source development, so I applied for a license for @joerdav and I.

I can't think of a more fitting use case for the programme than to support building a plugin for Jet Brains!

I can use the trial for now, but haven't had chance to yet. Been working on a lot of other core improvements and PRs.

@topi314
Copy link

topi314 commented Sep 29, 2023

the Jetbrains LSP support is quit limiting right now
you can read more about it in this blog post https://blog.jetbrains.com/platform/2023/07/lsp-for-plugin-developers/

for a better experience custom language support https://plugins.jetbrains.com/docs/intellij/custom-language-support.html would be awesome

@DRSchlaubi
Copy link

Also worth reading is this guide written by the intellij rust team: https://github.com/intellij-rust/intellij-rust/blob/master/CONTRIBUTING.md#project-structure

@adasauce
Copy link

adasauce commented Oct 4, 2023

fwiw if you just import the vscode extension as a textmade bundle, it recognizes the .tmlanguage file in the syntax directory and does ... something with it. without it enabled it's just white text.
swappy-20231004_164410

not sure if that actually gets us any closer to the plugin working properly or if it will save work.


e: just removed the top level source.go include to make sure that include imports were working and it un-highlighted the package keyword. so that much is indeed working.

@alexisvisco
Copy link

alexisvisco commented Oct 6, 2023

IMO creating a custom language based on the feature called MultiHostInjector might be a brilliant solution

https://plugins.jetbrains.com/docs/intellij/language-injection.html#multihostinjector

The challenge is inside the html, I have no clue how to do it to have go expression works

@topi314
Copy link

topi314 commented Oct 6, 2023

I'd say we just wait for jetbrains to bring more LSP support :)

@alexisvisco
Copy link

alexisvisco commented Oct 12, 2023

I don't think it's a good approach with a IDE like jetbrain because you lose all custom go and html features that intellij brings
.

@Evert-Arends
Copy link

This is almost a blocker to use templ 😢 I'll install vscode for the template side of things for now.

@joerdav
Copy link
Collaborator

joerdav commented Oct 26, 2023

I've just installed GoLand, hopefully can make some progress here.

@joerdav
Copy link
Collaborator

joerdav commented Oct 26, 2023

(making no promises about it being fast to be complete, it involves writing kotlin)

@viktorvoltaire
Copy link

(making no promises about it being fast to be complete, it involves writing kotlin)

I’ve never written an LSP or a custom language based on the feature called MultiHostInjector. But I know kotlin if you need help :)

@joerdav
Copy link
Collaborator

joerdav commented Oct 30, 2023

@viktorvoltaire Thanks! I'll be sure to reach out if I hit a road block.

Thought this was worth a quick update. Last week I got the LSP working, I now need to work on defining the syntax highlighter, I wanted to re-use the treesitter definitions in https://github.com/vrischmann/tree-sitter-templ but I'm not sure it's possible!

Here's a sneak peak:
image

image

@joerdav
Copy link
Collaborator

joerdav commented Nov 1, 2023

The syntax highlighting is proving a bit of a bigger task, I want to avoid re-implementing the Go parser/lexer in this plugin, but need to do some more learning about intellij plugins to figure it out!

I propose that we ship a version 1 of the plugin with just LSP support and no syntax highlighting for now.
@a-h should we put this in a new org, or under your github account so it's an officially maintained plugin?

@mohdaqib57
Copy link

is there any planned release date for Goland plugin? This is a blocker for me as I only used Goland IDE

@Evert-Arends
Copy link

@mohdaqib57 I have used templ in Goland for the past week, it does not have to be a blocker, I keep vscode open just for the .templ files but I noticed that I use it less and less, the syntax is really simple.

On a side note, I really like the templating language, there's a small "wtf" curve, but I think I got over the steepest part now. Thanks @joerdav and @a-h for the effort and ofc for this plugin. Support is adoption, this is going to be big :)

@a-h
Copy link
Owner Author

a-h commented Nov 1, 2023

I think it makes sense to ship without syntax highlighting, and add that next.

I've invited you to a new org @joerdav, we can work out how to migrate the a-h/templ library to it without breaking everything over time, and I'll move the templ-vscode over to it, since that can move without breaking Go module imports.

@Evert-Arends - I'd like to know what the wtf curve was so we can work on smoothing it out (in a discussion or other issue to avoid overloading this thread). It's your first few minutes with a tool that make you decide whether you'll stick with it. 😁

@Crocmagnon
Copy link

I think it makes sense to ship without syntax highlighting, and add that next.

+1. This way you’ll also be able to collect feedback earlier.

@0x090909
Copy link

0x090909 commented Nov 8, 2023

+1

@a-h
Copy link
Owner Author

a-h commented Nov 8, 2023

@0x090909 - please use the emoji responses to express +1 instead of adding a comment.

Adding a comment results in everyone that's subscribed to the issue receiving an update notification.

Thanks!

@joerdav
Copy link
Collaborator

joerdav commented Nov 10, 2023

I've implemented a very simple and lazy goland plugin: https://plugins.jetbrains.com/plugin/23088-templ

It's under review by jetbrains at the moment, so won't be installable, unless done so manually from the zip file: https://github.com/templ-go/templ-jetbrains/releases/tag/v0.0.5

It uses the experimental LSP feature, so I didn't have to rewrite the completion features.

It uses the textmate parser for syntax highlighting, so I only had to provide colors for each token, but didn't have to re-implement the parser.

2 lazy approaches, but it seems to get the job done!

@0x090909
Copy link

0x090909 commented Nov 10, 2023 via email

@joerdav
Copy link
Collaborator

joerdav commented Nov 10, 2023

To an extent @0x090909 :

image

@jonerer
Copy link
Contributor

jonerer commented Nov 10, 2023

@0x090909 yes it seems to work. please try it out before posting, or see the attached screenshots

Great work @joerdav. A few notes:

  • Mousing over a type doesn't show any info, just "Cannot find declaration to go to".
  • Same for ctrl-clicking a @component in the HTML, "Cannot find declaration to go to"
  • It would be great if the generated files were merged in the project view. I don't know what it's called, but JetBrains has a feature that merges for instance ".ts" files with their generated ".js" files into one item in the left hand list.

Not sure if I need to start the LSP manually or so? Or if I can find any debug logs

I'm on Goland 2023.2.4. Also tried on Goland 2023.2.1

@joerdav
Copy link
Collaborator

joerdav commented Nov 10, 2023

@jonerer The LSP should start on it's own. I've added a preferences menu, so you should be able to specify your templ binary location if it can't be found automatically.

@joerdav
Copy link
Collaborator

joerdav commented Nov 10, 2023

image

@joerdav
Copy link
Collaborator

joerdav commented Nov 13, 2023

Turns out I messed up the settings page for the plugin (this is my first intellij plugin).

Please try this release: https://github.com/templ-go/templ-jetbrains/releases/tag/v0.0.6
(I'm not sure how quickly it'll appear on the marketplace)

@jonerer
Copy link
Contributor

jonerer commented Nov 13, 2023

@jonerer do you find any useful logs? If you follow this: https://intellij-support.jetbrains.com/hc/en-us/articles/207241085-Locating-IDE-log-files

They should be in idea.log

I'm on Ubuntu. Installed v0.0.6 via Marketplace (seems to release quickly)

Idea logs show:

2023-11-13 21:52:21,809 [   2677]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@go_htmx(RUNNING;0): Starting server
2023-11-13 21:52:21,811 [   2679]   INFO - #c.i.p.l.a.LspServerDescriptor - TemplLspServerDescriptor@go_htmx: starting LSP server: /home/jon/go/bin/templ [lsp]
2023-11-13 21:52:21,908 [   2776]   WARN - #o.j.p.t.l.s.SyntaxNodeDescriptor - Can't find repository 12
2023-11-13 21:52:21,909 [   2777]   WARN - #o.j.p.t.l.s.SyntaxNodeDescriptor - Can't find repository 19
2023-11-13 21:52:21,923 [   2791]   INFO - #c.i.p.l.i.c.LspServerProcessListener - LSP server process started: /home/jon/go/bin/templ lsp
2023-11-13 21:52:21,925 [   2793]   INFO - #c.i.p.l.i.c.LspServerProcessListener - LSP server process terminated, exit code = 1, command line: /home/jon/go/bin/templ lsp
2023-11-13 21:52:21,943 [   2811]   WARN - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@go_htmx(RUNNING;0): Failed to start server
java.lang.RuntimeException: LSP server failed to initialize
	at com.intellij.platform.lsp.impl.connector.Lsp4jServerConnector.s(Lsp4jServerConnector.java:119)
	at com.intellij.platform.lsp.impl.connector.Lsp4jServerConnector.connect(Lsp4jServerConnector.java:88)
	at com.intellij.platform.lsp.impl.LspServerImpl.k(LspServerImpl.java:379)
	at com.intellij.openapi.application.impl.ApplicationImpl$2.run(ApplicationImpl.java:272)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: org.eclipse.lsp4j.jsonrpc.JsonRpcException: java.io.IOException: Stream closed
	at org.eclipse.lsp4j.jsonrpc.json.StreamMessageConsumer.consume(StreamMessageConsumer.java:72)
	at org.eclipse.lsp4j.jsonrpc.RemoteEndpoint.request(RemoteEndpoint.java:161)
	at org.eclipse.lsp4j.jsonrpc.services.EndpointProxy.invoke(EndpointProxy.java:91)
	at jdk.proxy2/jdk.proxy2.$Proxy127.initialize(Unknown Source)
	at com.intellij.platform.lsp.impl.connector.Lsp4jServerConnector.s(Lsp4jServerConnector.java:102)
	... 12 more
Caused by: java.io.IOException: Stream closed
	at java.base/java.lang.ProcessBuilder$NullOutputStream.write(ProcessBuilder.java:445)
	at java.base/java.io.OutputStream.write(OutputStream.java:162)
	at java.base/java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:81)
	at java.base/java.io.BufferedOutputStream.flush(BufferedOutputStream.java:142)
	at org.eclipse.lsp4j.jsonrpc.json.StreamMessageConsumer.consume(StreamMessageConsumer.java:69)
	... 16 more
2023-11-13 21:52:21,948 [   2816]   WARN - #c.i.p.l.i.c.Lsp4jServerConnector - TemplLspServerDescriptor@go_htmx: `shutdown` request failed: java.util.concurrent.ExecutionException: org.eclipse.lsp4j.jsonrpc.JsonRpcException: java.io.IOException: Stream closed
2023-11-13 21:52:21,949 [   2817]   INFO - org.eclipse.lsp4j.jsonrpc.RemoteEndpoint - Failed to send notification message.
org.eclipse.lsp4j.jsonrpc.JsonRpcException: java.io.IOException: Stream closed
	at org.eclipse.lsp4j.jsonrpc.json.StreamMessageConsumer.consume(StreamMessageConsumer.java:72)
	at org.eclipse.lsp4j.jsonrpc.RemoteEndpoint.notify(RemoteEndpoint.java:126)
	at org.eclipse.lsp4j.jsonrpc.services.EndpointProxy.invoke(EndpointProxy.java:88)
	at jdk.proxy2/jdk.proxy2.$Proxy127.exit(Unknown Source)
	at com.intellij.platform.lsp.impl.connector.Lsp4jServerConnector.shutdownExitDisconnect(Lsp4jServerConnector.java:151)
	at com.intellij.platform.lsp.impl.LspServerImpl.s(LspServerImpl.java:406)
	at com.intellij.platform.lsp.impl.LspServerImpl.cleanupShutdownAndExit(LspServerImpl.java:415)
	at com.intellij.platform.lsp.impl.LspServerImpl.k(LspServerImpl.java:388)
	at com.intellij.openapi.application.impl.ApplicationImpl$2.run(ApplicationImpl.java:272)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.io.IOException: Stream closed
	at java.base/java.lang.ProcessBuilder$NullOutputStream.write(ProcessBuilder.java:445)
	at java.base/java.io.OutputStream.write(OutputStream.java:162)
	at java.base/java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:81)
	at java.base/java.io.BufferedOutputStream.flush(BufferedOutputStream.java:142)
	at org.eclipse.lsp4j.jsonrpc.json.StreamMessageConsumer.consume(StreamMessageConsumer.java:69)
	... 17 more

If I try to run it by myself in a terminal it works:

➜  go_htmx git:(master) ✗ /home/jon/go/bin/templ lsp
^C%                                                                             
➜  go_htmx git:(master) ✗ templ version
0.2.428

@jonerer
Copy link
Contributor

jonerer commented Nov 14, 2023

I was able to reproduce my problem in a terminal. For some reason it seems to happen because GoLand isn't run with the same environment variables that my terminal has. My terminal is set up via ~/.zshrc. I typically run GoLand from the shortcut created by JetBrains Toolbox. Unsure why, but the problem seems to be inside templ lsp. Templ lsp quits immediately without output when I run it without my typical PATH, with no feedback. I guess it gets sad that there is no go binary?

➜ Desktop env -i bash --norc --noprofile
bash-5.1$ cd /home/jon/prog/go/src/go_htmx
bash-5.1$ /home/jon/go/bin/templ lsp
bash-5.1$ echo $?
1
bash-5.1$ which go
bash-5.1$

I guess that Templ isn't really at fault here, but it is a situation that likely many will face, and that could use some improvements in DX. Notes: It doesn't happen in VS Code (I also start VS Code from a shortcut icon, but somehow it sets up the environment I guess). But for GoLand, golang has been set up via the built-in SDK management functionality of the JetBrains IDE (in settings, Go->GOROOT).

EDIT: managed to get a stack trace:

bash-5.1$ /home/jon/go/bin/templ lsp -log debug
bash-5.1$ cat debug                            
{"level":"info","ts":"2023-11-14T09:35:44+01:00","caller":"lspcmd/main.go:74","msg":"lsp: starting up..."}
{"level":"info","ts":"2023-11-14T09:35:44+01:00","caller":"lspcmd/main.go:81","msg":"lsp: starting gopls..."}
{"level":"error","ts":"2023-11-14T09:35:44+01:00","caller":"lspcmd/main.go:87","msg":"failed to start gopls","error":"cannot find gopls on the path (\"\"), you can install it with `go install golang.org/x/tools/gopls@latest`","stacktrace":"github.c
[...]

I'd say this is likely what happens in GoLand as well.

EDIT2: Maybe templ lsp should look in $HOME/go/bin, in case it can't find gopls on the $PATH? Or look in the same directory as the templ binary finds itself in

@a-h
Copy link
Owner Author

a-h commented Nov 14, 2023

Good idea on probing some directories @jonerer, I've done that.

@joerdav
Copy link
Collaborator

joerdav commented Nov 14, 2023

@jonerer let me know if that update to templ fixes your issue!

@jonerer
Copy link
Contributor

jonerer commented Nov 14, 2023

Tried it, and /home/jon/go/bin/templ lsp works fine :)

But there seem to be other symptoms of the same problem. The logs show:

2023-11-14 13:28:39,779 [   2606]   INFO - #c.i.p.l.i.c.Lsp4jServerConnector - TemplLspServerDescriptor@go_htmx: server initialized, name = gopls, version = {"GoVersion":"go1.21.0","Path":"golang.org/x/tools/gopls","Main":{"Path":"golang.org/x/tools/gopls","Version":"v0.14.1","Sum":"h1:XaTETpi7Q67XO8nftquJitcx+9c2bPclO8Kz2sBVvec=","Replace":null},"Deps":[{"Path":"github.com/BurntSushi/toml","Version":"v1.2.1","Sum":"h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=","Replace":null},{"Path":"github.com/google/go-cmp","Version":"v0.5.9","Sum":"h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=","Replace":null},{"Path":"github.com/sergi/go-diff","Version":"v1.1.0","Sum":"h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=","Replace":null},{"Path":"golang.org/x/exp/typeparams","Version":"v0.0.0-20221212164502-fae10dda9338","Sum":"h1:2O2DON6y3XMJiQRAS1UWU+54aec2uopH3x7MAiqGW6Y=","Replace":null},{"Path":"golang.org/x/mod","Version":"v0.13.0","Sum":"h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY=","Replace":null},{"Path":"golang.org/x/sync","Version":"v0.4.0","Sum":"h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=","Replace":null},{"Path":"golang.org/x/sys","Version":"v0.13.0","Sum":"h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=","Replace":null},{"Path":"golang.org/x/telemetry","Version":"v0.0.0-20231011160506-788d5629a052","Sum":"h1:1baVNneD/IRxmu8JQdBuki78zUqBtZxq8smZXQj0X2Y=","Replace":null},{"Path":"golang.org/x/text","Version":"v0.13.0","Sum":"h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=","Replace":null},{"Path":"golang.org/x/tools","Version":"v0.14.1-0.20231026192422-8b5abd452b28","Sum":"h1:5YgdZAe2w0x3Xrjv0+GXrI0jvm7qCQK/ySGFfiEHMfU=","Replace":null},{"Path":"golang.org/x/vuln","Version":"v1.0.1","Sum":"h1:KUas02EjQK5LTuIx1OylBQdKKZ9jeugs+HiqO5HormU=","Replace":null},{"Path":"honnef.co/go/tools","Version":"v0.4.5","Sum":"h1:YGD4H+SuIOOqsyoLOpZDWcieM28W47/zRO7f+9V3nvo=","Replace":null},{"Path":"mvdan.cc/gofumpt","Version":"v0.4.0","Sum":"h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM=","Replace":null},{"Path":"mvdan.cc/xurls/v2","Version":"v2.4.0","Sum":"h1:tzxjVAj+wSBmDcF6zBB7/myTy3gX9xvi8Tyr28AuQgc=","Replace":null}],"Settings":[{"Key":"-buildmode","Value":"exe"},{"Key":"-compiler","Value":"gc"},{"Key":"DefaultGODEBUG","Value":"panicnil=1"},{"Key":"CGO_ENABLED","Value":"1"},{"Key":"CGO_CFLAGS","Value":""},{"Key":"CGO_CPPFLAGS","Value":""},{"Key":"CGO_CXXFLAGS","Value":""},{"Key":"CGO_LDFLAGS","Value":""},{"Key":"GOARCH","Value":"amd64"},{"Key":"GOOS","Value":"linux"},{"Key":"GOAMD64","Value":"v1"}],"Version":"v0.14.1"}
2023-11-14 13:28:39,780 [   2607]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@go_htmx(RUNNING;0): Loading packages...
2023-11-14 13:28:39,783 [   2610]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@go_htmx(RUNNING;0): Error loading packages: err: go command required, not found: exec: "go": executable file not found in $PATH: stderr: 
2023-11-14 13:28:39,783 [   2610]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@go_htmx(RUNNING;0): Error loading workspace folders (expected 1, got 0)
failed to load view for file:///home/jon/prog/go/src/go_htmx: err: go command required, not found: exec: "go": executable file not found in $PATH: stderr: 

2023-11-14 13:28:39,804 [   2631]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@go_htmx(RUNNING;2): Loading packages...
2023-11-14 13:28:39,805 [   2632]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@go_htmx(RUNNING;2): Error loading packages: err: go command required, not found: exec: "go": executable file not found in $PATH: stderr: 
2023-11-14 13:28:39,805 [   2632]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@go_htmx(RUNNING;2): Error loading workspace folders (expected 1, got 0)
failed to load view for file:///home/jon/prog/go/src/go_htmx/views: err: go command required, not found: exec: "go": executable file not found in $PATH: stderr: 

2023-11-14 13:28:39,811 [   2638]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@go_htmx(RUNNING;2): Loading packages...
2023-11-14 13:28:39,812 [   2639]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@go_htmx(RUNNING;2): Error loading packages: err: go command required, not found: exec: "go": executable file not found in $PATH: stderr: 
2023-11-14 13:28:39,812 [   2639]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@go_htmx(RUNNING;2): Error loading workspace folders (expected 1, got 0)
failed to load view for file:///home/jon/prog/go/src/go_htmx/views: err: go command required, not found: exec: "go": executable file not found in $PATH: stderr: 

[...]
2023-11-14 13:29:15,342 [  38169]   WARN - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@go_htmx(RUNNING;2): Error response from server: org.eclipse.lsp4j.jsonrpc.ResponseErrorException: no views in session
2023-11-14 13:29:16,093 [  38920]   WARN - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@go_htmx(RUNNING;2): Error response from server: org.eclipse.lsp4j.jsonrpc.ResponseErrorException: no views in session
2023-11-14 13:29:17,264 [  40091]   WARN - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@go_htmx(RUNNING;2): Error response from server: org.eclipse.lsp4j.jsonrpc.ResponseErrorException: no views in session

It also shows a bit more visually:

Screenshot from 2023-11-14 13-30-01

FWIW autoformatting works fine in .go files, and I can build the project. So goland knows where the "go" binary is. A workaround is to launch goland from my zsh shell, that has all the env variables set up

@joerdav
Copy link
Collaborator

joerdav commented Nov 14, 2023

Okay, this sounds like a plugin issue, I'll find a way to make it find the go binary. And maybe make it configurable too.

@xerullian
Copy link

Love the work you all are doing on this plugin! I was able to get it installed without too much hassle. Go code auto-completion appears to be working. Though I am seeing some inconsistencies with syntax error reporting.

Using GoLand on Xero Linux (Arch distro). I installed gopls with my package manager, so it handled the path setup.


Is it expected that this plugin should auto-complete HTML tags in .templ files, or is this handled by a different part of GoLand?

I had HTML auto-completion working when I associated .templ files with Go template files in GoLand. I removed that association before installing this plugin so it wouldn't break anything. When I try that same association, GoLand states .templ files are already associated with some sort of Go templates. I've looked through all the file associations and don't see .templ anywhere.

File Types reference for GoLand setting
Goland_file_types_go_html_wildcard_1
Goland_file_types_go_html_wildcard_2

@joerdav
Copy link
Collaborator

joerdav commented Nov 14, 2023

I think plugins can define file associated that aren't configurable, and the templ plugin at the moment claims templ files at the moment.

I know that there is some functionality in the templ LSP for HTML completion, but the intellij LSP support is quite new, so we may be using a feature that isn't supported yet in intellij LSP.

Although I believe the snippets use the completion feature, which intellij should support: https://blog.jetbrains.com/platform/2023/07/lsp-for-plugin-developers/#supported-features

@a-h
Copy link
Owner Author

a-h commented Nov 14, 2023

I just added this code to the templ-vscode plugin to do a bit more looking around for the templ executable, and to display a decent error message if it can't be found. I think a similar thing might help with the JetBrains extension.

templ-go/templ-vscode@47fb4ef

@joerdav
Copy link
Collaborator

joerdav commented Nov 15, 2023

I'll add these locations to the goland plugin. I think the most recent issue that @jonerer is encountering though is that the go command cannot be found by templ.

@joerdav
Copy link
Collaborator

joerdav commented Nov 15, 2023

@jonerer It's possible that his is related: golang/vscode-go#2499

It could be a permissions issue of the go executable.

@ziganagelj
Copy link

ziganagelj commented Nov 17, 2023

@joerdav Im still having this issues (MacOs), after manually adding the LSP path /Users/ziganagelj/go/bin/templ. Am i doing something wrong?

2023-11-17 13:58:31,408 [   4346]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@test(RUNNING;0): Starting server
2023-11-17 13:58:31,411 [   4349]   INFO - #c.i.p.l.a.LspServerDescriptor - TemplLspServerDescriptor@test: starting LSP server: /Users/ziganagelj/go/bin/templ [lsp]
2023-11-17 13:58:31,442 [   4380]   INFO - #c.i.p.l.i.c.LspServerProcessListener - LSP server process started: /Users/ziganagelj/go/bin/templ lsp
2023-11-17 13:58:31,449 [   4387]   INFO - #c.i.p.l.i.c.LspServerProcessListener - LSP server process terminated, exit code = 1, command line: /Users/ziganagelj/go/bin/templ lsp
2023-11-17 13:58:31,454 [   4392]   WARN - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@test(RUNNING;0): Failed to start server
2023-11-17 13:58:31,456 [   4394]   WARN - #c.i.p.l.i.c.Lsp4jServerConnector - TemplLspServerDescriptor@test: shutdown request failed: java.util.concurrent.ExecutionException: org.eclipse.lsp4j.jsonrpc.JsonRpcException: java.io.IOException: Stream closed

2023-11-17 13:58:58,873 [  31811]   WARN - #c.i.i.a.s.WaitForContributorsListenerWrapper - Contributor 'ActionSearchEverywhereContributor' did not finish search for 'templ' in 3000ms. Maybe it should implement PossibleSlowContributor interface?
2023-11-17 13:59:01,240 [  34178]   INFO - #c.i.i.p.DisabledPluginsState - Plugins to disable: [com.templ.templ]
2023-11-17 13:59:01,241 [  34179]   INFO - #c.i.i.p.DynamicPlugins - Plugins to unload: [PluginDescriptor(name=Templ, id=com.templ.templ, descriptorPath=plugin.xml, path=~/Library/Application Support/JetBrains/GoLand2023.2/plugins/Templ, version=0.0.7, package=null, isBundled=false)]

@joerdav
Copy link
Collaborator

joerdav commented Nov 17, 2023

@ziganagelj Can you please try running the lsp manually in your project:

/Users/ziganagelj/go/bin/templ lsp -log=lsp.log

And please report any errors shown in the resulting log file.

@ziganagelj
Copy link

ziganagelj commented Nov 17, 2023

@joerdav Thanks for the quick response. Log showed the following issue:

{"level":"error","ts":"2023-11-17T14:24:16+01:00","caller":"pls/main.go:89","msg":"gopls command error","error":"signal: interrupt","stacktrace":"github.com/a-h/templ/cmd/templ/lspcmd/pls.newProcessReadWriteCloser.func1\n\t/Users/ziganagelj/go/pkg/mod/github.com/a-h/[email protected]/cmd/templ/lspcmd/pls/main.go:89"}

Which i solved with:
brew install gopls

But then i get this issue:

2023-11-17 14:24:55,825 [   4820]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@test(RUNNING;0): Loading packages...
2023-11-17 14:24:55,828 [   4823]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@test(RUNNING;0): Error loading packages: err: go command required, not found: exec: "go": executable file not found in $PATH: stderr: 
2023-11-17 14:24:55,836 [   4831]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@test(RUNNING;0): Error loading workspace folders (expected 1, got 0)
2023-11-17 14:24:55,874 [   4869]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@test(RUNNING;3): Loading packages...
2023-11-17 14:24:55,875 [   4870]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@test(RUNNING;3): Error loading packages: err: go command required, not found: exec: "go": executable file not found in $PATH: stderr: 
2023-11-17 14:24:55,875 [   4870]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@test(RUNNING;3): Error loading workspace folders (expected 1, got 0)
failed to load view for file:///Users/ziganagelj/GolandProjects/test/internal/templates/pages: err: go command required, not found: exec: "go": executable file not found in $PATH: stderr: 
2023-11-17 14:24:55,875 [   4870]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@test(RUNNING;3): Loading packages...
2023-11-17 14:24:55,876 [   4871]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@test(RUNNING;3): Error loading packages: err: go command required, not found: exec: "go": executable file not found in $PATH: stderr: 
2023-11-17 14:24:55,876 [   4871]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@test(RUNNING;3): Error loading workspace folders (expected 1, got 0)
2023-11-17 14:24:55,978 [   4973]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@test(RUNNING;4): Loading packages...
2023-11-17 14:24:55,978 [   4973]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@test(RUNNING;4): Error loading packages: err: go command required, not found: exec: "go": executable file not found in $PATH: stderr: 
2023-11-17 14:24:55,978 [   4973]   INFO - #c.i.p.l.i.LspServerImpl - TemplLspServerDescriptor@test(RUNNING;4): Error loading workspace folders (expected 1, got 0)
failed to load view for file:///Users/ziganagelj/GolandProjects/test/internal/templates/shared: err: go command required, not found: exec: "go": executable file not found in $PATH: stderr:

Which i just solved by adding path to .zshrc:
export PATH=$PATH:/Users/ziganagelj/sdk/go1.21.4/bin

Now in idea.log the plugins loads proper. However the plugin still doesnt doesn't work.

Running /Users/ziganagelj/go/bin/templ lsp -log=lsp.log now works:

{"level":"info","ts":"2023-11-17T14:33:20+01:00","caller":"lspcmd/main.go:75","msg":"lsp: starting up..."}
{"level":"info","ts":"2023-11-17T14:33:20+01:00","caller":"lspcmd/main.go:82","msg":"lsp: starting gopls..."}
{"level":"info","ts":"2023-11-17T14:33:20+01:00","caller":"lspcmd/main.go:94","msg":"creating client"}
{"level":"info","ts":"2023-11-17T14:33:20+01:00","caller":"lspcmd/main.go:99","msg":"creating proxy"}
{"level":"info","ts":"2023-11-17T14:33:20+01:00","caller":"lspcmd/main.go:104","msg":"creating templ server"}
{"level":"info","ts":"2023-11-17T14:33:20+01:00","caller":"lspcmd/main.go:124","msg":"listening"}

@joerdav
Copy link
Collaborator

joerdav commented Nov 17, 2023

@ziganagelj I think the issue will be that your IDE won't have the PATH var that you constructed in .zshrc

templ will look in your PATH and a couple of standard locations: https://github.com/a-h/templ/blob/main/cmd/templ/lspcmd/pls/main.go#L46-L49

@UltraWelfare
Copy link

I'm facing the same issue as @xerullian where html tags aren't autocompleting.. or even autoformatting.

Unfortunately this is a huge blocker to use it in production, has anyone found any fixes for it? I've tried installing vscode alongside the plugin although it kinda is of the same story. Autoformatting works there, but still no html tag autocompletion :/

@zeljkolazic
Copy link

No autocompletion for me at all, just syntax highlighting. Huge blocker.
Goland 23.3.1, Macbook M1

@ItsVoltz
Copy link

would be nice to get templ support for GoLand out, I dislike VSCode for go and having to restart the language server and not having the QOL features of GoLand is quite frustrating.

@bastianwegge
Copy link
Contributor

Remember this is nothing you are paying money for but rather an attempt to create something we can all use and benefit from. If you want

I got the LSP running and integration running inside GoLand following the comments above:

  • Go to the settings-page in GoLand and enter the templ executable directory (for me /Users/<my-user-name>/go/bin/templ)
  • Close GoLand and open GoLand using the terminal executable scripts (for me gl .) to get your environment right. Somehow starting GoLang from the Toolbox messes things up (I'm using fish-shell though, so the experience might differ)

DX on the plugin:
When I edit the templates, i.e. remove and retype a class I get some squiggly lines, the LSP or GoLand doesn't seem to be able to catch up. Syntax Highlighting works for HTML. Go to definition works for classes if I don't change them. All in all it's still a very buggy experience, but nothing that's keeping me from using templ, which is awesome!

Hit me up if you need help going further with this plugin.

@ItsVoltz
Copy link

Remember this is nothing you are paying money for but rather an attempt to create something we can all use and benefit from. If you want

I got the LSP running and integration running inside GoLand following the comments above:

  • Go to the settings-page in GoLand and enter the templ executable directory (for me /Users/<my-user-name>/go/bin/templ)

  • Close GoLand and open GoLand using the terminal executable scripts (for me gl .) to get your environment right. Somehow starting GoLang from the Toolbox messes things up (I'm using fish-shell though, so the experience might differ)

DX on the plugin:

When I edit the templates, i.e. remove and retype a class I get some squiggly lines, the LSP or GoLand doesn't seem to be able to catch up. Syntax Highlighting works for HTML. Go to definition works for classes if I don't change them. All in all it's still a very buggy experience, but nothing that's keeping me from using templ, which is awesome!

Hit me up if you need help going further with this plugin.

Thank you! I'll give it a try when I get out of work I missed this.

@mhrlife
Copy link

mhrlife commented Dec 22, 2023

I'm using WSL2 on Windows and to get the plugin working I did this:

  1. Install Go on windows ( even if your Goland is using the WSL version of Go)
  2. Add GOBIN to your environments.
  3. Install templ using Go.
  4. Open the templ settings in Goland and put the templ.exe path in the config.

However, I decided to configure *.templ files as HTML files in Goland. For me, templ files are HTML heavy and I also need HTMX and Alpinejs plugins and I couldn't get them to work correctly in templ functions.

@bastianwegge
Copy link
Contributor

To fix auto-formatting for now I created a File-Watcher using "go fmt" as a base-template, inserted the templ executable into "Program:" and saved it. Afterwards you can create an "Action on Save" with the File-Watcher you just created. This is the default "go fmt" behaviour you would expect and this also produces error-messages and opens a window if something is not right, which I found really handy.

@CthulhuDen
Copy link

For me, plugin at version 0.0.8 running in GoLand 2023.3.2, macOS 14.2.1, produces the following errors:

java.lang.ExceptionInInitializerError
	at com.templ.templ.TemplSettings.getTemplLspPath(TemplSettings.kt:32)
	at com.templ.templ.TemplLspServerSupportProvider.fileOpened(TemplLspServerSupportProvider.kt:19)
	at com.intellij.platform.lsp.impl.LspServerManagerImpl$LspFileEditorManagerListener.v(LspServerManagerImpl.java:494)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$OTelMonitor.callWrapped(NonBlockingReadActionImpl.java:840)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$OTelMonitor$MonitoredComputation.call(NonBlockingReadActionImpl.java:872)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.insideReadAction(NonBlockingReadActionImpl.java:604)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.lambda$attemptComputation$4(NonBlockingReadActionImpl.java:567)
	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1075)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runInReadActionWithWriteActionPriority$0(ProgressIndicatorUtils.java:73)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtilService.runActionAndCancelBeforeWrite(ProgressIndicatorUtilService.java:73)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runActionAndCancelBeforeWrite(ProgressIndicatorUtils.java:128)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runWithWriteActionPriority$1(ProgressIndicatorUtils.java:111)
	at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:73)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:192)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:610)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:685)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:641)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:609)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:78)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:179)
	at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:73)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runWithWriteActionPriority(ProgressIndicatorUtils.java:108)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runInReadActionWithWriteActionPriority(ProgressIndicatorUtils.java:73)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.attemptComputation(NonBlockingReadActionImpl.java:567)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.lambda$transferToBgThread$1(NonBlockingReadActionImpl.java:466)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.lambda$transferToBgThread$2(NonBlockingReadActionImpl.java:481)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699)
	at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.NullPointerException
	at java.base/java.util.Objects.requireNonNull(Objects.java:209)
	at java.base/sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:263)
	at java.base/java.nio.file.Path.of(Path.java:147)
	at java.base/java.nio.file.Paths.get(Paths.java:69)
	at com.templ.templ.TemplLspServerSupportProviderKt.<clinit>(TemplLspServerSupportProvider.kt:39)
	... 33 more

and

java.lang.NoClassDefFoundError: Could not initialize class com.templ.templ.TemplLspServerSupportProviderKt
	at com.templ.templ.TemplSettings.getTemplLspPath(TemplSettings.kt:32)
	at com.templ.templ.TemplLspServerSupportProvider.fileOpened(TemplLspServerSupportProvider.kt:19)
	at com.intellij.platform.lsp.impl.LspServerManagerImpl$LspFileEditorManagerListener.v(LspServerManagerImpl.java:494)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$OTelMonitor.callWrapped(NonBlockingReadActionImpl.java:840)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$OTelMonitor$MonitoredComputation.call(NonBlockingReadActionImpl.java:872)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.insideReadAction(NonBlockingReadActionImpl.java:604)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.lambda$attemptComputation$4(NonBlockingReadActionImpl.java:567)
	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1075)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runInReadActionWithWriteActionPriority$0(ProgressIndicatorUtils.java:73)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtilService.runActionAndCancelBeforeWrite(ProgressIndicatorUtilService.java:73)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runActionAndCancelBeforeWrite(ProgressIndicatorUtils.java:128)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runWithWriteActionPriority$1(ProgressIndicatorUtils.java:111)
	at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:73)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:192)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:610)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:685)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:641)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:609)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:78)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:179)
	at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:73)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runWithWriteActionPriority(ProgressIndicatorUtils.java:108)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runInReadActionWithWriteActionPriority(ProgressIndicatorUtils.java:73)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.attemptComputation(NonBlockingReadActionImpl.java:567)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.lambda$transferToBgThread$1(NonBlockingReadActionImpl.java:466)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.lambda$transferToBgThread$2(NonBlockingReadActionImpl.java:481)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699)
	at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.NullPointerException [in thread "ApplicationImpl pooled thread 12"]
	at java.base/java.util.Objects.requireNonNull(Objects.java:209)
	at java.base/sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:263)
	at java.base/java.nio.file.Path.of(Path.java:147)
	at java.base/java.nio.file.Paths.get(Paths.java:69)
	at com.templ.templ.TemplLspServerSupportProviderKt.<clinit>(TemplLspServerSupportProvider.kt:39)
	... 33 more

This errors are produced when navigating to plugin settings, and also when opening any .templ file. In file, only syntax highlighting works (although this is already not bad for working with simple templates in my opinion).

@joerdav
Copy link
Collaborator

joerdav commented Jan 2, 2024

@a-h I think we should close this, as conversations relating to the goland plugin are happening over in that repo.

@a-h
Copy link
Owner Author

a-h commented Jan 5, 2024

Closing, thanks for everyone's input and the continued work on the JetBrains side!

@a-h a-h closed this as completed Jan 5, 2024
@fabiante
Copy link

fabiante commented Feb 4, 2024

Thanks for the discussed work.

As explicit reminder to everyone who is interested in the Jetbrains plugin: These are the links you should probably follow:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests