我正在尝试将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)我在这里错过了什么?
发布于 2022-05-27 08:30:13
这仅仅是因为在终端中直接输入四个文字字符\ r \ n没有转换成两个特殊字符\r和\n。
为了在终端上手工实验,你应该转换线路结束。
$ sed -u -re 's/^(.*)$/\1\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)字符;然后必须输入control来生成\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 ...https://stackoverflow.com/questions/72401802
复制相似问题