近期遇到的vscode 插件开发的问题,when表达式,正则匹配路径

news/2025/3/16 5:47:51/

前言

最近在修改dbt插件的时候,遇到了几个比较奇怪的问题,猜测应该是因为跟新了VSCode导致的。
这里稍微记录一下,如果能帮助其他的同学,那就太值啦。

when 正则表达式

之前有在packgae.json 中使用 when 的正则表达式,来匹配某些目录路径来达到 在某个目录的菜单项注入菜单项。

比如下面这个,目录以project/models开头,并且资源类型是sql。
"when": "resourceDirname =~ /fizz\/models/ && resourceLangId == sql",

更新vscode后,需要这样写
"when": "resourceDirname =~ /fizz\\/models/ && resourceLangId == sql",

正则中的 / 需要一个转义符 //。 由之前的单斜杠,换为了 双斜杠。

注意注意。

变量的

如果你要做一个针对某个目录定制的右键按钮,那么你需要写这样一个when表达式。
"when": "resourceDirname =~ /fizz\\/models/ && explorerResourceIsFolder",

但有时你需要知道 resourceDirname 到底是什么。需要调试这个变量。
vscode官方为了 方便开发者,也提供了这样一个功能。
具体操作是

第一步:
在VSCode中,找到Help,点击下拉菜单项中的Toggle Developer Tools。

第二步: ctrl +shift +p 打开快捷命令,输入inspet, 找到Developer: Inspect Context Keys。 点击,然后再用鼠标点击你要查看的目录。

这样就会能在控制台看到所有的变量。如下图:
在这里插入图片描述

在window上,

resource: "file:///d%3A/Person/node-red/packages/node_modules/%40node-red"
resourceDirname: "d:\\Person\\node-red\\packages\\node_modules"
resourceExtname: ""
resourceFilename: "@node-red"
resourceLangId: "unknown"
resourcePath: "d:\\Person\\node-red\\packages\\node_modules\\@node-red"
resourceScheme: "file"

在mac系统上 路径分割符由 \\ 变为了 / 。 不同平台的开发体验让人真的很不爽。而且这个资源路径都是绝对路径,没有项目的相对路径。
此外想要吐槽的是resourceScheme 一直是file,不管你指向的是文件夹还是文件。

于是我再开发插件是,需要将when表达式,改为自己的本地路径,构建正式时还需要改成线上。都需要手动改,而且无法定义变量。

在本地是你的路径是绝对路径,但当 要构建一个为code-server使用的插件时
这个可恶的路径resourceDirname有又变成了以当前项目开始的相对路径。

是使用方式有问题?

不过我猜测,可能是版本的问题
本地 VScode

Version: 1.77.1 (user setup)
Commit: b7886d7461186a5eac768481578c1d7ca80e2d21
Date: 2023-04-04T23:21:11.906Z
Electron: 19.1.11
Chromium: 102.0.5005.196
Node.js: 16.14.2
V8: 10.2.154.26-electron.0
OS: Windows_NT x64 10.0.19044
Sandboxed: No

code-server 版本

code-server: v4.11.0
版本: 1.76.1
提交: 5e805b79fcb6ba4c2d23712967df89a089da575b
日期: 2023-03-14T20:11:32.198Z
浏览器: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36

有清楚的大佬可以回答一下。

查看所有的变量

when表达式的使用。

https://code.visualstudio.com/api/references/when-clause-contexts


http://www.ppmy.cn/news/48172.html

相关文章

flask-restful 和 blueprint

flask-restful 使用 flask-restful第三方库 from flask_restful import Resource, Api app Flask(__name__) api Api(app) class HelloWorldResource(Resource): def get(self): return {hello:world} def post(self): return {msg:‘post hello wolrd’} api…

非关系型数据库---Redis安装与基本使用

一、数据库类型 关系数据库管理系统(RDBMS)非关系数据库管理系统(NoSQL) 按照预先设置的组织机构,将数据存储在物理介质上(即:硬盘上) 数据之间可以做无关联操作 (例如: 多表查询,嵌套查询,外键等) 主流的RDBMS软件:My…

查询练习:查询所有学生的 s_no 、c_no 和 grade 列。

思路是,使用区间 ( BETWEEN ) 查询,判断学生的成绩 ( degree ) 在 grade 表的 low 和 upp 之间。 SELECT s_no, c_no, grade FROM score, grade WHERE degree BETWEEN low AND upp; -------------------- | s_no | c_no | grade | ------------------…

FPGA基于SFP光口实现10G万兆网UDP通信 10G Ethernet Subsystem替代网络PHY芯片 提供工程源码和技术支持

目录 1、前言2、我这里已有的UDP方案3、详细设计方案4、vivado工程详解5、上板调试验证并演示6、福利:工程代码的获取 1、前言 目前网上的fpga实现udp基本生态如下: 1:verilog编写的udp收发器,但不带ping功能,这样的代…

Ruby语言发展史(个人理解)

Ruby是一种动态、面向对象、通用的编程语言,它由松本行弘(Yukihiro Matsumoto)创造,最初于1995年发布。Ruby的设计目标是“人性化”,即让编程更加简单、自然和可读性强。Ruby的开发历程可以分为以下几个阶段。 1. Rub…

Python-DQN代码阅读(12)

目录 1.代码 1.1代码解读 1.2 代码分解 1.2.1 latest_checkpoint tf.train.latest_checkpoint(checkpoint_dir) 1.2.2 saver.restore(sess, latest_checkpoint) 1.2.3 sess.run(tf.global_variables_initializer()) 1.2.4 deep_q_learning() 1.3 输出结果 1.4 问题 1…

如何搭建自己的博客网站(手把手教你搭建免费个人博客网站)

没有前言直接开始正文,搭建一个博客需要服务器,域名,博客程序。 博客程序常用的有wordpress,z-blog,typecho等等,其中wordpress和z-blog最为简单,typecho需要一定的技术含量,这里暂…

【状态估计】用于描述符 LTI 和 LPV 系统的分析、状态估计和故障检测的算法(Matlab代码实现)

💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 …