ruff/crates/ruff_server/src
Dhruv Manilawala d56d241317
Notify users for invalid client settings (#16361)
## Summary

As mentioned in
https://github.com/astral-sh/ruff/pull/16296#discussion_r1967047387

This PR updates the client settings resolver to notify the user if there
are any errors in the config using a very basic approach. In addition,
each error related to specific settings are logged.

This isn't the best approach because it can log the same message
multiple times when both workspace and global settings are provided and
they both are the same. This is the case for a single workspace VS Code
instance.

I do have some ideas on how to improve this and will explore them during
my free time (low priority):
* Avoid resolving the global settings multiple times as they're static
* Include the source of the setting (workspace or global?)
* Maybe use a struct (`ResolvedClientSettings` +
`Vec<ClientSettingsResolverError>`) instead to make unit testing easier

## Test Plan

Using:
```jsonc
{
  "ruff.logLevel": "debug",
	
  // Invalid settings
  "ruff.configuration": "$RANDOM",
  "ruff.lint.select": ["RUF000", "I001"],
  "ruff.lint.extendSelect": ["B001", "B002"],
  "ruff.lint.ignore": ["I999", "F401"]
}
```

The error logs:
```
2025-02-27 12:30:04.318736000 ERROR Failed to load settings from `configuration`: error looking key 'RANDOM' up: environment variable not found
2025-02-27 12:30:04.319196000 ERROR Failed to load settings from `configuration`: error looking key 'RANDOM' up: environment variable not found
2025-02-27 12:30:04.320549000 ERROR Unknown rule selectors found in `lint.select`: ["RUF000"]
2025-02-27 12:30:04.320669000 ERROR Unknown rule selectors found in `lint.extendSelect`: ["B001"]
2025-02-27 12:30:04.320764000 ERROR Unknown rule selectors found in `lint.ignore`: ["I999"]
```

Notification preview:

<img width="470" alt="Screenshot 2025-02-27 at 12 29 06 PM"
src="https://github.com/user-attachments/assets/61f41d5c-2558-46b3-a1ed-82114fd8ec22"
/>
2025-02-27 08:28:29 +00:00
..
edit Insert the cells from the start position (#15398) 2025-01-10 13:11:56 +00:00
server Add per-file-target-version option (#16257) 2025-02-24 08:47:13 -05:00
session Notify users for invalid client settings (#16361) 2025-02-27 08:28:29 +00:00
edit.rs Add support for extensionless Python files for server (#13326) 2024-09-12 00:35:26 +05:30
fix.rs Directly include Settings struct for the server (#16042) 2025-02-10 10:20:01 +05:30
format.rs Add per-file-target-version option (#16257) 2025-02-24 08:47:13 -05:00
lib.rs Refactor workspace logic into workspace.rs (#16295) 2025-02-21 08:37:29 +00:00
lint.rs Start detecting version-related syntax errors in the parser (#16090) 2025-02-25 23:03:48 -05:00
logging.rs Avoid unnecessary info at non-trace server log level (#16389) 2025-02-26 13:31:17 +05:30
message.rs Fix LSP show message macro to allow format args (#15487) 2025-01-15 08:11:49 +00:00
resolve.rs Root exclusions in the server to project root (#16043) 2025-02-10 04:57:14 +00:00
server.rs Refactor workspace logic into workspace.rs (#16295) 2025-02-21 08:37:29 +00:00
session.rs Refactor workspace logic into workspace.rs (#16295) 2025-02-21 08:37:29 +00:00
workspace.rs Refactor workspace logic into workspace.rs (#16295) 2025-02-21 08:37:29 +00:00