首页 > 其他分享 >1.实现语言客户端

1.实现语言客户端

时间:2023-04-08 09:11:33浏览次数:31  
标签:插件 语言 实现 vscode client let 服务器 客户端

笔记软件在2023/4/6 14:01:04推送该笔记

Language Client

"activationEvents": [
    "onLanguage:plaintext"
]

这个部分告诉VS Code只要打开纯文本文件之后就立刻激活插件(例如:打开一个.txt​文件)

"configuration": {
    "type": "object",
    "title": "Example configuration",
    "properties": {
        "languageServerExample.maxNumberOfProblems": {
            "scope": "resource",
            "type": "number",
            "default": 100,
            "description": "Controls the maximum number of problems produced by the server."
        }
    }
}

这个部分配置了用户可以自定义的configuration​,用户通过这个配置可以在设置中对你的插件做一些修改。

真正的语言客户端代码和对应的package.json​在/client​文件夹中
package.json​最有趣的部分是vscode​插件主机API和vscode-languageclient​这两个依赖库。

"engines": {
    "vscode": "^1.43.0"
},
"dependencies": {
    "vscode-languageclient": "^6.1.3"
}

客户端实现就是一个普通的VS Code插件,它有使用全部VS Code API的能力

下面是extension.ts文件的对应内容,也是lsp-sample插件的入口:

import * as path from 'path';
import { workspace, ExtensionContext } from 'vscode';

import {
    LanguageClient,
    LanguageClientOptions,
    ServerOptions,
    TransportKind
} from 'vscode-languageclient';

let client: LanguageClient;

export function activate(context: ExtensionContext) {
    // 服务器由node实现
    let serverModule = context.asAbsolutePath(
        path.join('server', 'out', 'server.js')
    );
    // 为服务器提供debug选项
    // --inspect=6009: 运行在Node's Inspector mode,这样VS Code就能调试服务器了
    let debugOptions = { execArgv: ['--nolazy', '--inspect=6009'] };

    // 如果插件运行在调试模式那么就会使用debug server options
    // 不然就使用run options
    let serverOptions: ServerOptions = {
        run: { module: serverModule, transport: TransportKind.ipc },
        debug: {
            module: serverModule,
            transport: TransportKind.ipc,
            options: debugOptions
        }
    };

    // 控制语言客户端的选项
    let clientOptions: LanguageClientOptions = {
        // 注册纯文本服务器
        documentSelector: [{ scheme: 'file', language: 'plaintext' }],
        synchronize: {
            // 当文件变动为'.clientrc'中那样时,通知服务器
            fileEvents: workspace.createFileSystemWatcher('**/.clientrc')
        }
    };
    // 创建语言客户端并启动
    client = new LanguageClient(
        'languageServerExample',
        'Language Server Example',
        serverOptions,
        clientOptions
    );

    // 启动客户端,这也同时启动了服务器
    client.start();
}

export function deactivate(): Thenable<void> {
    if (!client) {
        return undefined;
    }
    return client.stop();
}

标签:插件,语言,实现,vscode,client,let,服务器,客户端
From: https://www.cnblogs.com/myfriend/p/realize-language-client-1yqqg3.html

相关文章

  • 2.实现语言服务端
    笔记软件在2023/4/614:01:06推送该笔记LanguageServer这个语言服务器的源码在/server中。比较重要的pacakge.json部分是"dependencies":{"vscode-languageserver":"^6.1.1","vscode-languageserver-textdocument":"^1.0.1"}下面是一个服务器的......
  • Angular + quill实现富文本编辑器
    前言由于需要一个富文本编辑器来编辑一些网页内容,手动编辑后存储到数据库比较麻烦,所以着手实现一个自己的富文本编辑器,来编辑和存储一些html文件.这里使用Angular框架,加Quill库实现.ngx-quill:https://github.com/KillerCodeMonkey/ngx-quillquill官网:https://quil......
  • C语言 原码 反码 补码
    1.任何类型的数据在计算机中都是以二进制补码形式存储2.原码:最高位为符号位,用0表示正数,用1表示负数,其他位是相应数的2进制数反码:除符号位外按位取反,0变为1,1变为0补码:反码再加13.正数的原码反码补码都相同65的原码反码补码都是:0000000000000000000000000100000......
  • 学习C语言第六天
    一.多维数组元素的地址#include<stdio.h>intmain(){intarr[3][4]={{11,22,33,44},{12,13,15,16},{22,66,77,88}};inti;intj;for(i=0;i<3;i++){for(j=0;j<4;j++){printf("add:0x%p,data:%d",&arr[i......
  • #yyds干货盘点#学习笔记(1)Linux和Windows上实现端口映射
    一、Windows下实现端口映射1.查询端口映射情况netshinterfaceportproxyshowv4tov42.查询某一个IP的所有端口映射情况netshinterfaceportproxyshowv4tov4|find"[IP]"例:netshinterfaceportproxyshowv4tov4|find"192.168.1.1"3.增加一个端口映射netshinterfa......
  • 链表的回文判断—Java实现
    对于这个题,主要是老是局限于方法内的变量,未想到借助外部变量辅助:具如下,不可用数除法,会溢出异常:即使是取最大的long也会溢出,常规方法不再赘述,具体以代码如下:1packageProblemSolve;23publicclassSolution5{4privateListNodefrontNode;5publicboolean......
  • Python实现Json文件转为点表示法(Dot-Notation)
    将Json转换为点表示法有很多用途,本文基于Python实现一个简单demo来转换。【原文见我的博客,如有更新请博客园的不一定及时同步改:https://blog.jfz.me/2023/python-json-to-dot-notation.html】{"vehicle":{"car":{"bmw":true,"audi"......
  • 用Abp实现双因素认证(Two-Factor Authentication, 2FA)登录(一):认证模块
    @目录原理用户验证码校验模块双因素认证模块改写登录在之前的博文用Abp实现短信验证码免密登录(一):短信校验模块一文中,我们实现了用户验证码校验模块,今天来拓展这个模块,使Abp用户系统支持双因素认证(Two-FactorAuthentication)功能。双因素认证(Two-FactorAuthentication,简称2FA......
  • R语言EG(Engle-Granger)两步法协整检验、RESET、格兰杰因果检验、VAR模型分析CPI和PPI
    全文链接:http://tecdat.cn/?p=31108最近我们被客户要求撰写关于VAR模型的研究报告,包括一些图形和统计输出。作为衡量通货膨胀的基本指标,消费者价格指数CPI和生产者价格指数PPI的作用关系与传导机制一直是宏观经济研究的核心问题。对此问题的研究显然具有重要的学术价值与现实意......
  • R语言预测人口死亡率:用李·卡特(Lee-Carter)模型、非线性模型进行平滑估计|附代码数据
    全文链接:http://tecdat.cn/?p=26147最近我们被客户要求撰写关于预测人口死亡率的研究报告,包括一些图形和统计输出。今天早上,我和同事一起分析死亡率。我们在研究人口数据集,可以观察到很多波动性我们得到这样的结果:  由于我们缺少一些数据,因此我们想使用一些广义非线性模......