emacs-gdscript-mode icon indicating copy to clipboard operation
emacs-gdscript-mode copied to clipboard

Which features would you like to see?

Open NathanLovato opened this issue 5 years ago • 19 comments

If you would like to suggest and discuss features to add to the package, this is the place to do so. We now have all the essentials in place, and more features provided by the language server protocol.

NathanLovato avatar Apr 04 '20 01:04 NathanLovato

My main idea and wish would be to two refactoring commands to turn a value (selected region) into either a local or a file variable.

Source problem

When prototyping, we often write hard-coded values that we might want to turn into parameters later.

Here's an example of an animation with a hard-coded duration:

func some_function():
    get_node("Tween").interpolate_property(self, "position", position, target_position, 1.0)

Often times I see myself needing to turn the code into something like:

export var tween_duration = 0.6


func some_function():
    get_node("Tween").interpolate_property(self, "position", position, target_position, tween_duration)

Solution

A command that turns the region into a variable, either local to the function or block, or as a class property.

NathanLovato avatar Apr 04 '20 01:04 NathanLovato

I started a doom emacs integration:

https://github.com/hlissner/doom-emacs/pull/3265/files

My two wishes are:

1 - Goto definition 2 - Integration with lsp (language server protocol). Any chance to integrate with lsp-mode and lsp-ui ?

otavioschwanck avatar May 31 '20 21:05 otavioschwanck

I started a doom emacs integration:

I opened a PR for that 4 days ago already: https://github.com/hlissner/doom-emacs/pull/3239

2 - Integration with lsp (language server protocol). Any chance to integrate with lsp-mode and lsp-ui ?

It's already supported by lsp-mode. It's not something we could have in this repo, the language server is on Godot itself, and the client is in the lsp-mode package.

Jump to definition should be supported by lsp

NathanLovato avatar May 31 '20 21:05 NathanLovato

I would like the ability to suppress the status window that opens whenever I run a gdscript function eg gdscript-godot-run-project gives:. Screenshot from 2020-08-02 13-50-34

rileyrg avatar Aug 02 '20 11:08 rileyrg

I started a doom emacs integration:

I opened a PR for that 4 days ago already: hlissner/doom-emacs#3239

2 - Integration with lsp (language server protocol). Any chance to integrate with lsp-mode and lsp-ui ?

It's already supported by lsp-mode. It's not something we could have in this repo, the language server is on Godot itself, and the client is in the lsp-mode package.

Jump to definition should be supported by lsp

I just tried lsp with gdscript mode. Would you mind sharing your config? I keep getting warnings galore in another pop up buffer that wont go away. I've been using lsp with other languages without issue so I dont think its my config per se.

eg

Warning (lsp-mode): Unknown notification: gdscript_client/changeWorkspace Warning (lsp-mode): Unknown notification: gdscript/capabilities Warning (lsp-mode): Unknown notification: nil Warning (lsp-mode): Unknown notification: nil Warning (lsp-mode): Unknown notification: nil Warning (lsp-mode): Unknown notification: nil Warning (lsp-mode): Unknown notification: nil Warning (lsp-mode): Unknown notification: nil Warning (lsp-mode): Unknown notification: nil Warning (lsp-mode): Unknown notification: nil Warning (lsp-mode): Unknown notification: nil Warning (lsp-mode): Unknown notification: nil Warning (lsp-mode): Unknown notification: nil Warning (lsp-mode): Unknown notification: nil Warning (lsp-mode): Unknown notification: nil Warning (lsp-mode): Unknown notification: nil Warning (lsp-mode): Unknown notification: nil

rileyrg avatar Aug 02 '20 11:08 rileyrg

@rileyrg for LSP, the problem has to do with the server in Godot, that uses nonstandard notifications. We discussed sponsoring @ofrank123 to work on fixing these, but I don't know the task's status right now.

If he's unavailable, maybe we could see if someone else is available to work on the Godot language server.

NathanLovato avatar Aug 02 '20 20:08 NathanLovato

@rileyrg for LSP, the problem has to do with the server in Godot, that uses nonstandard notifications. We discussed sponsoring @ofrank123 to work on fixing these, but I don't know the task's status right now.

If he's unavailable, maybe we could see if someone else is available to work on the Godot language server.

OK, so the bottom line is it's not really usable atm. Without lsp working properly I am guessing we have no real company completion on objects/classes which is a bit of a "no go" for me since I am new to Godot (I'm rather impressed at how easily I complied to from source I must say). I'll have a play around as I certainly would like to use emacs with godot and if I can contribute anything I surely will.

