Arcensoth / language-mcfunction

Syntax highlighting for mcfunction files.
MIT License
118 stars 13 forks source link

Fakeplayers incorrectly invalid with `.` and `+` #42

Open RitikShah opened 3 years ago

RitikShah commented 3 years ago

Bug report checklist: [x] The language-mcfunction extension only provides syntax highlighting. Have you confirmed that your issue is with the syntax highlighting, and not other features such as squiggly underlines, warning indicators, and/or pop-ups? [x] Ensure that you are able to reproduce the issue without any other datapack-related extensions enabled. [x] Make sure you attach a screenshot to your bug report. Bug reports without a screenshot will be closed.

Describe the bug: image In this image, the fakeplayer, rx.EnderChest+ is marked as invalid when this is a completely valid fakeplayer name. I've tested w/ DHP off and on, this seems like a syntax related issue

Arcensoth commented 3 years ago

It looks like this token is being categorized as an NBT path. This is a recursive structure (with braces, etc) so it's not feasible to try and back-track after it see an invalid character at the very end.

The underlying issue is that fakeplayers are sometimes impossible to distinguish between other types of tokens. It's worth noting that the grammar does indeed check for a fakeplayer before an NBT path.

https://github.com/Arcensoth/language-mcfunction/blob/04eeeaa796c370abed9950f64e145579121feacc/lib/src/grammars/version-agnostic.yaml#L371-L376

However, to avoid ambiguity, the version-agnostic grammar specifically requires one of the symbols #$% before it assumes something is a fakeplayer:

https://github.com/Arcensoth/language-mcfunction/blob/04eeeaa796c370abed9950f64e145579121feacc/lib/src/grammars/version-agnostic.yaml#L119-L121

So you should be able to tell the highlighter directly by appending, say, $ to the front of your fakeplayers, if it suits you.

I'd say it's at least reasonable to expect an error to not be highlighted here, such as with an unquoted string. Not sure how to fix that quite yet though, since unquoted strings are a superset of NBT paths and must be processed afterwards.

RitikShah commented 3 years ago

I think that's reasonable, a bit unfortunate ofc. I always use $'s except for load stuff so I don't mind having the blotch of red here.