Use default settings if initialization options is empty or not provided (#11566)

## Summary

This PR fixes the bug to avoid flattening the global-only settings for
the new server.

This was added in https://github.com/astral-sh/ruff/pull/11497, possibly
to correctly de-serialize an empty value (`{}`). But, this lead to a bug
where the configuration under the `settings` key was not being read for
global-only variant.

By using #[serde(default)], we ensure that the settings field in the
`GlobalOnly` variant is optional and that an empty JSON object `{}` is
correctly deserialized into `GlobalOnly` with a default `ClientSettings`
instance.

fixes: #11507 

## Test Plan

Update the snapshot and existing test case. Also, verify the following
settings in Neovim:

1. Nothing

```lua
ruff = {
  cmd = {
    '/Users/dhruv/work/astral/ruff/target/debug/ruff',
    'server',
    '--preview',
  },
}
```

2. Empty dictionary

```lua
ruff = {
  cmd = {
    '/Users/dhruv/work/astral/ruff/target/debug/ruff',
    'server',
    '--preview',
  },
  init_options = vim.empty_dict(),
}
```

3. Empty `settings`

```lua
ruff = {
  cmd = {
    '/Users/dhruv/work/astral/ruff/target/debug/ruff',
    'server',
    '--preview',
  },
  init_options = {
    settings = vim.empty_dict(),
  },
}
```

4. With some configuration:

```lua
ruff = {
  cmd = {
    '/Users/dhruv/work/astral/ruff/target/debug/ruff',
    'server',
    '--preview',
  },
  init_options = {
    settings = {
      configuration = '/tmp/ruff-repro/pyproject.toml',
    },
  },
}
```
This commit is contained in:
Dhruv Manilawala 2024-05-27 21:06:34 +05:30 committed by GitHub
parent 246a3388ee
commit 37ad994318
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 16 additions and 14 deletions

View file

@ -1,4 +1,5 @@
{ {
"settings": {
"codeAction": { "codeAction": {
"disableRuleComment": { "disableRuleComment": {
"enable": false "enable": false
@ -13,3 +14,4 @@
"lineLength": 80, "lineLength": 80,
"exclude": ["third_party"] "exclude": ["third_party"]
} }
}

View file

@ -130,7 +130,7 @@ enum InitializationOptions {
workspace_settings: Vec<WorkspaceSettings>, workspace_settings: Vec<WorkspaceSettings>,
}, },
GlobalOnly { GlobalOnly {
#[serde(flatten)] #[serde(default)]
settings: ClientSettings, settings: ClientSettings,
}, },
} }