corrosion icon indicating copy to clipboard operation
corrosion copied to clipboard

[regression?] Code folding gutter disappeared?

Open norru opened this issue 6 years ago • 24 comments

Hi,

I'm running latest snapshot of Eclipse 2018-09, tm4e, lsp4e and corrosion to test progress (a life on the edge, I know!).

After an "upgrade all", the code folding feature, which was working on the previous update, has disappeared again.

norru avatar Sep 26 '18 20:09 norru

Oddly, I don't think that the "update all" had anyting new from Corrosion snaps or tm4e itself, so there must be some sort of API oddity after upgrading the platform.

norru avatar Sep 26 '18 20:09 norru

This is low priority for me.

norru avatar Sep 26 '18 20:09 norru

@mickaelistria the code folding functionality disappeared a while ago after a short stint of actually working fine. Just FMY, is it something that would be addressed in 2018-12?

norru avatar Jan 09 '19 14:01 norru

I don't know what caused this to disappear, I don't even know which component was providing the functionality. As 2018-12 was released some time ago, it's definitely not addressed if you're still seeing the issue. I personally cannot place this issue high in my priority todo-list, it's very unlikely I work on it soon (or even any time). You'll need to have a look at this issue or to recruit someone else to do it. Good luck!

mickaelistria avatar Jan 09 '19 15:01 mickaelistria

I thought it might be a case of configuring the TM4E plugin "descriptor". It's too low priority for me to worry, thanks anyway :)

norru avatar Jan 09 '19 20:01 norru

I am still seeing this. I have also tried to edit language-configuration.json and add some folding markers but nothing happens. Folding seems to be active in the TextMate configuration.

norru avatar Jan 20 '19 22:01 norru

@angelozerr do you have any advice? How do we enable the folding gutter in our plugin.xml?

norru avatar Jan 21 '19 10:01 norru

language-configuration.json

TM4E doesn't support code folding and ignores the folding declaration from language-configuration.json (VSCode supports it). Code folding is managed by the language server. Perhaps it's an issue from LSP4E?

angelozerr avatar Jan 21 '19 12:01 angelozerr

Code folding is managed by the language server.

This is not possible as LSP has not a complete spec for code folding yet.

Perhaps it's an issue from LSP4E?

I think LSP4E assumes TM4E manages code folding. @mickaelistria ?

RLS doesn't have code folding implemented yet, I think they're blocked by the LSP project https://github.com/rust-lang/rls/issues/986

It seems like VSCode supports folding natively without the LSP as LSP folding specification is still in draft/proposal state and won't be ready any time soon.

@angelozerr Just FYI Code Folding was working in Corrosion in the release prior to 2018-09 (Photon IIRC)

norru avatar Jan 21 '19 12:01 norru

I think LSP4E assumes TM4E manages code folding. @mickaelistria ?

LSP4E doesn't know nor assume anything about TM4E. If documentFolding is supported by LSP, it should be supported by LSP4E and work for any LS that provides folding.

mickaelistria avatar Jan 21 '19 13:01 mickaelistria

I don't know what caused this to disappear, I don't even know which component was providing the functionality.

The first step to do is to debug https://git.eclipse.org/c/lsp4e/lsp4e.git/tree/org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/folding/LSPFoldingReconcilingStrategy.java

angelozerr avatar Jan 21 '19 13:01 angelozerr

If documentFolding is supported by LSP, it should be supported by LSP4E and work for any LS that provides folding

I've left the VSCode guys a comment asking for pointers - see if something bites.

norru avatar Jan 21 '19 13:01 norru

I've done a quick check and I could not find any instances of foldingRange in my RLS logs.

It kind of confirms that RLS doesn't implement it yet. There would be a foldingProvider in the response of initialize otherwise.

