首页 > 其他分享 >3.语法校验器

3.语法校验器

时间:2023-04-08 09:11:22浏览次数:43  
标签:textDocument uri 校验 diagnostic 语法 range let

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

添加一个简单的语法校验器

为了给服务器添加文本校验,我们给text document manager添加一个listener然后在文本变动时调用,接下来就交给服务器去判断调用校验器的最佳时机了。在我们的示例中,服务器的功能是校验纯文本然后给所有大写单词进行标记。对应的代码片段

// 文本文件的内容改变时。文档首次打开或者文档内容修改时会触发这个事件。
documents.onDidChangeContent(async change => {
  let textDocument = change.document;
  // 这个简单示例中,每次校验时我们都获取一次设置
  let settings = await getDocumentSettings(textDocument.uri);

  // 校验器会检查所有的大写单词是否超过 2 个字母
  let text = textDocument.getText();
  let pattern = /\b[A-Z]{2,}\b/g;
  let m: RegExpExecArray | null;

  let problems = 0;
  let diagnostics: Diagnostic[] = [];
  while ((m = pattern.exec(text)) && problems < settings.maxNumberOfProblems) {
    problems++;
    let diagnostic: 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) {
      diagnostic.relatedInformation = [
        {
          location: {
            uri: textDocument.uri,
            range: Object.assign({}, diagnostic.range)
          },
          message: 'Spelling matters'
        },
        {
          location: {
            uri: textDocument.uri,
            range: Object.assign({}, diagnostic.range)
          },
          message: 'Particularly for names'
        }
      ];
    }
    diagnostics.push(diagnostic);
  }

  // 将诊断信息发送给 VS Code
  connection.sendDiagnostics({ uri: textDocument.uri, diagnostics });
});

标签:textDocument,uri,校验,diagnostic,语法,range,let
From: https://www.cnblogs.com/myfriend/p/grammatical-laboratory-z2oscnw.html

相关文章

  • 元祖基本语法
    '''元组'''#定义方法defget_num():#1.定义一个元祖tuple_one=("fqs",18,"f",18,18,18,18)print(f"tuple_one元祖:{tuple_one}")#2.单个元祖内元素要注意("fqs")类型是str字符串;("fqs",)类......
  • hibernate-validator 主动调用进行参数校验
    问题背景hibernate-validator一般通过在对象或者类上加注解的方式对Controller中的方法参数进行校验,现需要在其他地方也可对主动对对象中的参数进行校验代码importlombok.experimental.UtilityClass;importjavax.validation.ConstraintViolation;importjavax.validatio......
  • 语法:过去完成时
    过去完成时过去完成时的结构是:主语+had+动词过去分词①肯定句:主语+had+动词过去分词+其他.②否定句:主语+had+not+动词过去分词+其他.③一般疑问句:Had+主语+动词过去分词+其他?肯定回答:Yes,主语+had.否定回答:No,主语+hadn't.④特殊疑问句:特殊疑问词或词组+had+主语+过去分词+......
  • 英语语法总结
    现在完成时现在完成时的构成基本结构为:主语+have/has+动词的过去分词,常搭配的状语有already、yet、sofar等。现在完成时的构成具体用法表示动作发生在过去的动作对现在造成的影响或者结果,而这种影响或者结果往往是说话人的兴趣所在。常用的状语有already,yet,notyet,no......
  • 身份证精确校验
    一、es6版本constvalidateIdent={aIdentityCode_City:{//城市代码列表11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:&q......
  • 001-java-markdown语法
    typora中的markdown语法一、标题: 最多支持六级标题文字,或者command+0~6调整标题级别command+/-调整级别一级标题:markdown学习二级标题三级标题四级标题五级标题六级标题 二、字体Hello,world!粗体字:两边加2个**/command+BHello,world!斜体字:两边加1个/comman......
  • BiSyn GAT+:用于基于方面的情绪分析的双语法感知图形注意力网络
    基于方面的情绪分析(ABSA)是一种细粒度的情绪分析任务,旨在调整方面和相应的情绪,以进行特定方面的情绪极性推断。这很有挑战性,因为一个句子可能包含多个方面或复杂的(例如,条件关系、协调关系或对抗关系)。近年来,利用图神经网络挖掘依赖语法信息已成为最流行的趋势。尽管它取得了成功,但......
  • svn清理时提示:没有校验和记录,因此不能从原始内容仓库中安装
      1.进入官网https://www.sqlite.org/download.html2.找到sqlite-dll-win32-x86-3410200.zip下载  3.解压后复制sqlite3.exe到无法清理svn的那个路径地下的.svn文件夹 如果找不到.svn文件夹,勾选下方    4.在当前文件夹下运行cmd执行以下语句5.再之后就......
  • 思考 TypeScript namespace,复习 class 语法
    前言据我所知,早期JavaScript没有class语法,很多都是函数,即便是现在的class本质上也是一个函数。在这里不说函数与class之间的关系和区别。下面将从class语法上讲解,阐述为什么有class以及作用;对class语法进行了探讨之后,再思考TypeScript的namespace给我们带来......
  • 2-Java基础语法
    1.注释注释是对代码的解释和说明文字。Java中的注释分为三种:单行注释://这是单行注释文字多行注释:/_这是多行注释文字这是多行注释文字这是多行注释文字_/注意:多行注释不能嵌套使用。文档注释(暂时用不到):/*_这是多行注释文字这是多行注释文字这是多......