oskarsh / Yin-Yang

Auto Nightmode for KDE, Gnome, Budgie, VSCode, Atom and more
MIT License
616 stars 52 forks source link

VSCode settings.json Completely Overwritten #84

Open SeanMcLoughlin opened 3 years ago

SeanMcLoughlin commented 3 years ago

I had set Yin-Yang to change the color scheme in VS Code based on time of day, and it appears that it completely overwrote my settings.json file with just the color scheme.

Yin-Yang needs to either append to, or update the JSON -- not completely overwrite the file. I would have lost years worth of settings accumulating if I hadn't had another computer with my old settings.json still intact.

Machine configuration: DE: plasmashell 5.21.5 OS: Manjaro 21.0.6

l0drex commented 3 years ago

Well, that should not have happened. It's likely there was an error while trying to read your settings file, since only then an empty settings file gets created (see this line here). So you should probably check if it is well formed, e.g. no missing brackets.

Could you please replicate the issue by doing the following:

  1. Create another backup of your settings.json.
  2. Disable everything except VS Code in yin-yang.
  3. Run yin-yang -t from a terminal.
  4. Paste the output here.
  5. (Re-enable the automatic theme change, if you had it enabled before).
SeanMcLoughlin commented 3 years ago
> yin-yang -t
SETTINGS  1
Changing "Default" to "Atom One Dark" in <my home folder>/.config/Code/User/settings.json
open(): No such file or directory

This reproduces the issue and overwrites the file. But my settings.json appears to not have any errors in it.

I have the dark theme set to "Atom One Dark" and the light theme set to "Atom One Light" in the VS Code section of Yin-Yang.

I'm also running on the AUR version of the app -- v2.1

l0drex commented 3 years ago

Interesting. Seems like the inplace_change() function is the issue here.

Good news is that in my pull request, VS Code doesn't use this function anymore, bad news is that other plugins still use it. I'm going to investigate this further.

SeanMcLoughlin commented 3 years ago

json.load doesn't accept a final comma in src/plugins/vscode.py, but vscode accepts it as valid for settings.json. See this discussion on StackOverflow. So my settings file was considered invalid by the plugin.

There may be a safer function to read the json. The SO post above has a solution with ast. Or maybe yin-yang could clean up users' settings.json so python can parse it.

l0drex commented 3 years ago

I actually don't think that this a good idea, since ast isn't really meant to do that. Checking the user's settings file would be a lot of work.

Instead, I think there should just be an exception if the file is malformed and do nothing else.

Does VS Code automatically form the JSON files in such a way or did you manually edit it? If VS Code created those, then it may actually be needed.

SeanMcLoughlin commented 3 years ago

I don't think vscode created any JSON that way by default, but any plug-ins that edit the settings file can theoretically add an extra comma.

For example, my settings file's last line was setting my Python virtualenv location. This was added by the Python extension, and it had a comma at the end of it.

dflvunoooooo commented 6 months ago

I am having this problem too. My settings got overwritten seemingly randomly for weeks and I couldn't figure out why. I just per chance noticed it was at the same time, when yin yang changes the theme, all settings are deleted. Is there anything that can be done about this?