rileyrg avatar Aug 02 '20 20:08 rileyrg

Hey @rileyrg I'm familiar with the gdscript/* notification errors, but I haven't seen the Unknown notification: nil and cannot reproduce with my current version. If I could get a little more info about your current development environment/steps to reproduce that'd be really helpful. Cheers!

ofrank123 avatar Aug 03 '20 16:08 ofrank123

I'm running latest (release level) everything via straight.el. My config here :

https://github.com/rileyrg/Emacs-Customisations

But in fairness I just ran lsp with a dot projectile file in the root. It seemed to know what it was doing (found godot) . I can't check now but if there's anything specific I can do let me know.

Unfortunately (!) the vscode integration with godot is so good I don't think we (emacs) can compete. The gdscript debugger in godot is rudimentary to say the least while the vscode debugger is much better. Using godot for x, emacs for y and vscode for z is a tad complex. But then I'm a debugger advocate.. No better way to delve into code than stepping through and seeing things change.

On Mon, 3 Aug 2020, 18:39 Oliver Frank [email protected] wrote:

Hey @rileyrg https://github.com/rileyrg I'm familiar with the gdscript/* notification errors, but I haven't seen the Unknown notification: nil and cannot reproduce with my current version. If I could get a little more info about your current development environment/steps to reproduce that'd be really helpful. Cheers!

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/GDQuest/emacs-gdscript-mode/issues/47#issuecomment-668122305, or unsubscribe https://github.com/notifications/unsubscribe-auth/AACYTC6JK33C7LNX5XFGKLTR63R27ANCNFSM4L4XPP5Q .

rileyrg avatar Aug 03 '20 17:08 rileyrg

I understand what you mean about the debugger, I've used the lsp-java debugger (dap) and it works quite well. I will look into adding integration with dap-mode as I don't believe it is java specific or anything. As far as the errors I'm trying to sort them out now, there's some on the godot end and some on the lsp-mode end so it can be tricky.

ofrank123 avatar Aug 03 '20 18:08 ofrank123

It's my teammate, @Razoric480, who wrote the Godot debugger integration for VSCode. If needed he could probably share some info on how it works.

And yes it's also possible with Emacs. We already have comint support for errors, you can jump to errors and to the corresponding files. Just not debugger integration.

NathanLovato avatar Aug 03 '20 22:08 NathanLovato

The Godot transmits through TCP/IP, with a server (the debugger) and a client (the client to be debugged.) The server transmits breakpoints to the client via a message stream that goes "breakpoint file line", and when the client hits one of them, it tells the server "debug_enter" and the reason (whether that's 'exception' or 'breakpoint).

Then the server responds with "get_stack_dump" and the client responds with "stack_dump", the server says "inspect_object" so the client says "message:inspect_object" with the information for said object, so on and so forth.

Visual Studio Code includes an interaction layer with the debugger that extensions can use, dunno how emacs does it but that's how things communicate.

Razoric480 avatar Aug 03 '20 22:08 Razoric480

Hey @Razoric480, do you know if Godot follows the DAP? It would be pretty easy if so, as there is already a DAP client written for emacs (dap-mode).

ofrank123 avatar Aug 04 '20 18:08 ofrank123

@ofrank123 It does not. Some of the messages look similar, but overrall, no, Godot uses its own messages and data and it doesn't directly translate into the DAP's messages.

Razoric480 avatar Aug 04 '20 18:08 Razoric480

It'd be nice if Godot could follow standards closely. When you follow the LSP and DAP specs closely, you can get clients in many editors effortlessly.

The LSP client for gdscript is what, a few dozen lines of code at most?

NathanLovato avatar Aug 04 '20 19:08 NathanLovato

Most of it is HTML rendering, yeah.

Razoric480 avatar Aug 04 '20 19:08 Razoric480

I agree completely, 90% of the problems I've encountered with the LSP have been due to Godot not faithfully implementing the spec. A rewrite of the debugger would not just be quite a bit of work, but the Godot maintainers would almost certainly want backwards compat with the old debugger protocol which just bloats the software more. That being said I'm going to open an issue and discuss switching to DAP.

ofrank123 avatar Aug 04 '20 20:08 ofrank123

If there's a time to break compatibility though, Godot 4 is the one.

NathanLovato avatar Aug 04 '20 23:08 NathanLovato

Best to continue this discussion here

ofrank123 avatar Aug 05 '20 04:08 ofrank123