plugin-xml icon indicating copy to clipboard operation
plugin-xml copied to clipboard

prevent crash in locStart/locEnd when node location is undefined

Open stonerl opened this issue 9 months ago • 9 comments

Prettier's formatWithCursor can crash if a node is missing a valid location object.

This patch adds null-safe checks and fallback handling in locStart and locEnd to avoid TypeErrors and ensure graceful degradation.

stonerl avatar Apr 11 '25 12:04 stonerl

Can you give me a text XML file where this happens? I have not found an example. If there is a test you could add, that would be great. I don't want to be needlessly defensive here.

kddnewton avatar Apr 12 '25 17:04 kddnewton

@kddnewton no worries. It happens with this test file, with my Prettier extension for Nova.

The error message I get can be found in the issue in the first comment: https://github.com/stonerl/nova-prettier-extension/issues/41#issue-2988303953

stonerl avatar Apr 12 '25 18:04 stonerl

It could also be me implementing formatWithCursor incorrect, but I only get this error with the xml-plugin. Everything else works.

stonerl avatar Apr 12 '25 18:04 stonerl

I don't think you're doing it wrong, but is it possible you're using an earlier version of the plugin? I cannot get it to crash with the latest version.

kddnewton avatar Apr 12 '25 19:04 kddnewton

I'm using the 3.4.1 that's the latest one AFAIK.

I currently apply this patch when installing all npm packages, and it circumvents the error and allows formatting XML files.

This could be something that happens only in combination with Nova. I don't mind if this patch won't go into upstream, I can keep it as part of my extension.

stonerl avatar Apr 12 '25 19:04 stonerl

I think I might know what's going on here. Nova is using Apple's JavaScript Core engine.

I assume you're using node.js for testing? It could be that this is just a platform specific error.

stonerl avatar Apr 12 '25 20:04 stonerl

I don't think so, if I run this in bun or safari it passes. I would be shocked if this had anything to do with the runtime as it's a logic error. Are you 100% sure you're on the latest version?

kddnewton avatar Apr 13 '25 18:04 kddnewton

Pretty sure:

nova-prettier-extension/prettier.novaextension on  feature/config-file [!] is 📦 3.5.16 via ⬢ v23.11.0
➜ npm list
[email protected] /Users/toni/Developer/nova-prettier-extension/prettier.novaextension
├── @prettier/[email protected]
├── @prettier/[email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]

stonerl avatar Apr 13 '25 18:04 stonerl

Just an update. I ran into the same error while implementing pretter-plugin-astro and prettier-plugin-sh and had to fix it the same way.

stonerl avatar Apr 23 '25 09:04 stonerl

I think I will leave this as part of your extension, because I cannot figure out how to reproduce this.

kddnewton avatar Jul 08 '25 14:07 kddnewton