信创之国产浪潮电脑+统信UOS操作系统体验7:VSCode任务tasks.json的问题匹配器problemMatcher详解

本文主要是介绍信创之国产浪潮电脑+统信UOS操作系统体验7:VSCode任务tasks.json的问题匹配器problemMatcher详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython

一、引言

最近在国产操作系统上使用Visual Studio Code的任务配置,发现tasks下的问题匹配器problemMatcher公开资料很少或很简单,直接在某度上通过problemMatcher搜索基本上没有精确匹配的信息,为此老猿决定仔细研究一下相关内容。

二、简介

在 VS Code 中,tasks.json 文件中的 problemMatcher 字段用于定义如何解析任务输出中的问题(错误、警告等)。

problemMatcher是一个描述问题匹配器的接口,配置VS Code中的问题匹配规则,用于在VS Code中处理和显示问题。问题匹配器可以根据指定的模式匹配问题,将其转换为VS Code可以理解的格式,并且可以通过单击问题列表中的问题来跳转到源代码中的相应位置。

三、问题匹配器影响的输出内容

下面是vscode中编译一个hello.cpp文件的警告信息输出截图:
在这里插入图片描述
但这只是执行编译的信息输出,并不是问题匹配器控制的输出,问题匹配器控制的输出在问题这个输出面板,如图:
在这里插入图片描述
通过点击该面板中的问题面板的输出记录才会定位到对应的问题代码。

四、问题匹配器problemMatcher官方定义

问题匹配器problemMatcher的类型为ProblemMatcher,其官方定义如下:

interface ProblemMatcher {/*** The name of a base problem matcher to use. If specified the* base problem matcher will be used as a template and properties* specified here will replace properties of the base problem* matcher*/base?: string;/*** The owner of the produced VS Code problem. This is typically* the identifier of a VS Code language service if the problems are* to be merged with the one produced by the language service* or 'external'. Defaults to 'external' if omitted.*/owner?: string;/*** A human-readable string describing the source of this problem.* E.g. 'typescript' or 'super lint'.*/source?: string;/*** The severity of the VS Code problem produced by this problem matcher.** Valid values are:*   "error": to produce errors.*   "warning": to produce warnings.*   "info": to produce infos.** The value is used if a pattern doesn't specify a severity match group.* Defaults to "error" if omitted.*/severity?: string;/*** Defines how filename reported in a problem pattern* should be read. Valid values are:*  - "absolute": the filename is always treated absolute.*  - "relative": the filename is always treated relative to*    the current working directory. This is the default.*  - ["relative", "path value"]: the filename is always*    treated relative to the given path value.*  - "autodetect": the filename is treated relative to*    the current workspace directory, and if the file*    does not exist, it is treated as absolute.*  - ["autodetect", "path value"]: the filename is treated*    relative to the given path value, and if it does not*    exist, it is treated as absolute.*  - "search": performs a deep (and, possibly, heavy) file system*    search within the directories.*  - ["search", {include: ["${workspaceFolder}"]}]: performs*    a deep search among the directories given in the "include" array.*  - ["search", {include: ["${workspaceFolder}"], exclude: []}]:*    performs a deep search among the directories given in the "include"*    array, excluding those named in the "exclude" array.*/fileLocation?: string | string[] | ['search', { include?: string[]; exclude?: string[] }];/*** The name of a predefined problem pattern, the inline definition* of a problem pattern or an array of problem patterns to match* problems spread over multiple lines.*/pattern?: string | ProblemPattern | ProblemPattern[];/*** Additional information used to detect when a background task (like a watching task in Gulp)* is active.*/background?: BackgroundMatcher;
}

五、详解

下面我们逐一解释ProblemMatcher的各个元素。

5.1、base

字符串类型,将其英文注释翻译一下:要使用的基本问题匹配器的名称。如果指定基本问题匹配器将用作模板,此处指定的属性将替换基本问题匹配程序的属性。

具体的意思,老猿理解好比如C++中的父类和子类一样的关系,但经老猿测试,无法使用自定义的问题匹配器作为基本问题匹配器,但可以使用类似“$gcc”这样的预定义问题匹配器。

