Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Optional chaining not supported in embedded script #640

Open
pulsar-edit/pulsar
#79

Description

@pmrotule

Prerequisites

Description

Optional chaining is currently supported in Javascript files, but not in embedded script (<script> tag in HTML). It is currently treated as a ternary operator which breaks the detection of the closing tag </script> since a colon is expected.

I first reported the issue to language-vue to finally realized it was the case for all embedded scripts:
hedefalk/atom-vue#97

51517628-a99b7a80-1e1b-11e9-8465-c8dec87ee902

Steps to Reproduce

  1. Open a HTML file
  2. Within a <script> tag, use the optional chaining operator (i.e. window.test?.something)

Expected behavior: Closing script tag detected

Actual behavior: Closing script tag not detected

Reproduces how often: Always

Versions

Atom: 1.32.2 upgraded to 1.34.0
OS: macOS Mojave version 10.14.3 (18D109)

Activity

  1. Aerijo commented on Feb 20, 2019

    @Aerijo
    Contributor

    The latest Stable version is 1.34.0; can you see if the issue occurs on that?

  2. pmrotule commented on Feb 20, 2019

    @pmrotule
    Author

    @Aerijo I'm now on 1.34.0 and the issue still occurs.

  3. Aerijo commented on Feb 20, 2019

    @Aerijo
    Contributor

    Oh, actually nothing in Atom "supports" the optional chaining operator (which is still just a proposal?)

    One possiblity you see is it just recovering from an error and guessing it's a ternary operator or something. Inspecting the tree, it shows
    image

    Without something to copy, I can only guess the cause of your issue. Most likely is you have Tree-sitter parsers disabled (so the above doesn't apply), and the TextMate grammar is looking for the end of the ternary operation (leaks like this are a known issue with the older TextMate grammars, and are "grandfathered" in by the desire to match the TextMate editor's behaviour).

  4. pmrotule commented on Feb 20, 2019

    @pmrotule
    Author

    I understand that it is still just a proposal, but since it is now supported by Babel and more and more people are using it, it would be great that Atom supports it as well. Moreover, language-javascript is currently supporting optional chaining, so I consider it as an issue if it works in Javascript files, but not within <script> tag in HTML files (or .vue file in my case).

    I am unfortunately not familiar with debugging Atom and I don't fully understand your explanation about TextMate grammar (how do you "inspect the tree"?). I'm also not sure how come you have javascript highlighting in an "untitled" file (I personally have no highlighting until I save it as a .js file). Anyway, the issue I'm referring to is only happening within <script> tag in HTML files.

  5. Aerijo commented on Feb 20, 2019

    @Aerijo
    Contributor

    That PR was closed, not merged. Optional chaining is not supported yet.

  6. rsese commented on Feb 20, 2019

    @rsese

    I understand that it is still just a proposal, but since it is now supported by Babel and more and more people are using it, it would be great that Atom supports it as well.

    For other things in early stages, we've established that knowing what version of ECMAScript this would land in is our bar of inclusion e.g. see #588 (which was for a stage 3 proposal, looks like optional chaining is earlier at stage 1).

    Edit: this is also not parsed by Tree-sitter so https://github.com/tree-sitter/tree-sitter-javascript would also need to be updated

  7. molvqingtai commented on Jan 11, 2020

    @molvqingtai

    Now Optional-Chaining is at Stage 4, TypeScript 3.7 has been officially added, and I hope to add support for him in the future

  8. pieczorx commented on May 4, 2020

    @pieczorx

    Any updates?

  9. jellevandevelde commented on Jul 8, 2020

    @jellevandevelde

    It has been over a year since this ticket was opened. Any updates or timeline yet?

  10. mattgrosso commented on Jul 9, 2020

    @mattgrosso

    I agree, I'd love to see a resolution to this issue.

  11. pmrotule commented on Oct 8, 2020

    @pmrotule
    Author

    bump

  12. Brugarolas commented on Oct 13, 2020

    @Brugarolas

    Any updates?

  13. veitbjarsch commented on Oct 20, 2020

    @veitbjarsch

    Do we have any updates here?

  14. raphaelparent commented on Dec 8, 2020

    @raphaelparent

    Bumping for updates.

    Also is there a package that enables this in the meantime?

  15. mattgrosso commented on Dec 10, 2020

    @mattgrosso

    Mostly I run into this issue when I'm styling a single file Vue component. After months of being annoyed it finally occurred to me that I can side step this issue by moving my style tag above my script tag. Not a real solution but it's making my life better in the meantime and I though I'd share just in case doing this might help someone else.

  16. veitbjarsch commented on Dec 10, 2020

    @veitbjarsch

    @mattgrosso I've just overcome the issue by installing language-babel. This comes with the support of the latest ECMA features.

  17. mattgrosso commented on Dec 10, 2020

    @mattgrosso

    @mattgrosso I've just overcome the issue by installing language-babel. This comes with the support of the latest ECMA features.

    Thank you! That did the trick.

  18. chfritz commented on Jul 26, 2021

    @chfritz

    Using language-babel instead of language-javascript is not a solution of course and language-babel doesn't work with tree-sitter.

  19. icecream17 commented on Jul 26, 2021

    @icecream17
    Contributor

    I think #686 would theoretically work if you deselect "use tree sitters" in settings, and downgrade the tree-sitter version to 12. Currently the tree-sitter fixes don't work, but the non-tree-sitter parser does work.

    Currently the pr is blocked and I'm not working on it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions