Add support for range formatting with Syntax Tree #2657
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
Closes #203
A long time ago, I added the bits missing in Syntax Tree for partial formating. I always wanted to finish the work and offer range formatting, which is what this PR does.
As far as I know, there's no way to support this on RuboCop without some new API changes, but at least Syntax Tree users can benefit from it.
Implementation
The request is extremely similar to formatting. The only difference is that instead of formatting the entire document, we need to first locate the first node within the requested range and then calculate the indentation level for formatting (which is just the start column / 2).
Then we format only that node's slice and return a text edit to replace it.
Automated Tests
Added a test.