Commit Graph
63 Commits
Author SHA1 Message Date
Thorsten Ball 7ff62a3efc Set working directory for project to project path (#8837)
This fixes #8823 by setting the current working directory we use when
launching our own `prettier` process via `node` to the project path.

Why does this fix it?

We already *did* read the correct configuration options for `prettier`
from any configuration files, we also correctly inferred which
`prettier` plugins to use, but somehow when running

    ./node_modules/.bin/prettier my-file.tsx

produced different results compared to `prettier` in Zed.

But we *do* pass the right options to `prettier.format` when calling it
here:
https://github.com/zed-industries/zed/blob/89bddaa757538b4f1e06733436607ea26d6a383f/crates/prettier/src/prettier_server.js#L177-L190

I checked those against the `prettier --loglevel=debug` output: they're
the same.

Turns out that the difference is we launch our `prettier_server.js` (a
JavaScript shim that wraps `prettier`-the-library in a language server
interface) not in the project path.

So somewhere inside `prettier.format` something is `require`d and fails
because we're not in that project directory. But when you run
`./node_modules/.bin/prettier` you are.

With the fix here, `prettier` now correctly picks up the tailwind plugin
that didn't seem to work in #8823. It probably fixes a bunch of other
oddities that folks reported with `prettier` too.



Release Notes:

- Fixed `prettier` integration not correctly picking up `prettier`
plugins, because it didn't run in the project's root path when invoked.
([#8823](https://github.com/zed-industries/zed/issues/8823)).
2024-03-04 18:06:55 +01:00
Thorsten Ball eb504be9ff Fix argument order when printing prettier debug info (#8826)
Release Notes:


- N/A
2024-03-04 15:37:50 +01:00
Marshall Bowers cf81943b17 Enable clippy::manual_find (#8737)
This PR enables the
[`clippy::manual_find`](https://rust-lang.github.io/rust-clippy/master/index.html#/manual_find)
rule and fixes the outstanding violations.

Release Notes:

- N/A
2024-03-02 20:03:49 -05:00
cf930d26ca Add initial support for defining language server adapters in WebAssembly-based extensions (#8645)
This PR adds **internal** ability to run arbitrary language servers via
WebAssembly extensions. The functionality isn't exposed yet - we're just
landing this in this early state because there have been a lot of
changes to the `LspAdapter` trait, and other language server logic.

## Next steps

* Currently, wasm extensions can only define how to *install* and run a
language server, they can't yet implement the other LSP adapter methods,
such as formatting completion labels and workspace symbols.
* We don't have an automatic way to install or develop these types of
extensions
* We don't have a way to package these types of extensions in our
extensions repo, to make them available via our extensions API.
* The Rust extension API crate, `zed-extension-api` has not yet been
published to crates.io, because we still consider the API a work in
progress.

Release Notes:

- N/A

---------

Co-authored-by: Marshall <marshall@zed.dev>
Co-authored-by: Nathan <nathan@zed.dev>
Co-authored-by: Marshall Bowers <elliott.codes@gmail.com>
2024-03-01 16:00:55 -08:00
Thorsten BallandAntonio 8de244073d Detect and possibly use user-installed gopls / zls language servers (#8188)
After a lot of back-and-forth, this is a small attempt to implement
solutions (1) and (3) in
https://github.com/zed-industries/zed/issues/7902. The goal is to have a
minimal change that helps users get started with Zed, until we have
extensions ready.

Release Notes:

- Added detection of user-installed `gopls` to Go language server
adapter. If a user has `gopls` in `$PATH` when opening a worktree, it
will be used.
- Added detection of user-installed `zls` to Zig language server
adapter. If a user has `zls` in `$PATH` when opening a worktree, it will
be used.

Example:

I don't have `go` installed globally, but I do have `gopls`:

```
~ $ which go
go not found
~ $ which gopls
/Users/thorstenball/code/go/bin/gopls
```

But I do have `go` in a project's directory:

```
~/tmp/go-testing φ which go
/Users/thorstenball/.local/share/mise/installs/go/1.21.5/go/bin/go
~/tmp/go-testing φ which gopls
/Users/thorstenball/code/go/bin/gopls
```

With current Zed when I run `zed ~/tmp/go-testing`, I'd get the dreaded
error:

![screenshot-2024-02-23-11 14
08@2x](https://github.com/zed-industries/zed/assets/1185253/822ea59b-c63e-4102-a50e-75501cc4e0e3)

But with the changes in this PR, it works:

```
[2024-02-23T11:14:42+01:00 INFO  language::language_registry] starting language server "gopls", path: "/Users/thorstenball/tmp/go-testing", id: 1
[2024-02-23T11:14:42+01:00 INFO  language::language_registry] found user-installed language server for Go. path: "/Users/thorstenball/code/go/bin/gopls", arguments: ["-mode=stdio"]
[2024-02-23T11:14:42+01:00 INFO  lsp] starting language server. binary path: "/Users/thorstenball/code/go/bin/gopls", working directory: "/Users/thorstenball/tmp/go-testing", args: ["-mode=stdio"]
```

---------

Co-authored-by: Antonio <antonio@zed.dev>
2024-02-23 13:39:14 +01:00
claytonrcarter d87d5f217d Add Prettier support for Vue, Markdown and PHP (#7904)
Current prettier support w/i Zed leaves out a few languages that are
officially supported by prettier. In particular, Vue and Markdown are
supported by the core prettier project, and PHP is supported via an
official plugin. I didn't see any open issues for this, but I have been
wondering for months why `"formatter": "prettier"` wasn't working on my
PHP files. Now that Zed is open source, I was able to find out why, and
fix it. 😄

I have been using this with PHP files daily for a week+ now, and I have
also used it successfully with Vue and Markdown files, though not as
extensively. I looked around and did not see any tests for specific
prettier language integrations, but if I missed them please let me know
and I'll add some tests.

**Notes**
- I did not add support for Ruby (which has an official prettier plugin)
because it seems to require some external dependencies (notably, Rudy
and some Gems). When those are present on the system and `$PATH`,
prettier will will work just fine on Ruby files if the plugin is set up
similar to how the PHP plugin is set up (I tried it), and I can add that
in here, if desired. The PHP plugin is pure JS (as I recall) and doesn't
have this issue.
- I did *not* add support for languages that have "community" plugins,
though I do note that Zed already ships with prettier support for svelte
enabled, which – if I understand correctly – is powered by a community
plugin. If desired, I could look at adding support/configuration to
enable prettier support for things like elm, erb, glsl, bash, toml.
Bash, in particular, *I* would find useful. 😄

Release Notes:

- Added prettier support for Vue, Markdown and PHP
2024-02-17 11:35:31 +02:00
Kirill Bulatov 362568adea Send lsp_types::InitializeParams with Zed version (#7216)
Based on the great work in
https://github.com/zed-industries/zed/pull/7130 , now sends this data

```
[crates/lsp/src/lsp.rs:588] ClientInfo { name: name.to_string(), version: Some(version.to_string()) } = ClientInfo {
    name: "Zed Dev",
    version: Some(
        "0.122.0",
    ),
}
```

with every LSP server initialization.

Release Notes:

- Added Zed name and version to LSP InitializeParams requests
2024-02-01 18:39:28 +02:00
Max BrunsfeldandMikayla 7173f4a82b Remove 2 suffix for fs, db, semantic_index, prettier
Co-authored-by: Mikayla <mikayla@zed.dev>
2024-01-03 12:09:42 -08:00
Kirill Bulatov 33d9b2de06 Clear failed installation task when error threshold gets exceeded 2023-11-29 10:58:22 +02:00
Kirill Bulatov 0045a11847 Ignore initialized LSP request in prettier wrapper 2023-11-29 10:58:22 +02:00
Kirill Bulatov 9ec39fc4fa Use enum variants for prettier installation and startup phases 2023-11-29 10:58:22 +02:00
Kirill Bulatov 23c8be7dac Do not propose prettier formatters for documents in node_modules/ 2023-11-09 14:49:37 +02:00
Kirill Bulatov 8d8e38a741 Adjust the tests 2023-11-09 14:40:32 +02:00
Kirill Bulatov 7918982c6e Change locate prettier method signature 2023-11-09 14:23:33 +02:00
Kirill Bulatov 6704b219bc Port changes to zed2 2023-11-03 11:02:50 +02:00
Kirill Bulatov ec09c85a45 Make it more clear that missing prettier is to blame 2023-11-03 11:02:50 +02:00
Kirill Bulatov 4a1059b0ba Fix the bugs 2023-11-03 11:02:50 +02:00
Kirill Bulatov f58cd0b999 Rework prettier installation and start 2023-11-03 11:02:50 +02:00
Kirill Bulatov f104a3a48a Add prettier workspace resolution test 2023-11-03 11:02:50 +02:00
Kirill Bulatov c5d357890a Start message numbering during prettier init, log error message text 2023-10-30 22:26:06 +02:00
Kirill Bulatov 32aa09edf8 Be more lenient when searching for prettier instance
Do not check FS for existence (we'll error when start running prettier),
simplify the code for looking it up
2023-10-30 12:13:58 +02:00
Kirill Bulatov baffccd01d Do not panic on prettier search 2023-10-30 12:13:54 +02:00
Kirill Bulatov 5e463bcb12 Properly log prettier paths 2023-10-30 11:14:00 +02:00
Julia b13da646e8 Capture language server stderr during startup/init and log if failure 2023-10-26 12:29:22 +02:00
Kirill Bulatov ab12b3c6e1 Rework prettier tests
Do not infuse `FakeNodeRuntime` with prettier exceptions, rather keep
the default formatter installation method as no-op.
2023-10-24 14:25:46 +02:00
Kirill Bulatov fb3932aa57 Move prettier parsers data into languages from LSP adapters 2023-10-21 01:14:03 +02:00
Kirill Bulatov 1fe640e35e Fix tailwind prettier plugin discovery 2023-10-12 15:58:00 +03:00
Kirill Bulatov 31cb6e46be Make all formatting to happen on the client's buffers, as needed 2023-10-12 15:29:57 +03:00
Kirill Bulatov 7c90ad59a6 Make the first prettier test pass 2023-10-12 13:30:49 +03:00
Kirill Bulatov 41d699ac40 Prettier server style fixes 2023-10-12 12:31:30 +03:00
Kirill Bulatov 61f321016d Add prettier tests infrastructure 2023-10-11 19:13:28 +03:00
Kirill Bulatov a29eef27be Small style fixes 2023-10-11 12:56:29 +03:00
Kirill Bulatov 9b27d92c37 Draft remote prettier formatting 2023-10-11 12:56:29 +03:00
Kirill Bulatov 88145b6ab7 Invoke remote Prettier commands 2023-10-11 12:56:29 +03:00
Kirill Bulatov 1c32c3d5b3 Draft local and remote prettier separation 2023-10-11 12:56:29 +03:00
Kirill Bulatov c863818969 Better detect Svelte plugins 2023-10-11 12:56:29 +03:00
Kirill Bulatov 29c08652a8 Better prettier format logging 2023-10-11 12:56:29 +03:00
Kirill Bulatov 7c20de9af8 Resolve prettier config before every formatting 2023-10-11 12:56:29 +03:00
Kirill Bulatov 6a9e12f9c2 Properly support prettier plugins 2023-10-11 12:56:29 +03:00
Kirill Bulatov 2dfddc6d98 Do not clear cache for default prettiers 2023-10-11 12:56:29 +03:00
Kirill Bulatov 1c58aafd9c Allow to configure default prettier 2023-10-11 12:56:29 +03:00
Kirill Bulatov 87907a227a Resolve prettier config on server init 2023-10-11 12:56:29 +03:00
Kirill Bulatov 80a3a26532 Properly log pre-lsp prettier_server events 2023-10-11 12:56:29 +03:00
Kirill Bulatov 0d975919d2 Improve prettier_server LSP names in the log panel 2023-10-11 12:56:29 +03:00
Kirill Bulatov 5b5db55ba9 Before server startup, log to stderr 2023-10-11 12:56:29 +03:00
Kirill Bulatov eb5e438de4 Implement missing prettier_server clear method 2023-10-11 12:56:29 +03:00
Kirill Bulatov 95e5853096 Return message id in prettier_server error responses 2023-10-11 12:56:29 +03:00
Kirill Bulatov ddde313d2b Add prettier language servers to LSP logs panel 2023-10-11 12:56:29 +03:00
Kirill Bulatov fae35eb895 Even more generic header printing in prettier_server 2023-10-11 12:56:29 +03:00
Kirill Bulatov c5f35e1814 Generify prettier properties, add tabWidth 2023-10-11 12:56:29 +03:00