赞
踩
LSP
是Language Server Protocol 的缩写,它定义了一种标准化的协议,用于编辑器和语言工具之间的通信。这个协议定义了编辑器可以向语言工具查询的功能,同时还定义了语言工具可以向编辑器发送的信息。开发人员可以在多个编辑器中使用同一种语言工具,无需了解编辑器的具体实现细节。
LSP
可以提供多种功能,例如语法分析、代码高亮、错误检查、代码重构以及文档导航等。通过使用 LSP
,我们可以在不同的编辑器和语言工具之间共享这些功能,让开发变得更加高效和一致。
创建一个新文件夹,并在Visual Studio Code中打开它。
添加一个名为 package.json
的新文件,并填写以下细节:
{
“name”: “lsp-demo”,
“version”: “0.0.1”,
“dependencies”: {
“vscode”: “^1.32.0”
}
}
这个文件告诉 npm
(Node.js
包管理器)你的项目依赖于 VSCode
扩展 API
。
创建一个名为 src
的新文件夹,并添加一个名为 server.ts
的文件。
在 server.ts
中,添加下面的代码:
import * as vscode from 'vscode'; import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind } from 'vscode-languageclient'; let client: LanguageClient; export function activate(context: vscode.ExtensionContext) { const serverOptions: ServerOptions = { run: { command: 'node', args: ['./src/server.js'], transport: TransportKind.stdio }, debug: { command: 'node', args: ['--inspect-brk=0', './src/server.js'], transport: TransportKind.stdio } }; const clientOptions: LanguageClientOptions = { documentSelector: ['javascript'], synchronize: { configurationSection: 'lsp-sample' } }; client = new LanguageClient( 'lsp-sample', 'LSP Sample', serverOptions, clientOptions ); client.start(); }
这段代码为名称为 lsp-sample
的新 LanguageClient
创建对象,并启动它。
src
文件夹中创建另一个名为 server.js
的文件,添加以下代码:const { createConnection } = require('vscode-languageserver/node'); const { TextDocuments } = require('vscode-languageserver/node'); const { TextDocument } = require('vscode-languageserver-textdocument'); const connection = createConnection(); const documents = new TextDocuments(TextDocument); connection.onInitialize(() => { return { capabilities: { textDocumentSync: documents.syncKind, completionProvider: { resolveProvider: true } } }; }); connection.onInitialized(() => { connection.client.register(DidChangeConfigurationNotification.type, undefined); }); documents.onDidChangeContent((change) => { connection.console.log('Content changed!'); }); connection.onCompletion((textDocumentPosition) => { return [ { label: 'TypeScript', kind: CompletionItemKind.Text, data: 1 }, { label: 'JavaScript', kind: CompletionItemKind.Text, data: 2 } ]; }); documents.listen(connection); connection.listen();
这段代码创建了一个新的语言服务器,支持文本同步、配置更改和完成提供程序。
VSCode
中启动客户端运行演示。打开一个扩展名为 .js
的新文件并开始输入。你应该会在编辑器中看到自动完成建议弹出。现在,越来越多的工具开始使用LSP,包括:
以下是应用了 LSP
的开源代码,可作为实现参考:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。