vuejs / vue-syntax-highlight

💡 Sublime Text syntax highlighting for single-file Vue components
MIT License
1.48k stars 233 forks source link

Optional chaining operator (?.) in <template> breaks syntax highlighting on GitHub #217

Open wopian opened 2 years ago

wopian commented 2 years ago

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>
Screenshot ![Screenshot 2022-05-18 at 17 40 33](https://user-images.githubusercontent.com/3440094/169096540-43ebca6f-a2e2-4eba-9566-f9d0224cac8f.png)

Without optional chaining operator:

<script setup lang="ts">
  const hello = {}
</script>
<template>
    <div v-if="hello.world" />
</template>
<style>
    div {
      font-size: 16px;
    }
</style>
skyronic commented 2 years ago

The .tmLanguage definitions - used by linguist hasn't been updated for a while.

This code snippet isn't broken in sublime though:

CleanShot 2022-05-18 at 12 48@2x

I'll look into if it's possible to update the .tmLanguage but I can't comment on how feasible it is without taking a closer look.

odanado commented 2 years ago

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

 2022-08-22 23 57 25

ref: https://github.com/odan-sandbox/vue-github-syntax-highlight-broken/blob/main/src/components/HelloWorld.vue

Leland commented 1 year ago

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

hfhchan-plb commented 1 year ago

+1, it causes all the subsequent CSS to show up as invalid too, as the parser believes it's still in JS mode.

hfhchan-plb commented 1 year ago

See also: https://github.com/github/linguist/issues/6001

sparr commented 1 year ago

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>
kaiarrowood commented 1 year ago

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?

KyeRussell commented 3 months ago

If it helps get a sense of severity: just checking in to say that also I've run into this several times.

RyStanley89 commented 3 weeks ago

This issue continues to affect many users. Any assistance from contributors in resolving this would be greatly appreciated.