我有一个个人编辑器,它实现了自己的代码完成“协议”,并且想切换到语言服务器协议以减轻自己的一些开发负担。然而我还不能完全理解有关客户端实现的LSP 文档。它与服务器实现混合在一起,无法找到两者之间明显的区别。
许多在线文档(包括有关 SO 的问题)都是围绕 VSCode 扩展展开的,我对这些扩展的了解为零并且没有帮助。
如果您能帮助我开始编写一个仅查询自动完成功能的简单客户端,我将不胜感激。我用 C++ 编写编辑器,并且非常感谢任何解释如何创建客户端的教程。我可以理解 Python、C、C#、Pure JavaScript、C++、PHP 和类似语言,因此我可以轻松遵循这些语言的任何教程。
如果有任何不清楚的地方,请告诉我,以便我进行解释(这是我在 LSP 中的第一篇文章:))
我想VSCode用语义高亮支持编写语言服务器.我使用的语言有非常复杂的规则,所以我不想依赖于标记器来区分标识符和关键字.
我已经有了语言服务VS Community,在那里我编写了自己的分类器.可以编写自己的分类器VSCode,或者只是将文档着色的方法是将TextMate语言规范文件添加到VScode包中吗?
syntax-highlighting visual-studio-code vscode-extensions language-server-protocol
我花了很多时间弄清楚如何在 neovim 中使用 Python (3) 的语言服务器协议 (LSP)。主要是我在寻找 Python 3 的自动完成功能,它是像 PySide2 这样的模块。
遗憾的是,我无法让我的配置文件 (.config/vim/init.vim) 工作。我知道github上有很多。但是它们包含了如此多的附加功能,我还没有能够根据我的需要调整其中的一个。还有一些也已经过时了。
所以这是我迄今为止尝试过的:
www.langserver.org 有很长的语言客户端和服务器列表。
我为 Python 安装了 Palantirs 语言服务器协议(https://github.com/palantir/python-language-server):
pip3 install 'python-language-server[all]'
Run Code Online (Sandbox Code Playgroud)
在下一步中,我通过 vim-plug 为 neovim 安装了一个语言客户端。实际上我尝试了几个,但让我们坚持以 ale 为例(https://github.com/dense-analysis/ale):
call plug#begin('~/.local/share/nvim/plugged')
" Plugins:
Plug 'dense-analysis/ale'
" Initialize plugin system
call plug#end()
Run Code Online (Sandbox Code Playgroud)
并通过安装它 :PlugInstall
然后必须在加载 Ale 之前对自动完成功能进行设置:
" initialize before ale is loaded
let g:ale_completion_enabled = 1
Run Code Online (Sandbox Code Playgroud)
要与 Omnicompletion 一起使用,还需要另外一项设置:
set omnifunc=ale#completion#OmniFunc
Run Code Online (Sandbox Code Playgroud)
经过更多的谷歌搜索,我读到我必须注册语言服务器(https://vi.stackexchange.com/questions/20958/use-the-pyls-python-lsp-with-ale-on-neovim):
if executable('pyls')
au User lsp_setup call lsp#register_server({
\ …Run Code Online (Sandbox Code Playgroud) 当我打开 python 文件时,诊断似乎工作正常。然后,我导航到出现诊断错误的行,按快捷方式调用代码操作(在我的例子中为“<space>ca”),然后收到一条消息“没有可用的代码操作”。我尝试运行它以解决不同的错误,例如以下错误:
b =1 #E225 missing whitespace around operator
from jinja2 import StrictUndefined #'jinja2.StricUndefined' imported but unused
import jjj # import-error: Unable to import 'jjj'
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试了两个 LSP 服务器:pyright 和 pylsp,两者都给了我相同的“没有可用的代码操作”
我见过类似的问题,但 JavaScript在这里询问,它建议安装一个插件,但这对我不起作用。
neovim language-server-protocol pyright python-language-server nvim-lspconfig
我目前的设置如下:
local cwd = vim.fn.getcwd()
local project_library_path = cwd .. "/node_modules"
local cmd = {
DATA_PATH .. "/lsp_servers/angularls/node_modules/@angular/language-server/bin/ngserver",
"--ngProbeLocations",
project_library_path,
"--tsProbeLocations",
project_library_path ,
"--stdio",
}
require'lspconfig'.angularls.setup{
cmd = cmd,
on_new_config = function(new_config, new_root_dir)
new_config.cmd = cmd
end
}
Run Code Online (Sandbox Code Playgroud)
在 上:LspInfo,我可以看到它cmd是可执行的,但不知何故它没有附加。
我很难@angular/language-server区分@angular/language-service...
我不确定 和 会做什么tsProbeLocations以及ngProbeLocations我的道路是否正确。
最后,我从Angular Language Service 网站上看到,neovim 没有一个好的指南。(除了coc-angular,但我不使用 coc。)
neovim angular language-server-protocol angular-language-service
我将创建一个与 javascript 非常相似的语言服务器。
有没有办法重用现有的 javascript 服务器来突出显示、自动完成、语法错误等?
我正在寻找的是扩展javascript语言服务器并提供额外的关键字、语法突出显示、自动完成等。
visual-studio-code vscode-extensions language-server-protocol
您可以在这里找到它的提及: https: //code.visualstudio.com/api/language-extensions/language-server-extension-guide ,但没有任何解释。我无法通过谷歌搜索找到有关它的信息。
文件的目的是什么.clientrc?
node.js visual-studio-code vscode-extensions language-server-protocol
许多 IDE 和插件都谈到提供一些 IDE 功能(例如自动完成、linting 和突出显示)的语言服务器。语言服务器只是在我的机器上运行的一些本地进程,还是我的代码被发送到某个地方进行分析(如果我没有互联网,功能会停止工作)。另外,如果代码被发送到某个地方,那怎么安全呢?
为什么该语言没有语言服务器协议emacs-lisp?例如,lsp-modeEmacs 包包含对多种语言及其相关语言服务器的支持。但不是emacs-lisp。
为什么会这样?
包裹也是如此eglot。