profile
viewpoint
Kris De Volder kdvolder SpringSource a Division of VMWare Vancouver, BC, Canada

kdvolder/chatter 15

Simple chat application using spring-cloud-stream, rabbitmq and websockets

grails/grails-sts-tests 3

Grails STS Tests

grails/grails-dependency-generator-task 1

Gradle-based POM generator for Grails Maven Archetype

jkschneider/eclipse-integration-gradle 1

Gradle Tooling for Eclipse

kdvolder/7zip 1

Docker image that supports creating windows self-extracting 7zip archives. Can be used from Linux.

kdvolder/cf-java-client-sample-v2 1

Sample using cf-java-client-v2 to retrieve some infos from CF

BoykoAlex/eclipse-xterm 0

Xterm for Eclipse

BoykoAlex/initializr 0

A web-based Maven POM generator for Spring projects

BoykoAlex/wildwebdeveloper 0

Simple and productive Web Development Tools in the Eclipse IDE

issue openedmicrosoft/language-server-protocol

avoid having to open many files in large projects for (e.g.) textDocument/references

The context of this request is a project that has:

  1. Many O(100k) files.
  2. To facilitate this, is (partially) backed by a remote filesystem.

Though the problem is also apparently for projects with O(1k) files and many references and a local fs, just less so.

There exists an LSP implementation that can deal with such large projects, it has knowledge of all the relevant files. When calling something like textDocument/references in this project (editor use: Neovim 0.5.x with builtin nvim-lsp), a list is displayed with the resulting references (called the quicklist). The format is like this:

  1 caller.1.go|6 col 6| lib.CalledVeryOften()                                                                                                                                                                                                                                            
  2 caller.10.go|6 col 6| lib.CalledVeryOften()                                                                                                                                                                                                                                           
  3 caller.100.go|6 col 6| lib.CalledVeryOften()                                                                                                                                                                                                                                          
  4 caller.11.go|6 col 6| lib.CalledVeryOften()                                                                                                                                                                                                                                           
  5 caller.12.go|6 col 6| lib.CalledVeryOften()   
  ...

The template is <filename>|<lnum> col <col>|<text>. It is user-friendly to include the text because it can already give a hint about:

  • The arguments used (though in this example there are none).
  • The import alias used, if any.
  • Post-line comments.

Unfortunately, the textDocument/references response only contains a Location but not the line itself. So the editor has to open all files, potentially translate UTF-16 code units to whatever encoding it is using and read the line, in order to display the line.

This is quite expensive, as noted in https://github.com/neovim/neovim/issues/13359.

A workaround would be to stop displaying the line snippet. That would regrettably not be as user-friendly. But I'm wondering if some thought on this had been spent on mitigating this latency/resource issue, perhaps by optionally returning the snippet in the response?

created time in an hour

issue commentmicrosoft/language-server-protocol

How to handle progress finished when the client has not yet responded to window/workDoneProgress/create?

Thanks for the hint, @rwols. I'm using server initiated progress only for reindexing and in cases where updating diagnositcs takes longer than usual. I never use it when handling requests.

Wosi

comment created time in 6 hours

issue commentmicrosoft/language-server-protocol

Is any client using partialResultToken?

@dbaeumer Can you please clarify your reply above?

Does it mean that the protocol supports it, but the UI does not (yet)? In which case we should continue waiting until it does.

alanz

comment created time in 6 hours

issue commentmicrosoft/language-server-protocol

How to handle progress finished when the client has not yet responded to window/workDoneProgress/create?

@Wosi just to be clear, never use server-initiated work done progress for handling requests like textDocument/references or workspace/symbol. Instead you can rely on the client passing a workDoneProgressToken in the request.

window/workDoneProgress/create is suitable for background tasks like indexing though.

Wosi

comment created time in 6 hours

issue closedmicrosoft/language-server-protocol

How to handle progress finished when the client has not yet responded to window/workDoneProgress/create?

I'm working on server side progress reporting. My current implementation sends window/workDoneProgress/create followed by $/progress notifications immediately. In other words: It treats window/workDoneProgress/create like a notification as it is not waiting for a client response. Main reason for this implementation is that a lengthy operation should not get longer by waiting for a slow client to respond. However, I saw this thread that implies my implementation is not compliant to LSP: https://github.com/microsoft/language-server-protocol/issues/923

