Fix sorting error in case of nested trailing comma#223
Merged
aiday-mar merged 1 commit intomicrosoft:mainfrom Mar 4, 2024
Merged
Fix sorting error in case of nested trailing comma#223aiday-mar merged 1 commit intomicrosoft:mainfrom
aiday-mar merged 1 commit intomicrosoft:mainfrom
Conversation
When encountering a nested object property with a trailing comma,
such as `{ "a": { "x": 1, "y": 2, }, "c": 3 }`, the `json/sort` command
would throw the following error:
```
Range#create called with invalid arguments[[object Object], [object Object], undefined, undefined]: Error: Request json/sort failed with message: Range#create called with invalid arguments[[object Object], [object Object], undefined, undefined]
```
The reason is that the sorting code's scanner failed to navigate up to
the parent when `}` after the trailing comma is encountered, because
the condition `currentProperty!.endLineNumber === undefined` for
doing so is false if the previous non-trivia non-comment token was a
comma (`endLineNumber` would have already been set when processing
the comma).
As a consequence, any further properties in the parent object (like
`"c"` in the above example) would be wronly considered to be part of the
preceding nested object, which confuses the scanner and results in the
`endLineNumber` of the last property not being set at all. This, in the
end, triggers the `Range.create()` error when the sorting code attempts
build a range with that undefined end line number.
Fixes microsoft/vscode#178229
Contributor
|
Thank you for the valuable contribution. I will have a look at the PR. |
aiday-mar
approved these changes
Mar 4, 2024
aeschli
approved these changes
Mar 4, 2024
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes microsoft/vscode#178229
When encountering a nested object property with a trailing comma, such as
{ "a": { "x": 1, "y": 2, }, "c": 3 }, thejson/sortcommand would throw the following error:The reason is that the sorting code's scanner failed to navigate up to the parent when
}after the trailing comma is encountered, because the conditioncurrentProperty!.endLineNumber === undefinedfor doing so is false if the previous non-trivia non-comment token was a comma (endLineNumberwould have already been set when processing the comma).As a consequence, any further properties in the parent object (like
"c"in the above example) would be wronly considered to be part of the preceding nested object, which confuses the scanner and results in theendLineNumberof the last property not being set at all. This, in the end, triggers theRange.create()error when the sorting code attempts build a range with that undefined end line number.