I am a beginner who is learning to use the VSCode extension API in order to build my own extension. I know that extension developers can create their own commands to be provided in the command palette by specyfying them within the package.json
file. I also know that extension developers can make use of other extensions by using their API (i.e. the return value from their implementation of the activate
function which you can receive by using the vscode.extensions.getExtensions
function) or by calling their provided commands (which are also listed in the command palette) directly from code with the help of the vscode.commands.executeCommand
function.
But now I have trouble doing exactly this for the docker extension. My plan is to pull an image and run a container when the user does something (e.g. he clicks on my own provided command from the commands palette). So let’s assume the user already has installed the docker extension (I guess I could specify the docker extension as a dependency for my own extension so it will be additionally installed in case it is missing when the user installs my extension? I still need to look up how to do this, though. Maybe someone here knows?)
So what I tried is to first look wether the docker extension returns an API from it’s activate
function, so I did the following:
const dockerExtension = vscode.extensions.getExtension('vscode.docker');
if(dockerExtension){
await dockerExtension.activate();
console.log(JSON.stringify(dockerExtension.exports)); // undefined
console.log(JSON.stringify(dockerExtension.packageJSON)); // object without commands being specified
}else {
console.log('Docker extension not found!');
}
The problem now is that there is no API returned nor are there commands specified within the package.json. But if I do this:
vscode.commands.getCommands(true).then(
(cmds) => {
//const pattern = /docker/i;
//console.log(cmds.filter( cmd => pattern.test(cmd)));
console.log(cmds); // more than 30 commands with docker contained in name
}
);
I get this output snippet:
2030 =
'dockerVolumes.focus'
2031 =
'dockerVolumes.resetViewLocation'
2032 =
'vscode-docker.views.dockerContexts.focus'
2033 =
'vscode-docker.views.dockerContexts.resetViewLocation'
2034 =
'vscode-docker.views.help.focus'
2035 =
'vscode-docker.views.help.resetViewLocation'
So there are commands available! How come that they aren’t listed in the package.json in the first place? Do I really need to go this way to look them up (I even tried to do some pattern matching but I got only 30 commands as output even though there are many more commands available with ‘docker’ being contained in the name)?
LudarA is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.