[英]Listing files in folder in vscode extension
我正在创建一个vscode扩展名,它可以对文件路径进行一些自定义自动完成。
我要接受用户键入的内容,如果该值解析为工作空间中的文件夹,则要列出该文件夹中的所有文件以自动完成。
例如,给定:
如果我在vscode中输入'assets'或'./assets',则扩展名应该能够为我提供以下内容的自动填充列表:
这是无效的代码片段(返回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);
});
});
由于某种原因,以上代码虽然返回0 uris。 关于我必须如何格式化全局以实现此目的的想法? 和/或是否有更好的方法?
😊👋🏻我想你冤wrong了世界。 我发现了这个有关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}';
或者您可以使用内置的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);
});
});
如果您要获取资产文件夹中的所有文件并且不想过滤扩展名,则更简单。
我可以使用vscode.RelativePattern
来做到这vscode.RelativePattern
-我敢肯定我可以使用通用的GlobPatterns来做到这一点,但是我仍然不清楚在匹配文件时findFiles(..)
认为'root'是什么。 RelativePattern 显式相对于工作空间根目录。
let workspaceFolder: vscode.WorkspaceFolder | undefined = vscode.workspace.getWorkspaceFolder(document.uri);
if (!workspaceFolder || document.isUntitled) {
return undefined;
}
// Workspace folder: /home/me/my-project
let workspaceFolderPath: string = workspaceFolder.uri.path;
let relativeSearchFolderPrefix = path.normalize(path.dirname(document.uri.path) + '/' + searchText);
relativeSearchFolderPrefix = path.relative(workspaceFolderPath, relativeSearchFolderPrefix);
let relativePattern: vscode.RelativePattern = new vscode.RelativePattern(
workspaceFolderPath,
relativeSearchFolderPrefix + '/**/*.{png,jpeg,jpg,gif}');
return vscode.workspace.findFiles(globPattern, null, 50).then((uris: vscode.Uri[] ) => {
let relativePaths: string[] = [];
uris.forEach((uri: vscode.Uri) => {
relativePaths.push(path.relative(current, uri.path));
});
// trivial custom function that turns an array of strings into CompletionItems
return getCompletionItems(relativePaths, vscode.CompletionItemKind.File);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.