Home > Software design >  How to get unknown file path - the extension path - using Javascript?
How to get unknown file path - the extension path - using Javascript?

Time:12-16

I am trying to develop an extension for VSCode and I need to search for the exact file path where my extension is saved. I've tried this code:

var text;

const directoryPath = path.join(Os.homedir(), '.vscode/extensions');
fs.readdir(directoryPath, function (err, files) {
    if (err) {
        y2.appendLine('Unable to scan directory: '   err);
    }
    for (let i=0;i<files.length;i  ){
        if (files[i].startsWith("MY_EXTENSION")){
            text = files[i];
            y2.appendLine(text);
            break;
        }
    }
});
y2.appendLine(text);

y2 is only an output channel I added. The outcome of this code is:

undefined
MY_EXTENSION

If I take out the second y2.appendLine(text) I receive only MY_EXTENSION but I don't get how to make text global or how to modify the value of the global variable text inside readdir.

I also don't understand why it first executes y2.appendLine(text) and then readdir.

It is really important and I would be grateful to have your help!

CodePudding user response:

I'm not sure what exactly you are trying to do there, but looking at your code it seems like you are trying to save some data for your extension in particular.

For this purpose, you probably want to use the globalStorage object instead.

You can learn more about it in the Data storage section and the ExtensionContext documentation.

CodePudding user response:

For the path to your extension, use the context object and its properties:

extensionPath

The absolute file path of the directory containing the extension. Shorthand notation for ExtensionContext.extensionUri.fsPath (independent of the uri scheme).

extensionUri

The uri of the directory containing the extension.

From ExtensionContext. If it is just for the purpose of storage, see @mausworks's answer about globalStorage or storagePath, ets.

CodePudding user response:

You could put it in a function like this:

function searchExt() {
    const directoryPath = path.join(Os.homedir(), '.vscode/extensions');
    fs.readdir(directoryPath, (err, files) => {
        let text = null;
        if (err) {
            y2.appendLine(`Unable to scan directory: ${err}`);
        } else {
            for (let i = 0; i < files.length; i  ) {
                if (files[i].startsWith('MY_EXTENSION')) {
                    text = files[i];
                    break;
                }
            }
        }

        return text;
    });
}

const searchResult = searchExt();
  • Related