Javascript Vscode Ext仅在项目具有某些文件时显示扩展名
我创建了一个vscode扩展,它处理一些Javascript Vscode Ext仅在项目具有某些文件时显示扩展名,javascript,node.js,visual-studio-code,vscode-extensions,Javascript,Node.js,Visual Studio Code,Vscode Extensions,我创建了一个vscode扩展,它处理一些Rakefile任务。 现在我想限制仅当用户 打开一个Rakefile 为此,我在package.json中使用以下条目 "contributes": { "views": { "explorer": [ { "id": "rakeView", "name":
Rakefile
任务。
现在我想限制仅当用户
打开一个Rakefile
为此,我在package.json中使用以下条目
"contributes": {
"views": {
"explorer": [
{
"id": "rakeView",
"name": "Rakee",
"when": "resourceFilename ='Rakefile'"
}
]
},
"commands": [
{
"command": "rakeView.executeTask",
"title": "Execute",
"icon": "images/icon.png"
}
],
"contributes": {
"views": {
"explorer": [
{
"id": "rakeView",
"name": "Rakke",
"when": "rakeView:fileIsRake"
}
]
},
添加以下行时
"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();
}
}
package.json
"contributes": {
"views": {
"explorer": [
{
"id": "rakeView",
"name": "Rakee",
"when": "resourceFilename ='Rakefile'"
}
]
},
"commands": [
{
"command": "rakeView.executeTask",
"title": "Execute",
"icon": "images/icon.png"
}
],
"contributes": {
"views": {
"explorer": [
{
"id": "rakeView",
"name": "Rakke",
"when": "rakeView:fileIsRake"
}
]
},
您需要使用上下文,当编辑器更改时,设置上下文变量以表示当前文件是Rakefile 在
中激活
功能
const onChangeActiveTextEditor=()=>{
让编辑器=vscode.window.activeTextEditor;
vscode.commands.executeCommand('setContext','myextension:fileIsRake',editor&&editor.document.languageId=='rake');
};
onDidChangeActiveTextEditor(onChangeActiveTextEditor,null,context.subscriptions);
onChangeActiveTextEditor();
在package.json
中添加此上下文变量
"views": {
"explorer": [
{
"id": "rakeView",
"name": "Rakee",
"when": "myExtenstion:fileIsRake"
}
]
},
您需要使用上下文,当编辑器更改时,设置上下文变量以表示当前文件是Rakefile 在
中激活
功能
const onChangeActiveTextEditor=()=>{
让编辑器=vscode.window.activeTextEditor;
vscode.commands.executeCommand('setContext','myextension:fileIsRake',editor&&editor.document.languageId=='rake');
};
onDidChangeActiveTextEditor(onChangeActiveTextEditor,null,context.subscriptions);
onChangeActiveTextEditor();
在package.json
中添加此上下文变量
"views": {
"explorer": [
{
"id": "rakeView",
"name": "Rakee",
"when": "myExtenstion:fileIsRake"
}
]
},
谢谢,“myExtension”是什么?是package.json name属性吗?@BenoOdr
myExtension
只是您的扩展名,要找到正确的languageId,请将languageId记录到ConsoleAnks,它不起作用,请看一下更新,看看我这里缺少了什么?@BenoOdr Rake文件的语言ID是什么?使用扩展名中的console.log
查找console.log到什么?此外,我的代码看起来还可以,包JSONTANKS,它是什么“myExtension”?它是package.json name属性吗?@BenoOdrmyExtension
只是扩展名,要找到正确的languageId,请将languageId记录到控制台数据库,它不起作用,请看一下更新,看看我这里缺少了什么?@BenoOdr Rake文件的语言ID是什么?使用扩展名中的console.log
查找console.log到什么?此外,我的代码看起来正常,包jsonyou不一致仅当用户打开Rakefile时和仅当项目有Rakefile时仅当用户打开Rakefile时和仅当项目有Rakefile时