Optional chaining operator (?.) in <template> breaks syntax highlighting on GitHub
wopian opened this issue ยท 9 comments
I don't use Sublime Text (so can't check the new
branch), but this issue appears on GitHub which uses this repository for syntax highlighting and is using the latest version of the master branch.
The optional chaining operator (?.
) causes the file to stop syntax highlighting the rest of the file when it is used in an attribute inside <template>
With optional chaining operator:
<script setup lang="ts">
const hello = {}
</script>
<template>
<div v-if="hello?.world" />
</template>
<style>
div {
font-size: 16px;
}
</style>
Without optional chaining operator:
<script setup lang="ts">
const hello = {}
</script>
<template>
<div v-if="hello.world" />
</template>
<style>
div {
font-size: 16px;
}
</style>
I found the same problem too.
vue-syntax-highlight
is used for syntax highlighting on GitHub
https://github.com/github/linguist/blob/master/grammars.yml
Chiming in with another instance in the wild on GitHub: https://github.com/divamgupta/diffusionbee-stable-diffusion-ui/blob/b2a2a041757db280e2218a96dd1ca6c06617bfce/electron_app/src/StableDiffusion.vue#L41
+1, it causes all the subsequent CSS to show up as invalid too, as the parser believes it's still in JS mode.
See also: github-linguist/linguist#6001
Another example in the wild: https://github.com/snapshot-labs/snapshot/blob/3151610c3121d7ffe07cf2b8e811de341c7866ad/src/components/Ui/Avatar.vue
And a shorter test case:
<a>
<b v-if="c?.d" />
</a>
We have numerous instances of this in our repos. The nullish coalescing operator ??
also breaks the syntax highlighting. Vue 3 is pushing heavily towards typescript so instances of this are just going to get more and more common. Has there been any movement on this issue since it's been created?
If it helps get a sense of severity: just checking in to say that also I've run into this several times.
This issue continues to affect many users. Any assistance from contributors in resolving this would be greatly appreciated.