microsoft / vscode-json-languageservice

JSON language service extracted from VSCode to be reused, e.g in the Monaco editor.
Other
261 stars 110 forks source link

Fix sorting error in case of nested trailing comma #223

Closed denisw closed 7 months ago

denisw commented 7 months ago

Fixes https://github.com/microsoft/vscode/issues/178229

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.

aiday-mar commented 7 months ago

Thank you for the valuable contribution. I will have a look at the PR.