Skip to content

Commit 3fba2d7

Browse files
Add support for language server settings and initialization options (#6)
This update lets the user configure PowerShellEditorServices settings in the Zed settings.json file like this: ``` "languages": { "PowerShell": { "inlay_hints": { "enabled": true, }, "formatter": "language_server", "format_on_save": "on", }, }, "lsp": { "powershell-es": { "settings": { "powershell": { "codeFormatting": { "openBraceOnSameLine": true, "addWhitespaceAroundPipe": true, "trimWhitespaceAroundPipe": true, "ignoreOneLineBlock": true, }, }, }, }, }, ``` --------- Co-authored-by: MrSubidubi <dev@bahn.sh>
1 parent 44aabd2 commit 3fba2d7

4 files changed

Lines changed: 63 additions & 18 deletions

File tree

Cargo.lock

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[package]
2-
name = "powershell"
2+
name = "zed_powershell"
33
version = "0.4.0"
44
edition = "2021"
55

README.md

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,43 @@
1-
# PowerShell extension for Zed editor
1+
# PowerShell support for Zed
22

3-
## Setting up language server
3+
This extension provides syntax highlighting as well as language server support for PowerShell files
44

5-
Currently, the extension didn't support automatic installation (it'll soon land). You need
6-
to set the bundle path through `lsp` configuration:
5+
## Configuring your language server
6+
7+
The extension requires PowerShell to be available in your environment. If that is the case,
8+
the extension will auto-download the language server and start it.
9+
10+
If you wish to specify a custom path to your language server, you can do so via your settings:
711

812
```json
913
{
10-
"lsp": {
11-
"powershell-es": {
12-
"binary": {
13-
"path": "<path to PowerShellEditorServices>"
14-
}
14+
"lsp": {
15+
"powershell-es": {
16+
"binary": {
17+
"path": "<path to PowerShellEditorServices>"
18+
}
19+
}
1520
}
16-
}
1721
}
22+
```
23+
24+
Additionally, you can configure settings for your language server as well as initialization options
25+
to pass to the language server on start.
26+
27+
An example for this:
28+
29+
```json
30+
"lsp":{
31+
"powershell-es":{
32+
"settings":{
33+
"powershell":{
34+
"codeFormatting":{
35+
"openBraceOnSameLine":true,
36+
"addWhitespaceAroundPipe":true,
37+
"trimWhitespaceAroundPipe":true,
38+
"ignoreOneLineBlock":true
39+
}
40+
}
41+
}
42+
}
43+
```

src/powershell.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::env;
22
use std::fs;
3+
use zed_extension_api::settings::LspSettings;
34
use zed_extension_api::{self as zed, Result};
45

56
struct PowerShellExtension {
@@ -56,6 +57,24 @@ impl zed::Extension for PowerShellExtension {
5657
env: Default::default(),
5758
})
5859
}
60+
61+
fn language_server_initialization_options(
62+
&mut self,
63+
language_server_id: &zed_extension_api::LanguageServerId,
64+
worktree: &zed_extension_api::Worktree,
65+
) -> zed_extension_api::Result<Option<zed_extension_api::serde_json::Value>> {
66+
LspSettings::for_worktree(language_server_id.as_ref(), worktree)
67+
.map(|settings| settings.initialization_options)
68+
}
69+
70+
fn language_server_workspace_configuration(
71+
&mut self,
72+
language_server_id: &zed_extension_api::LanguageServerId,
73+
worktree: &zed_extension_api::Worktree,
74+
) -> zed_extension_api::Result<Option<zed_extension_api::serde_json::Value>> {
75+
LspSettings::for_worktree(language_server_id.as_ref(), worktree)
76+
.map(|settings| settings.settings)
77+
}
5978
}
6079

6180
impl PowerShellExtension {

0 commit comments

Comments
 (0)