We need to provide some UI for settings sync, especially for resolving simple conflicts without dropping the user into a JSON diff.
Here's the conceptual mockups for resolving conflicts. When we detect that there are conflicts, we will prompt the user either via a notification:

Or via the settings gear:

This will lead them to the Settings GUI (if workbench.settings.editor is set to ui) and we'll enter the @conflicts query into the search bar which will bring up the conflicts UI:

When we get to in narrow views, we'll adjust the layout and stack the conflicts:

If strings are long and require it to wrap, we'll grow the conflict container (making sure the "Ignore Setting" action is adjusted):

@sanket-bhalerao please see https://github.com/microsoft/vscode/issues/2743#issuecomment-560116420 for all things related to Settings Sync, this issue is specifically for the UI in the Settings GUI.
The terms Sync Local and Sync Remote does not make it immediately obvious what they mean. Does Sync Local mean I will upload my local settings to the remote (i.e. overwrite the remote settings), or does it mean that I will synchronize my local settings with the remote (i.e. overwrite the local settings)?
I feel the terms will be interepreted differently by users.
Would e.g. writing Select or Pick or Choose this or Use this or something else instead on both sides make more sense? Because I assume that selecting either one will still sync the selected setting to the remote?
@thernstig I think this is something we'll iterate on to find the right verbiage to describe this behavior. This is also why we decided to add icons to help illustrate it better. IMO, select/pick/choose doesn't bring any more clarity.
@roblourens
Implemented ISettingsSyncService that can provide the state of settings sync and also can access conflicts and resolve them
Notes on the API
@roblourens Changed it as requested
Current status, we were discussing whether or not we really need this full sophisticated GUI for resolving conflicts setting by setting. Figuring out how to communicate different situations in the settings UI gets complicated and it's feeling like not quite the right solution.
Seems that conflicts will not usually occur that often, and when they do, users will probably typically just want to accept all the local or remote conflicted settings together, or in an advanced use case, the JSON editor is probably fine for those users.
So one idea we had is that when you click "Resolve Conflicts", you would just get a list of settings that are in conflict, with buttons to "accept all local", "accept all remote", or "see details", where the first two buttons would resolve the conflicts with the local or remote versions, and the third would open the JSON editor for advanced users who want to make individual changes.
Also, I think that we still don't have a good concept of how merging keybindings conflicts will work, and maybe we shouldn't go too far down the road of designing a complicated resolution UI for settings without a better understanding of that and how the two go together.
Most helpful comment
Current status, we were discussing whether or not we really need this full sophisticated GUI for resolving conflicts setting by setting. Figuring out how to communicate different situations in the settings UI gets complicated and it's feeling like not quite the right solution.
Seems that conflicts will not usually occur that often, and when they do, users will probably typically just want to accept all the local or remote conflicted settings together, or in an advanced use case, the JSON editor is probably fine for those users.
So one idea we had is that when you click "Resolve Conflicts", you would just get a list of settings that are in conflict, with buttons to "accept all local", "accept all remote", or "see details", where the first two buttons would resolve the conflicts with the local or remote versions, and the third would open the JSON editor for advanced users who want to make individual changes.
Also, I think that we still don't have a good concept of how merging keybindings conflicts will work, and maybe we shouldn't go too far down the road of designing a complicated resolution UI for settings without a better understanding of that and how the two go together.