首页 > 其他分享 >6.服务端中设置Configuration

6.服务端中设置Configuration

时间:2023-04-08 09:23:03浏览次数:134  
标签:diagnosic textDocument uri range let result 设置 Configuration 服务端

笔记软件在2023/4/7 17:21:11推送该笔记

当我们写插件的客户端部分的时候,我们已经定义了一个控制最大问题报告数的配置。所以我们也可以在服务器中写一段读取客户端配置的代码

function getDocumentSettings(resource: string): Thenable<ExampleSettings> {
    if (!hasConfigurationCapability) {
        return Promise.resolve(globalSettings);
    }
    let result = documentSettings.get(resource);
    if (!result) {
        result = connection.workspace.getConfiguration({
            scopeUri: resource,
            section: 'languageServerExample'
        });
        documentSettings.set(resource, result);
    }
    return result;
}

现在唯一要做的事情就是在服务器端中监听用户修改的设置变动,然后重新验证已经打开的文本文件。为了重用文本变动事件的处理函数,我们把代码提取到validateTextDocument​函数中,然后新建一个maxNumberOfProblems​变量

async function validateTextDocument(textDocument: TextDocument): Promise<void> {
    // 在这个简单的示例中,每次校验运行时我们都获取一次配置
    let settings = await getDocumentSettings(textDocument.uri);

    // 校验器如果检测到连续超过2个以上的大写字母则会报错
    let text = textDocument.getText();
    let pattern = /\b[A-Z]{2,}\b/g;
    let m: RegExpExecArray;

    let problems = 0;
    let diagnostics: Diagnostic[] = [];
    while ((m = pattern.exec(text)) && problems < settings.maxNumberOfProblems) {
        problems++;
        let diagnosic: Diagnostic = {
            severity: DiagnosticSeverity.Warning,
            range: {
                start: textDocument.positionAt(m.index),
                end: textDocument.positionAt(m.index + m[0].length)
            },
            message: `${m[0]} is all uppercase.`,
            source: 'ex'
        };
        if (hasDiagnosticRelatedInformationCapability) {
            diagnosic.relatedInformation = [
                {
                    location: {
                        uri: textDocument.uri,
                        range: Object.assign({}, diagnosic.range)
                    },
                    message: 'Spelling matters'
                },
                {
                    location: {
                        uri: textDocument.uri,
                        range: Object.assign({}, diagnosic.range)
                    },
                    message: 'Particularly for names'
                }
            ];
        }
        diagnostics.push(diagnosic);
    }

    // 将错误处理结果发送给VS Code
    connection.sendDiagnostics({ uri: textDocument.uri, diagnostics });
}

添加一个通知处理函数监听配置文件变动。

connection.onDidChangeConfiguration(change => {
    if (hasConfigurationCapability) {
        // 重置所有文档设置的缓存
        documentSettings.clear();
    } else {
        globalSettings = <ExampleSettings>(
            (change.settings.languageServerExample || defaultSettings)
        );
    }

    // 重新验证所有打开的文本文档
    documents.all().forEach(validateTextDocument);
});

再次启动客户端,然后把设置中的maximum report改为1,就能看到:

标签:diagnosic,textDocument,uri,range,let,result,设置,Configuration,服务端
From: https://www.cnblogs.com/myfriend/p/configuration-is-set-in-the-server-zsxybo.html

相关文章

  • 2.实现语言服务端
    笔记软件在2023/4/614:01:06推送该笔记LanguageServer这个语言服务器的源码在/server中。比较重要的pacakge.json部分是"dependencies":{"vscode-languageserver":"^6.1.1","vscode-languageserver-textdocument":"^1.0.1"}下面是一个服务器的......
  • django中使用orm连接mysql,setting.py的设置
    默认使用的时sqllite数据库,我们需要改成mysql,只要需要填写相关信息即可。比如mysql的数据库名,用户名,密码,主机地址,端口等信息#Database#https://docs.djangoproject.com/en/4.1/ref/settings/#databases#DATABASES={#'default':{#'ENGINE':'django.db.b......
  • Aws上如何设置受限权限的账号
    近期,老板安排了一个要求,希望给新来的员工一个IAM用户,拥有除了修改其他用户信息之外,可以访问其他一切资源。同时,要求这个用户可以自己修改密码。PowerUserAccess经过查询官方资料,发现PowerUserAccess符合这个要求,貌似管理员之外的所有权限都满足。https://docs.aws.amazon.com/zh_cn......
  • 谷歌浏览器扩展快捷键冲突 设置
    ......
  • bandizip设置中文
    bandizip软件有各种各样的语言版本,最常用的应该就是中文版本和英文版本了,如果我们下载的bandizip软件打开是英文版本的话,可以通过设置将它设置成中文版本。bandizip设置中文版本教程1、打开bandizip软件,点击“options”,2、点击“settings”,3、点击左下角“language”,4、找......
  • SpringBoot @SpringBootApplication(exclude={DataSourceAutoConfiguration.calss})注
    @SpringBootApplication(exclude={DataSourceAutoConfiguration.calss})该注解的作用是,排除自动注入数据源的配置,用exclude属性进行排除指定的类,在springBoot中使用多数据源时,加上@SpringBootApplication(exclude={DataSourceAutoConfiguration.calss})DataSourceAutoConfigur......
  • 河北稳控科技便携式钻孔测斜仪测区如何设置
    河北稳控科技便携式钻孔测斜仪测区如何设置 完成当前测区的添加(新建)、删除操作。WIN5/612便携式钻孔测斜仪的数据以区域进行划分,一个区域代表一个地理区域,亦或是一个工程、一个工地。设备默认保存最近一次测量时使用测区名称,对同一测区进行测量时无需再次选择设置。若需......
  • SpringCloud 多个服务启动放在一个窗口下的设置
    进入.idea文件夹,在workspace.xml文件中加入如下配置即可<componentname="RunDashboard"><optionname="configurationTypes"><set><optionvalue="SpringBootApplicationConfigurationType"/></set&......
  • Java serialVersionUID 作用和自动生成设置
    JavaserialVersionUID作用和自动生成设置原文链接:https://blog.csdn.net/plqwf19880902/article/details/129103336一、由来最近在做一个军工的项目,代码提交后,军方用代码安全扫描工具,对代码进行全局扫描,提示一个漏洞,导致原因是实体类实现了Serializable接口,未对serialVer......
  • Halcon 常用设置
     1、可视化--更新窗口-- 在单步模式--总是   2、Ctrl+E  弹出内置的函数定义  3、打开工程的默认图片位置  ......