typescript VSC扩展-无法使用扩展名.ts中的相对路径加载文本文件

lsmd5eda  于 2023-01-03  发布在  TypeScript
关注(0)|答案(1)|浏览(134)

我尝试写一个扩展,当使用encloseTag命令调用时,显示从文本文件加载的预设标签列表,并将选定的文本封装在该标签中。我让它工作,但只有当我指定一个静态路径-使用相对路径不工作,我得到这些错误代替:

Error reading tags file: ENOENT: no such file or directory, open 'tags.txt'
Activating extension 'undefined_publisher.enclosingtags' failed: ENOENT: no such file or directory, open 'c:\Users\username\ProjectPublisher\out\FILENAME'.

当我尝试打印工作目录时,它不在项目目录附近(它在AppData中,而不是User文件夹中的项目位置)。我不确定我如何影响这一点,也不确定这是VSC的问题还是我的代码的问题。**注意:**我正在使用VSC调试(按F5)执行它。
我怎样才能让这段代码使用与扩展名. ts文件相同目录中的tags文件?
package.json

(…)
"contributes": {
    "commands": [
      {
        "command": "encloseTag",
        "title": "Enclose in Tag"
      }
    ]
},
(…)

extension.ts:

import * as vscode from 'vscode';
import * as fs from 'fs';

export function activate(context: vscode.ExtensionContext) {
    let disposable = vscode.commands.registerCommand('encloseTag', () => {

        let editor = vscode.window.activeTextEditor;
        if (!editor) {
            vscode.window.showErrorMessage('No active text editor');
            return;
        }
        let selection = editor.selection;
        let text = editor.document.getText(selection);
        if (!text) {
            return;
        }

        let tags: string[] = [];
        try {
            let data = fs.readFileSync('C:\\Users\\username\\ProjectPublisher\\tags.txt', 'utf8');
            // Split the data into lines and remove leading and trailing whitespace and newline characters from each line
            tags = data.split('\n').map(line => line.trim().replace(/\r?\n|\r/g, ''));
        } catch (error: any) {
            vscode.window.showErrorMessage('Error reading tags file: ' + error.message);
            return;
        }

        // Prompt the user to select a tag
        vscode.window.showQuickPick(tags).then((tag) => {
            if (!tag) {
                return;
            }

            // Enclose the selected text in the chosen tag
            let newText = `<${tag}>${text}</${tag}>`;
            editor.edit(edit => {
                edit.replace(selection, newText);
            });
        });
    });

    context.subscriptions.push(disposable);

    const fs = require('fs');
    fs.readFileSync(`${__dirname}\\FILENAME`);
}

export function deactivate() {}

tags.txt

tag1
tag2
tag3

input:这是一些要注解的文本。
output:这是一些要注解的文本。

slwdgvem

slwdgvem1#

使用上下文中的文件路径构造绝对路径(activate函数的参数)

export function activate(context: vscode.ExtensionContext)

包含扩展名的目录的绝对文件路径

ExtensionContext::extensionPath

相关问题