列出 vscode 扩展文件夹中的文件

emp*_*e29 5 visual-studio-code vscode-extensions

我正在创建一个 vscode 扩展,它可以执行一些自定义自动完成文件路径。

我想获取用户输入的内容,如果该值解析为工作区中的文件夹,我想列出该文件夹中的所有文件以进行自动完成。

例如,给定:

  • 工作区位于:/home/me/my-vs-project
  • 与文件:
    • /home/me/my-vs-project/assets/dog.png
    • /home/me/my-vs-project/assets/cat.jpeg

如果我在 vscode 中输入“assets”或“./assets”,扩展应该能够为我提供一个自动完成列表:

  • './assets/dog.png'
  • './assets/cat.png'

这是不起作用的代码片段(返回 0 结果)..

let inputAsWorkspaceRelativeFolder = getInput(document, position); // for example, would return: '/home/me/my-vs-project/assets' for input of './assets'

let glob = inputAsWorkspaceRelativeFolder + '/*';

vscode.workspace.findFiles(glob, null, 100).then((uris: vscode.Uri[] ) => {         
   uris.forEach((uri: vscode.Uri) => {              
         console.log(uri);
   });
}); 
Run Code Online (Sandbox Code Playgroud)

由于某种原因,上面的代码返回 0 uri。关于如何格式化 glob 才能实现这一点的想法?和/或是否有更好的方法?

Den*_*net 0

我认为你冤枉了全球。我发现了这个关于 Glob 模式组合的有趣wiki 。

        let inputAsWorkspaceRelativeFolder = 'asset'; // for example, would return: '/home/me/my-vs-project/assets' for input of './assets'

        //https://github.com/ev3dev/vscode-ev3dev-browser/wiki/Glob-Patterns
        let glob = '**/'+inputAsWorkspaceRelativeFolder+'/*.*';//or +'/{*.png,*.jpeg}';
Run Code Online (Sandbox Code Playgroud)

或者你可以使用node内置的fs


import * as fs from 'fs';
        fs.readdir(inputAsWorkspaceRelativeFolder, (err, files: string[]) => {
            files.forEach((file: path) => {
                const uri = vscode.Uri.file(file);
                console.log(uri);
            });
        });
Run Code Online (Sandbox Code Playgroud)

更简单的是,如果您想获取资产文件夹中的所有文件并且不想过滤扩展名。