To my understanding the server is not allowed to send $/progress notifications until the client has respond to window/workDoneProgress/create. Is that correct?

I don't want to block the lengthy operation until the client has repsonded. Instead I start the lengthy operation immediately and hold $/progress notifications back until the client is ready. With this implemenation I can run into the situation where the lengthy operation has finished before the client responded to window/workDoneProgress/create. What should the server do in this situation?

  • Wait for the client response only to send $/progress with "kind":"end"
  • Just send $/progress with "kind":"end" without waiting for the client
  • Not send anything to the slow client. It should clean up the progress UI ressources after a while.

I don't think cancellation of the window/workDoneProgress/create request is suitable here since there could be an overlap where the client responds in the same moment when the server requests cancellation.

closed time in 6 hours

Wosi

issue commentmicrosoft/language-server-protocol

Is any client using partialResultToken?

The client that currently support partial result tokens is the one for Visual Studio (you read correctly :-)).

Adding support for this for VS Code is quite some wrong since none of it's UI is build for this.

alanz

comment created time in 7 hours

issue commentmicrosoft/language-server-protocol

prepareRename: what is defaultBehavior, rationale

I converted the capability to an enum to make it more clear that the default bahavior is expandable. Fell free to spec some if you client does something different than selecting the language identifier.

nbfalcon

comment created time in 7 hours

push eventmicrosoft/language-server-protocol

Dirk Baeumer

commit sha ed36538a180f15d33ffb03365fba4ace47b42d68

ConvertprepareSupportDefaultBehavior to enum

view details

push time in 7 hours

issue commentmicrosoft/language-server-protocol

prepareRename: what is defaultBehavior, rationale

The syntax is usually language specific. There is an item in the LSP land to make client and server 'agree' on that syntax since it is currently duplicated (on the client side and the server side).

Could defaultBehavior be returned if the placeholder and thing being renamed are different?

IMO yes, but it might depend on the client.

I agree with the specification part. But I don't want to put in VS Code behavior into the specification since it will equally force clients to implement what VS Code is doing. This is why I opt to have a client capability that describes the client behavior. @yyoncho and @nbfalcon what do you think the clients you know would / should do. Can you specify this for me?

nbfalcon

comment created time in 7 hours

issue commentmicrosoft/language-server-protocol

How to handle progress finished when the client has not yet responded to window/workDoneProgress/create?

@Wosi the only save option is (1) Wait for the client response only to send $/progress with "kind":"end"

Otherwise clients might show the progress for every.

Wosi

comment created time in 7 hours

issue openedmicrosoft/language-server-protocol

How to handle progress finished when the client has not yet responded to window/workDoneProgress/create?

I'm working on server side progress reporting. My current implementation sends window/workDoneProgress/create followed by $/progress notifications immediately. In other words: It treats window/workDoneProgress/create like a notification as it is not waiting for a client response. Main reason for this implementation is that a lengthy operation should not get longer by waiting for a slow client to respond. However, I saw this thread that implies my implementation is not compliant to LSP: https://github.com/microsoft/language-server-protocol/issues/923

To my understanding the server is not allowed to send $/progress notifications until the client has respond to window/workDoneProgress/create. Is that correct?

I don't want to block the lengthy operation until the client has repsonded. Instead I start the lengthy operation immediately and hold $/progress notifications back until the client is ready. With this implemenation I can run into the situation where the lengthy operation has finished before the client responded to window/workDoneProgress/create. What should the server do in this situation?

  • Wait for the client response only to send $/progress with "kind":"end"
  • Just send $/progress with "kind":"end" without waiting for the client
  • Not send anything to the slow client. It should clean up the progress UI ressources after a while.

created time in 19 hours

issue commentmicrosoft/language-server-protocol

prepareRename: what is defaultBehavior, rationale

@dbaeumer is the syntax for identifiers language-specific, or is a c-like language assumed? I.e. could a hypothetical CommonLisp server respond with defaultBehavior if the cursor is on a symbol containing hyphens?

Could defaultBehavior be returned if the placeholder and thing being renamed are different? (Specific example: cursor is on a C label, the range is the entire label with colon, but the placeholder is only the identifier without the colon; in lsp-mode, we underline the thing being renamed, as determined from the rename range)

