javascript - Vscode Ext仅在项目有文件时显示扩展名
问题描述
我创建了一个处理一些Rakefile
任务的 vscode 扩展。现在我想限制扩展名仅在用户打开时才会显示在资源管理器中Rakefile
为此,我在 package.json 中使用以下条目
"contributes": {
"views": {
"explorer": [
{
"id": "rakeView",
"name": "Rakee",
"when": "resourceFilename ='Rakefile'"
}
]
},
"commands": [
{
"command": "rakeView.executeTask",
"title": "Execute",
"icon": "images/icon.png"
}
],
添加以下行时
"when": "resourceFilename ='Rakefile'"
从资源管理器视图中删除的扩展,当我删除它时,我能够看到扩展。我希望它仅在项目有Rakefile
我该怎么做时才显示?
更新
尝试下面的答案后仍然无法正常工作,这是所有代码:
import * as vscode from "vscode";
import { rakeTaskProvider } from "./rakeCmd";
import { TaskTreeDataProvider } from "./rakeView";
let rakeTaskProvider: vscode.Disposable | undefined;
export function activate(_context: vscode.ExtensionContext): void {
const workspaceRoot = vscode.workspace.rootPath;
const onChangeActiveTextEditor = () => {
let editor = vscode.window.activeTextEditor;
vscode.commands.executeCommand('setContext', 'rakeView:fileIsRake', editor && editor.document.languageId === 'rakefile');
};
vscode.window.onDidChangeActiveTextEditor(onChangeActiveTextEditor, null, _context.subscriptions);
onChangeActiveTextEditor();
rakeTaskProvider = vscode.tasks.registerTaskProvider(
rakeTaskProvider.rakeType,
new rakeTaskProvider(workspaceRoot)
);
vscode.window.registerTreeDataProvider(
"rakeView",
new TaskTreeDataProvider(_context)
);
vscode.commands.registerCommand("rakeView.executeTask", function (task) {
console.log(task);
vscode.tasks.executeTask(task).then(
function (value) {
return value;
},
function (e) {
console.error(
"error",
e
);
}
);
});
}
export function deactivate(): void {
if (rakeTaskProvider) {
rakeTaskProvider.dispose();
}
}
包.json
"contributes": {
"views": {
"explorer": [
{
"id": "rakeView",
"name": "Rakke",
"when": "rakeView:fileIsRake"
}
]
},
解决方案
您需要使用上下文,当编辑器更改时设置一个上下文变量来表示当前文件是一个 Rakefile
在你的activate
功能
const onChangeActiveTextEditor = () => {
let editor = vscode.window.activeTextEditor;
vscode.commands.executeCommand('setContext', 'myExtenstion:fileIsRake', editor && editor.document.languageId === 'rake');
};
vscode.window.onDidChangeActiveTextEditor(onChangeActiveTextEditor, null, context.subscriptions);
onChangeActiveTextEditor();
在package.json
添加此上下文变量
"views": {
"explorer": [
{
"id": "rakeView",
"name": "Rakee",
"when": "myExtenstion:fileIsRake"
}
]
},
推荐阅读
- react-native - asyc/await + babel + react-native 的问题
- r - 比较日期时间值时提高循环启动速度
- c# - 在 Azure Blob 存储上创建文件副本
- r - 是否可以将大 .rds 或 .feather 文件的子集导入 R?
- mongodb - 在 Mongodb 中删除带有排序和限制的项目
- javascript - 数据表 - 导出字段输入内外的值和选择字段的值
- acumatica - 如何编辑作为开箱即用 Acumatica 一部分的 BLC 扩展,特别是 SM_CRCaseMaint.cs?
- python - Tensorflow:为什么 tensorflow 不打印此循环中的每个值?
- angular - Angular 6 超时重定向
- serial-port - 使用 HAL 在 STM32F303 上进行串行通信 - Rx 不工作