Allow users to configure ESLint's `rulesCustomizations` settings (#11135)

William Villeneuve created

https://github.com/zed-industries/zed/assets/2072378/18f0bb28-0546-4234-a11f-39af6c9fcc12

`rulesCustomizations` is an array of rule severity overrides. Globs can
be used to apply default severities for multiple rules. See
[docs](https://github.com/microsoft/vscode-eslint/blob/553e632fb4cf073fce1549fb6c3c1b5140a52ebb/README.md?plain=1#L312-L333)
& [type
definitions](https://github.com/microsoft/vscode-eslint/blob/553e632fb4cf073fce1549fb6c3c1b5140a52ebb/%24shared/settings.ts#L168)

Example Zed `settings.json` to override all eslint errors to warnings:
```jsonc
{
    "lsp": {
        "eslint": {
            "settings": {
                "rulesCustomizations": [
                    // set all eslint errors/warnings to show as warnings
                    { "rule": "*", "severity": "warn" }
                ]
            }
        }
    }
}
```


Release Notes:

- Added support for configuring ESLint's `rulesCustomizations` settings,
ie. `{"lsp": {"eslint": {"settings": {"rulesCustomizations": [{"rule":
"*", "severity": "warn"}]}}}}`

Change summary

crates/languages/src/typescript.rs |  7 ++++++-
docs/src/languages/javascript.md   | 19 +++++++++++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)

Detailed changes

crates/languages/src/typescript.rs 🔗

@@ -286,6 +286,11 @@ impl LspAdapter for EsLintLspAdapter {
             .cloned()
             .unwrap_or_else(|| json!({}));
 
+        let rules_customizations = eslint_user_settings
+            .get("rulesCustomizations")
+            .cloned()
+            .unwrap_or_else(|| json!([]));
+
         let node_path = eslint_user_settings.get("nodePath").unwrap_or(&Value::Null);
         let use_flat_config = Self::FLAT_CONFIG_FILE_NAMES
             .iter()
@@ -294,7 +299,7 @@ impl LspAdapter for EsLintLspAdapter {
         Ok(json!({
             "": {
                 "validate": "on",
-                "rulesCustomizations": [],
+                "rulesCustomizations": rules_customizations,
                 "run": "onType",
                 "nodePath": node_path,
                 "workingDirectory": {"mode": "auto"},

docs/src/languages/javascript.md 🔗

@@ -121,3 +121,22 @@ For example, here's how to set `problems.shortenToSingleLine`:
   }
 }
 ```
+
+#### Configure ESLint's `rulesCustomizations`:
+
+You can configure ESLint's `rulesCustomizations` setting:
+
+```json
+{
+  "lsp": {
+    "eslint": {
+      "settings": {
+        "rulesCustomizations": [
+          // set all eslint errors/warnings to show as warnings
+          { "rule": "*", "severity": "warn" }
+        ]
+      }
+    }
+  }
+}
+```