If I understood you correctly, by "client innovation", you are thinking of something like the client implementing some sort of live-rename based on textDocument/documentHighlight if defaultBehavioris returned?

A final thought: for specs like these, coordination between servers and clients is needed, and as such the defaultBehavior must be specified. Clients need to know how they should handle defaultBehavior, and servers need to know when they can send it. If this is left as is, the "do what VSCode does" situation described by @yyoncho will occur. I don't think the issue here is that various clients can do this best in different ways, but that they wouldn't know at all.

nbfalcon

comment created time in 2 days

issue openedspring-projects/sts4

Angular directives marked as undefined while doc shown into the same popup

I cross-post this issue from WildWebDeveloper project, because on a vanilla Eclipse installation it doesn't show up. https://github.com/eclipse/wildwebdeveloper/issues/552 I tried to install latest snapshot as suggested, with no luck. (On plain Eclipse there's no need to update the plugin, it works even with release).

Every angular directive inside any template gets marked as undefined, but at the same time, its doc gets correctly shown on hover. immagine

created time in 2 days

issue closedspring-projects/sts4

Make WildWebDeveloper updatable

WildWebDeveloper is in a fast development phase. STS 4.8.1 ships 0.10.2 while last stable release is 0.11.3, but it's not possible to update it adding new software source.

closed time in 2 days

4javier

issue commentspring-projects/sts4

Make WildWebDeveloper updatable

@martinlippert Maybe the problem arised when WWD has been integrated into STS. Now it gets installed inside /opt/STS/plugins path, root owned. Previously, I installed it explicitly with my STS instace running as user, then it got installed inside my home. For anyone interested:

  • Run eclipse as root to execute the update Thanks for your help.
4javier

comment created time in 2 days

issue commentspring-projects/sts4

Make WildWebDeveloper updatable

With regards to the incompatible POM editor, you can uninstall that feature via "About -> Installation Details", then select that feature from the list and uninstall it. After a restart, you should be able to install the snapshot from WWD again - at least it worked while doing some quick testing here.

With regards to the latest error message, I unfortunately haven't seen that before. Are there any more details (from the More... link? Or a stack trace in the Error Log view maybe?

You could also try to install STS4 from the tar.gz, maybe there is a permission issue with the location you installed STS4 into.

4javier

comment created time in 2 days

issue commentspring-projects/sts4

Make WildWebDeveloper updatable

@martinlippert I had just find out that, and I was editing my previous message. LemMinx version for POM editor seems to be incompatible with the newer one needed by WWD 11.x. Anyway, I tried to update just to the latest RELEASE, and now actually update dialog shows up, but just to say this to me: immagine I installed STS4 from AUR on Archlinux. Tell me if you need any installation info.

4javier

comment created time in 2 days

issue commentspring-projects/sts4

Make WildWebDeveloper updatable

The latest snapshot is indeed not installable on STS 4.8.1 due to an incompatibility between the m2e usage of the XML language server and the WWD usage of the same. If you remove the snapshot update site, updating to the latest release version should be possible (if you have both update sites around, the IDE will always try to update to the latest version). Can you try that?

4javier

comment created time in 2 days

issue commentspring-projects/sts4

Make WildWebDeveloper updatable

@martinlippert I was trying to install latest snapshot from https://download.eclipse.org/wildwebdeveloper/snapshots/ as suggested by WWD dev. I was using the "Help → Install new software" menu, and this is what I get immagine I tried with latest release you linked https://download.eclipse.org/wildwebdeveloper/releases/latest/ and get exactly the same problem. Using "Help → Check for Updates" after checking to have the sources enabled immagine simply doesn't update anything. No error. No update.

4javier

comment created time in 2 days

issue commentspring-projects/sts4

Make WildWebDeveloper updatable

I tried a fresh STS 4.8.1 and added this update site to the preferences: https://download.eclipse.org/wildwebdeveloper/releases/latest/

Followed by a "Check for Updates". This results in an update dialog showing up with an available update of the Wild Web Developer feature in version 0.10.4, which is the latest one showing up on that mentioned update site.

This update site from WWD: https://download.eclipse.org/wildwebdeveloper/releases/0.11.3/

shows the same version of the main WWD feature, so I think the above mentioned update site points indeed to the latest WWD release. When I continue with the "Check for Updates" dialog, the update installs fine, I can restart the IDE and the new version of WWD is installed just fine.

So to me it looks like I can update an STS 4.8.1 install to the latest WWD release, but maybe something is different on your end that causes this update to fail. Following the steps that I described, do you see an error message when trying to install the update? Or is there no update showing up at all when doing a "Check for Updates"? If that is the case, please double check the version of the installed main WWD feature via the About dialog and the installation details to see if this is indeed still 0.10.2 or maybe already updated to 0.10.4. And if an error message shows up, please attach it here so that we can take a deeper look.

4javier

comment created time in 2 days

issue commentmicrosoft/language-server-protocol

Is any client using partialResultToken?

I am happy to do this in two language servers (erlang-ls and haskell-language-server), but it is not clear to me what changes are needed on the vscode client side to enable it to start sending the tokens in the first place.

My understanding is that if the client supports the feature, it can always send the token. Servers that do not use it can ignore it, those that do, or need to for a particular request, can do that. So it should be a safe default to have on.

alanz

comment created time in 2 days

issue commentmicrosoft/language-server-protocol

prepareRename: what is defaultBehavior, rationale

I think this really depends on the server. One case is for example html where the client can't easily determine how words with a - in it should be handled on rename.

So the idea is:

The user is on foo - the server knows that the client can calculate that foo can be calculated by the client and returns defaultBehaviour. The user is on foo-bar - the server knows that the client cannot calculate the proper range and returns it in the response.

nbfalcon

comment created time in 2 days

issue commentmicrosoft/language-server-protocol

server->client "show location list" request

I am okay with any of the three proposed options. But I do agree with @puremourning that (1) won't really benefit the ecosystem in general.

If we go with (2), then #1119 seems to become redundant. Perhaps @kdvolder and @mickaelistria want to have a say in this as well.

sam-mccall

comment created time in 3 days

issue commentmicrosoft/language-server-protocol

Is any client using partialResultToken?

It is certainly one of the hardest things to implement for a client (in a general way). It's also a chicken-and-egg problem: if no language servers have support for partial results, then what's the point of implementing it? I was hoping that some language servers would start implementing support for especially textDocument/references, but no dice so far. I would be happy to see a language implementing it for textDocument/codeLens though (or even workspace/symbol).

alanz

comment created time in 3 days

startedkdvolder/vscode-remote-java-dev-env

started time in 3 days

issue openedmicrosoft/language-server-protocol

Is any client using partialResultToken?

I have an issue with the timing of code lens requests, and want to be able to send additional results through as they come available on the server. The new partial results mechanism seems perfect for this.

But as I understand the spec, they are signalled by each individual request from the client having a partialResultToken in it.

A basic search over github and my local installed clients does not show this being set in any client. And is only set in test code, as far as I can tell.

Is there an example anywhere of how to enable it in say a vscode client?

created time in 3 days

issue commentmicrosoft/language-server-protocol

server->client "show location list" request

My 2p FWIW.

  1. Experience has shown that: server vendors won't document it, and they will only implement client glue for vscode. These sorts of assumptions make it impossible to write "generic" clients which don't have per-server code. This is essential for smaller project that don't have the scale to write code for every possible LSP server (there are many examples of this type of client)

2/3. that seems doable. I.e. server can request that client makes a particular type of existing LSP request. i think I prefer the way 3 is defined personally, as the whole mechanism of 'commands' isn't truly general and assumes particular type of client implementation, whereas 3 only uses existing high level protocol concepts (admittedly, commands are part of the protocol, though they're kind of nuts-and-bolts requiring a lot of client-side knowledge of servers)

sam-mccall

comment created time in 3 days

issue commentmicrosoft/language-server-protocol

server->client "show location list" request

I see a couple of options:

  1. We say that the extension integrating the server into the tool is responsible for that integration part since it will result in the best UI experience. A server documents which integrations it expects the extension does. So the extension basically interprets the command by install a corresponding handler.
  2. We standardize a set of command ids. I thing this is doable for commands for which we have corresponding LSP requests.
  3. We make this explicit in LSP by having a concrete concept that can be used instead of a command. But this can't be something generic like show list and can't contain the data to be presented since it would bring us back to square one. What we would do is to say Trigger reference search with these params or Trigger call hierarchy with these params
sam-mccall

comment created time in 3 days

more