gpt4 book ai didi

visual-studio-code - 在 vscode 扩展中列出文件夹中的文件

转载 作者:行者123 更新时间:2023-12-04 13:58:30 28 4
gpt4 key购买 nike

我正在创建一个 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);
    });
    });

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

    最佳答案

    我可以使用 vscode.RelativePattern 做到这一点-- 我确信我可以使用通用的 GlobPatterns 来完成它,但我仍然不清楚 findFiles(..) 是什么匹配文件时考虑“根”; 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);
    });

    关于visual-studio-code - 在 vscode 扩展中列出文件夹中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56819284/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com