LSP4E to org.eclipse.corrosion.rls:{"jsonrpc":"2.0","id":"1","method":"initialize","params":{"processId":13979,"rootPath":"/home/norru/Projects/ivt/parallax_testbed/","rootUri":"file:///home/norru/Projects/ivt/parallax_testbed/","initializationOptions":{"settings":{"rust":{"clippy_preference":"on","goto_def_racer_fallback":true}}},"capabilities":{"workspace":{"applyEdit":true,"workspaceEdit":{"documentChanges":true,"resourceOperations":["create","delete","rename"],"failureHandling":"undo"},"symbol":{},"executeCommand":{"dynamicRegistration":true},"workspaceFolders":true},"textDocument":{"synchronization":{"willSave":true,"willSaveWaitUntil":true,"didSave":true},"completion":{"completionItem":{"snippetSupport":true}},"hover":{},"signatureHelp":{},"references":{},"documentHighlight":{},"documentSymbol":{"symbolKind":{"valueSet":[18,17,5,14,9,10,22,24,8,1,12,11,20,6,2,3,21,16,19,25,4,7,15,23,26,13]},"hierarchicalDocumentSymbolSupport":true},"formatting":{},"rangeFormatting":{},"definition":{},"codeAction":{"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}},"dynamicRegistration":true},"codeLens":{},"documentLink":{},"colorProvider":{},"rename":{}}},"clientName":"Eclipse IDE","trace":"off"}}
org.eclipse.corrosion.rls to LSP4E:{"jsonrpc":"2.0","id":"1","result":{"capabilities":{"textDocumentSync":2,"hoverProvider":true,"completionProvider":{"resolveProvider":true,"triggerCharacters":[".",":"]},"definitionProvider":true,"implementationProvider":true,"referencesProvider":true,"documentHighlightProvider":true,"documentSymbolProvider":true,"workspaceSymbolProvider":true,"codeActionProvider":true,"codeLensProvider":{"resolveProvider":false},"documentFormattingProvider":true,"documentRangeFormattingProvider":false,"renameProvider":true,"executeCommandProvider":{"commands":["rls.applySuggestion-14086","rls.deglobImports-14086"]}}}}
LSP4E to org.eclipse.corrosion.rls:Content-Length: 52

Although we're probably not asking for it from the client, as the request doesn't contain a foldingRange capability @mickaelistria @angelozerr.

	/**
	 * Capabilities specific to `textDocument/foldingRange` requests.
	 *
	 * Since 3.10.0
	 */
	foldingRange?: {
		/**
		 * Whether implementation supports dynamic registration for folding range providers. If this is set to `true`
		 * the client supports the new `(FoldingRangeProviderOptions & TextDocumentRegistrationOptions & StaticRegistrationOptions)`
		 * return value for the corresponding server capability as well.
		 */
		dynamicRegistration?: boolean;
		/**
		 * The maximum number of folding ranges that the client prefers to receive per document. The value serves as a
		 * hint, servers are free to follow the limit.
		 */
		rangeLimit?: number;
		/**
		 * If set, the client signals that it only supports folding complete lines. If set, client will
		 * ignore specified `startCharacter` and `endCharacter` properties in a FoldingRange.
		 */
		lineFoldingOnly?: boolean;
	};

https://microsoft.github.io/language-server-protocol/specification

norru avatar Jan 21 '19 14:01 norru

Ok I suspect the following problem : by default Generic Editor uses indentation folding strategies (so I think you have that before). And after LSP4E has implemented folding strategies.

I think the main problem is in LSP4E https://git.eclipse.org/c/lsp4e/lsp4e.git/tree/org.eclipse.lsp4e/plugin.xml#n470 :

<extension
         point="org.eclipse.ui.genericeditor.foldingReconcilers">
      <foldingReconciler
            class="org.eclipse.lsp4e.operations.folding.LSPFoldingReconciler"
            contentType="org.eclipse.core.runtime.text">
         <enabledWhen>
            <with
                  variable="editorInput">
               <test
                     property="org.eclipse.lsp4e.hasLanguageServer">
               </test>
            </with>
         </enabledWhen>
      </foldingReconciler>
   </extension>

I mean org.eclipse.lsp4e.hasLanguageServer checks just if the editor is bound in the editor which have LSP (in yoru case). In this case default indent strategy is disabled and you loose folding (in your case). The best mean is to improve this condition with org.eclipse.lsp4e.cansSupportFolding but it requires the start of the language server which could freeze the editor when it is opened.

angelozerr avatar Jan 21 '19 14:01 angelozerr

For reference https://bugs.eclipse.org/bugs/show_bug.cgi?id=537706

norru avatar Jan 21 '19 14:01 norru

The best mean is to improve this condition with org.eclipse.lsp4e.cansSupportFolding

@angelozerr Does this property need to be implemented?

norru avatar Jan 21 '19 17:01 norru

@angelozerr Does this property need to be implemented?

Yes, but it's hard I think since we cannot start the server when editor is created (I had tried it, but I failed it). Any PR ar ewelcome!

angelozerr avatar Jan 21 '19 18:01 angelozerr

Could not we find a way to let LS-specific plugins decide in a static way via plugin.xmlrather than letting lsp4e guess?

norru avatar Jan 21 '19 20:01 norru

@norru Is this still an issue with 2019-06 RC2 ?

mickaelistria avatar Jun 11 '19 19:06 mickaelistria

Still open on 2019-06 RC1 as it's what the IDE thinks it's latest. and it is still the case. Is RC2 not on the /updates Eclipse repository?

norru avatar Jun 16 '19 18:06 norru

Still open in Version: 2019-06 (4.12.0) Build id: 20190614-1200

norru avatar Jul 01 '19 16:07 norru

Could it be caused by https://bugs.eclipse.org/bugs/show_bug.cgi?id=547879 ?

mickaelistria avatar Oct 25 '19 19:10 mickaelistria

Code folding is still not showing up in my eclipse version 4.20.0.v20210611-1600 installation with corrosion v1.2.1.202106081156. Should I open a new issue?

cplir-c avatar Jul 05 '21 03:07 cplir-c

Do you still face the issue with latest version?

akurtakov avatar Jul 13 '22 10:07 akurtakov

Looks fixed.

norru avatar Aug 02 '23 13:08 norru