Urgent: Cursor auto-suggestion breaking code on save (unusable after latest updates)

Hi everyone,

After the latest updates, Cursor is breaking valid JSX/TSX code on save.

This happens every single time I save a file, even with very small edits. It affects not only className strings (Tailwind), but also entire JSX tags and structure.

The IDE removes closing quotes or breaks JSX syntax, making the code invalid. I constantly have to undo (Cmd + Z) after saving.

This is happening on every file, not just specific components.

Steps to Reproduce

  1. Create a JSX/TSX component

  2. Add a long className string

  3. Move part of the string to a new line

  4. Save the file

Example:

<ScrollAreaPrimitive.Viewport
data-slot=“scroll-area-viewport”
className=“focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1”

After save (broken):

<ScrollAreaPrimitive.Viewport
data-slot=“scroll-area-viewport”
className="focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none

Here you can see some real example of what is happening every time I save the file (first gif) or I press tab (second gif):

ezgif-28d974868191c3fe

ezgif-2785af2c94fb129a

Expected Behavior

Saving the file should not modify or break valid JSX.

Formatting should preserve valid syntax and never remove quotes or JSX structure.

Operating System

:check_box_with_check: MacOS

Version Information

IDE:

Version: 3.1.10

VSCode Version: 1.105.1

Commit: dacbe9b31599a253763e4910eb6ab38704653320

Model: Unknown (default Cursor autocomplete / AI)

Additional Information

  • Happens on every save

  • Affects multiple components/files

  • Looks like auto-formatting or AI suggestion applied automatically

  • Breaking JSX syntax (missing quotes / tags)

  • Makes working with Tailwind classes very problematic

  • Requires constant undo (Cmd + Z)

Does this stop you from using Cursor?

:check_box_with_check: Yes - Cursor is unusable

Hi there!

We detected that this may be a bug report, so we’ve moved your post to the Bug Reports category.

To help us investigate and fix this faster, could you edit your original post to include the details from the template below?

Bug Report Template - Click to expand

Where does the bug appear (feature/product)?

  • Cursor IDE
  • Cursor CLI
  • Background Agent (GitHub, Slack, Web, Linear)
  • BugBot
  • Somewhere else…

Describe the Bug
A clear and concise description of what the bug is.


Steps to Reproduce
How can you reproduce this bug? We have a much better chance at fixing issues if we can reproduce them!


Expected Behavior
What is meant to happen here that isn’t working correctly?


Screenshots / Screen Recordings
If applicable, attach images or videos (.jpg, .png, .gif, .mp4, .mov)


Operating System

  • Windows 10/11
  • MacOS
  • Linux

Version Information

  • For Cursor IDE: Menu → About Cursor → Copy
  • For Cursor CLI: Run agent about in your terminal
IDE:
Version: 2.xx.x
VSCode Version: 1.105.1
Commit: ......

CLI:
CLI Version 2026.01.17-d239e66

For AI issues: which model did you use?
Model name (e.g., Sonnet 4, Tab…)


For AI issues: add Request ID with privacy disabled
Request ID: f9a7046a-279b-47e5-ab48-6e8dc12daba1
For Background Agent issues, also post the ID: bc-…


Additional Information
Add any other context about the problem here.


Does this stop you from using Cursor?

  • Yes - Cursor is unusable
  • Sometimes - I can sometimes use Cursor
  • No - Cursor works, but with this issue

The more details you provide, the easier it is for us to reproduce and fix the issue. Thanks!

Update / Possible Fix

It looks like the issue was not only related to Cursor suggestions, but also to editor.codeActionsOnSave.

I had:

This was running all auto-fixes (including ESLint) on save and was breaking JSX (especially multiline className).

Switching to:

or removing source.fixAll improve the behavior and it’s a bit more stable.

Still not sure why this didn’t happen before, it’s long time I’ve this setup and it started this strange behavior just after last update of cursor (possibly due to updates in Cursor / ESLint / plugins), but sharing in case others hit the same issue.

Hey, thanks for the detailed report and for figuring out the root cause yourself.

Your find with editor.codeActionsOnSave and source.fixAll looks like the right direction. It was most likely a conflict between ESLint auto-fix running via source.fixAll and Tab autocomplete. They both try to change the code, and JSX ends up getting broken.

A few things that can help confirm what’s happening:

  1. Check your ESLint extension version. It may have updated along with Cursor and triggered the conflict. You can try rolling the extension back to a previous version right click the extension > Install Another Version.

  2. If the Tab issue still shows up, try temporarily turning off Cursor Tab in Cursor Settings > Features > Cursor Tab, then see if the problem goes away on save. This helps isolate whether it’s Tab or ESLint.

  3. You can also try adding a timeout: "editor.codeActionsOnSaveTimeout": 5000. Sometimes a race between formatting and code actions can cause issues like this.

If switching to source.fixAll.eslint fully fixed it, you can mark the thread as solved so it’s easier for other users with the same setup. Let me know if anything else still reproduces.