如何直接从终端 运行 Rust Analyzer?
How to run Rust Analyzer directly from terminal?
我正在尝试将 Rust Analyzer 与基于浏览器的编辑器集成。
我的第一步是直接从终端 运行 Rust Analyzer 并通过 stdio 发送请求。
$ rust-analyzer
> Content-Length:207\r\n\r\n{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":null,"rootPath":"/mnt/78b33d24-344b-43da-a40c-8b81a6fd0b34/projects/rustexplorer/quick_test","initializationOptions":{},"capabilities":{}}}
但是我得到了这个错误:
[ERROR rust_analyzer] Unexpected error: expected initialize request, got Err(RecvError)
expected initialize request, got Err(RecvError)
我在这里错过了什么?
只是因为\
r
\
n
这四个文字字符没有转化为\r
和[=17=这两个特殊字符] 当您直接在终端中输入它们时。
为了在终端中手动进行实验,您应该转换行尾。
$ sed -u -re 's/^(.*)$/\r/' | rust-analyzer
Content-Length: 207
{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":null,"rootPath":"/mnt/78b33d24-344b-43da-a40c-8b81a6fd0b34/projects/rustexplorer/quick_test","initializationOptions":{},"capabilities":{}}}
... then the response is displayed here ...
注意我们这里按的是Enter
键;我们不尝试输入 \n
特殊字符。
再三考虑,我认为在这种情况下(交互式终端)您应该提供 Content-Length: 209
因为 json 内容将以 \r\n
结尾(多两个字节, 作为分隔符被忽略)。
这样,可以在下一行输入下一个请求。
如果您保留 207
,那么您的下一个请求应该与 json 内容在同一行开始(就在最后一个 }
之后)。
另一个解决方案是更改终端的设置。
stty -icrnl
使 Enter
键产生 \r
(control-M) 字符;然后您必须输入 control-J 以生成 \n
字符。
$ stty -icrnl
$ rust-analyser
Content-Length: 208^M <-- Enter + control-J
^M <-- Enter + control-J
{"jsonrpc":"2.0", ... ,"capabilities":{}}} <-- control-J
... the response is displayed here ...
我正在尝试将 Rust Analyzer 与基于浏览器的编辑器集成。
我的第一步是直接从终端 运行 Rust Analyzer 并通过 stdio 发送请求。
$ rust-analyzer
> Content-Length:207\r\n\r\n{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":null,"rootPath":"/mnt/78b33d24-344b-43da-a40c-8b81a6fd0b34/projects/rustexplorer/quick_test","initializationOptions":{},"capabilities":{}}}
但是我得到了这个错误:
[ERROR rust_analyzer] Unexpected error: expected initialize request, got Err(RecvError)
expected initialize request, got Err(RecvError)
我在这里错过了什么?
只是因为\
r
\
n
这四个文字字符没有转化为\r
和[=17=这两个特殊字符] 当您直接在终端中输入它们时。
为了在终端中手动进行实验,您应该转换行尾。
$ sed -u -re 's/^(.*)$/\r/' | rust-analyzer
Content-Length: 207
{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":null,"rootPath":"/mnt/78b33d24-344b-43da-a40c-8b81a6fd0b34/projects/rustexplorer/quick_test","initializationOptions":{},"capabilities":{}}}
... then the response is displayed here ...
注意我们这里按的是Enter
键;我们不尝试输入 \n
特殊字符。
再三考虑,我认为在这种情况下(交互式终端)您应该提供 Content-Length: 209
因为 json 内容将以 \r\n
结尾(多两个字节, 作为分隔符被忽略)。
这样,可以在下一行输入下一个请求。
如果您保留 207
,那么您的下一个请求应该与 json 内容在同一行开始(就在最后一个 }
之后)。
另一个解决方案是更改终端的设置。
stty -icrnl
使 Enter
键产生 \r
(control-M) 字符;然后您必须输入 control-J 以生成 \n
字符。
$ stty -icrnl
$ rust-analyser
Content-Length: 208^M <-- Enter + control-J
^M <-- Enter + control-J
{"jsonrpc":"2.0", ... ,"capabilities":{}}} <-- control-J
... the response is displayed here ...