首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从终端直接运行锈蚀分析仪?

如何从终端直接运行锈蚀分析仪?
EN

Stack Overflow用户
提问于 2022-05-27 07:18:42
回答 1查看 288关注 0票数 2

我正在尝试将Rust Analyzer与基于浏览器的编辑器集成在一起。

我的第一步是直接从终端运行锈蚀分析器,并通过stdio发送请求。

代码语言:javascript
复制
$ 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":{}}}

但我发现了一个错误:

代码语言:javascript
复制
[ERROR rust_analyzer] Unexpected error: expected initialize request, got Err(RecvError)
expected initialize request, got Err(RecvError)

我在这里错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-27 08:30:13

这仅仅是因为在终端中直接输入四个文字字符\ r \ n没有转换成两个特殊字符\r\n

为了在终端上手工实验,你应该转换线路结束。

代码语言:javascript
复制
$ 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字符。

代码语言:javascript
复制
$ 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 ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72401802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档