Repository navigation
On type formatting for blocks is unhelpful due to cursor placement #2971
Description
Description
Ruby LSP Information
VS Code Version
1.95.3
Ruby LSP Extension Version
0.8.16
Ruby LSP Server Version
0.22.1
Ruby LSP Addons
- Ruby LSP Rails
Ruby Version
3.3.6
Ruby Version Manager
custom
Installed Extensions
Click to expand
- amx-netlinx (0.6.1)
- better-toml (0.3.2)
- copy-text (0.4.9)
- cpptools (1.22.11)
- csharp (2.55.29)
- elixir-ls (0.24.2)
- gitlens (16.0.5)
- go (0.42.1)
- haml (1.4.1)
- isort (2023.10.1)
- material-icon-theme (5.15.0)
- platformio-ide (3.3.3)
- postcss (2.0.0)
- python (2024.20.0)
- ruby-lsp (0.8.16)
- rust-analyzer (0.3.2212)
- vscode-ansi (1.1.7)
- vscode-dotnet-runtime (2.2.3)
- vscode-eslint (3.0.10)
- vscode-npm-script (0.3.29)
- vscode-projects-plus (1.24.0)
- vscode-zipfs (3.0.0)
Ruby LSP Settings
Click to expand
Workspace
{}User
{
"enabledFeatures": {
"codeActions": true,
"diagnostics": true,
"documentHighlights": true,
"documentLink": true,
"documentSymbols": true,
"foldingRanges": true,
"formatting": true,
"hover": true,
"inlayHint": true,
"onTypeFormatting": true,
"selectionRanges": true,
"semanticHighlighting": true,
"completion": true,
"codeLens": true,
"definition": true,
"workspaceSymbol": true,
"signatureHelp": true,
"typeHierarchy": true
},
"featuresConfiguration": {},
"addonSettings": {},
"rubyVersionManager": {
"identifier": "custom"
},
"customRubyCommand": "rbenv init - fish | source",
"formatter": "auto",
"linters": null,
"bundleGemfile": "",
"testTimeout": 30,
"branch": "",
"pullDiagnosticsOn": "both",
"useBundlerCompose": false,
"bypassTypechecker": false,
"rubyExecutablePath": "",
"indexing": {},
"erbSupport": true,
"featureFlags": {}
}Reproduction steps
ruby-lsp auto-completes ruby blocks which is potentially a great feature, but the implementation is not quite there. Examples:
- Type
method do |. ruby-lsp autocompletes the argument pipes tomethod do ||, but the cursor is after the closing pipe, so attempting to finish typing e.g.|a|results inmethod do ||a||. You have to remember to arrow left before typing the argument. - Type
def method_name<enter>. ruby-lsp autocompletes the method structure with an empty line andend, but the cursor is afterendso you have to remember to arrow up before typing the method body. Same withdo ... endblocks.
This behavior IMO is unexpected because in other cases where VSCode autocompletes, the cursor is placed where you would expect. E.g. if you type " or ( you get "" or () but the cursor is between the two characters and you can immediately continue typing.
I really like the completion feature in concept, but since the cursor is placed in the wrong spot it slows me down to the point where disabling completion and typing the whole block myself is faster. Especially since completion isn't enabled in ERB files, so working on a Rails project I have to keep track of the context to type blocks successfully.
Activity
Thomascountz commentedon Dec 11, 2024
I've experienced this as well. Here are the RPC messages. (Cursor position is denoted by
█)Results in:
andyw8 commentedon Mar 31, 2025
🤔 I noticed this while trying Zed, but I can't reproduce in VS Code.
jondavidschober commentedon Nov 13, 2025
Any updates on this one? Or a good way to disable this? I'm experiencing this on VSCode/Cursor
vinistock commentedon Nov 13, 2025
nathanvy commentedon Dec 30, 2025
Just chiming in to note that this issue is reproducible on emacs with lsp-mode and makes writing code quickly pretty painful due to the incorrect cursor placement after the block's
endgets completed.Expected behaviour:
actual behaviour:
@vinistock is there a particular branch where this issue is being worked on? Happy to help if able.
vinistock commentedon Jan 7, 2026
I think we should turn off on type formatting for editors that don't support snippets since they doesn't give us the ability to move the user's cursor to the applicable position.
Instead of checking the client's name only for moving the cursor, we should probably completely avoid any modifications.
There's no branch for this, my previous comment was incorrect (I got confused with the issue's title). If someone wants to work on it, I'm happy to help and review.
[-]Code completion for blocks is unhelpful due to cursor placement[/-][+]On type formatting for blocks is unhelpful due to cursor placement[/+]