下面是老猿测试的一个问题匹配器,用于匹配C++输出的note信息,将其作为warning信息输出:

 {"base":"$gcc","owner": "problem_note","source":"C++","severity": "warning","pattern":          {"regexp": "^(.*):(\\d+):(\\d+):\\s+(note):\\s+(.*)$",}}

可以看到这个问题匹配器没有配置各个匹配组号与输出信息的对应关系。

5.2、owner

字符串类型,按照官方文档的英文注释,意思为:生成的VS代码问题的所有者。如果问题要与开发语言提供内容或“external”产生的问题合并,这通常是VS代码语言服务的标识符。如果省略,则默认为“external”。

老猿通常用于将其标识为配置的问题匹配器的名称,在问题面板输出问题的“源”这一列显示,这种理解与上面的注释不符合,但老猿没有看到配置问题匹配器名称的地方,又只有这个可以区分问题来源于哪个问题匹配器,因此就这样理解了。

5.3、source

字符串类型,一个认为标记的可读信息串,用于描述问题的来源,一般用于标记开发语言的类型,感觉没啥用途。

5.4、severity

字符串类型,用于描述问题匹配器匹配问题的严重程度,包括三种取值 “error”、“warning”、“info”,更多内容请参考老猿在CSDN的博文《VSCode任务tasks.json中的问题匹配器problemMatcher和ProblemPattern的severity属性关系》。

5.5、fileLocation

fileLocation可以是一个字符串、字符串数组或一个包含include和exclude属性的对象,用于设置哪些文件参与问题匹配处理。fileLocation可以有以下取值:

  • “absolute”:表示文件路径是绝对路径;
  • “relative”:表示文件路径是相对于工作区根目录的路径,这是默认值;
  • [“relative”, “path value”]: 表示文件路径是相对“path value”指定的路径;
  • “autodetect”:表示VS Code将尝试自动检测文件路径的类型,vscode默认将文件路径是相对工作区目录的路径,如果此时找不到文件,则作为绝对路径进行文件匹配;
  • [“autodetect”, “path value”]: 表示VS Code将尝试自动检测文件路径的类型,vscode默认将文件路径是相对 "path value"指定目录的路径,如果此时找不到文件,则作为绝对路径进行文件匹配;
  • “search”:表示文件需要在对应的目录中深度搜索;
  • [“search”, {include: [“${workspaceFolder}”]}]:在include指定目录数组中执行深度搜索;
  • [“search”, {include: [“${workspaceFolder}”], exclude: []}]:在include指定目录数组中执行深度搜索,但排除exclude指定数组中的目录

5.6、pattern

字符串类型,表示问题匹配模式,详细内容请参考老猿在CSDN的博文《VSCode任务tasks.json中的问题匹配器problemMatcher的问题匹配模式ProblemPattern详解》的介绍。

5.7、background

其类型为BackgroundMatcher,用于检测后台任务(如Gulp中的监视任务)何时处于活动状态的附加信息。

BackgroundMatcher是VS Code中的一个后台任务匹配器,它有activeOnStart、beginsPattern、endsPattern三个属性,具体含义如下:

  • activeOnStart:一个布尔值,如果设置为true,表示监视器在任务开始时为激活模式,这相当于提交一个与beginPattern匹配的行,默认值为false
  • beginsPattern:一个正则表达式,用于检测任务何时开始,如果在输出中匹配到beginsPattern信息,则用信号通知后台任务开始
  • endsPattern:一个正则表达式,用于检测任务何时结束。如果在输出中匹配到endsPattern信息,则用信号通知后台任务结束。

关于BackgroundMatcher,老猿暂时没进行详细测试研究,以后如果研究了再单独介绍。

六、小结

本文详细介绍了VSCode任务的问题匹配器problemMatcher的用途以及详细配置项,通过了解这些知识,有助于更好地使用vscode。

写博不易,敬请支持

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

更多关于vscode使用方面的问题的内容请参考专栏《国产信创之光》的相关文章。

关于老猿的付费专栏

  1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
  4. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░

这篇关于信创之国产浪潮电脑+统信UOS操作系统体验7:VSCode任务tasks.json的问题匹配器problemMatcher详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/426828

相关文章

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四