Как начать "findInFiles" с расширением API VSCode? - PullRequest
1 голос
/ 30 июня 2019

Я пытаюсь написать расширение, которое будет автоматически выбирать слово под курсором, открывать диалог поиска в файлах и запускать поиск с этим выбором. До сих пор мне удавалось заставить расширение делать все, кроме фактической инициации поиска. Мне все еще нужно нажать Enter в диалоге поиска в файлах, чтобы выполнить поиск. Вот код расширения, который у меня есть:

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
    let disposable = vscode.commands.registerCommand('extension.searchUnderCursor', () => {
        // Get the current editor
        let editor = vscode.window.activeTextEditor;
        if (!editor) {
            console.log('No active editor!');
            return;
        }

        // Get word under cursor position
        let wordRange = editor.document.getWordRangeAtPosition(editor.selection.start);
        if (!wordRange) {
            console.log('No word under the cursor!');
            return;
        }

        // Select the word
        editor.selection = new vscode.Selection(wordRange.start, wordRange.end);

        // Initiate search
        vscode.commands.executeCommand('workbench.action.findInFiles').then(() => {
            vscode.commands.executeCommand('default:type', {text: '\n'});
        });
    });

    context.subscriptions.push(disposable);
}

export function deactivate() {}

Вы видите, что я пытался найти способ нажать Enter в диалоге поиска в файлах, чтобы начать поиск. Конечно, это не работает. Как я могу получить функциональность, которую я собираюсь здесь?

1 Ответ

1 голос
/ 30 июня 2019

На самом деле, я понял это.Вот мое решение:

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
    let disposable = vscode.commands.registerCommand('extension.searchUnderCursor', () => {
        // Get the current editor
        let editor = vscode.window.activeTextEditor;
        if (!editor) {
            console.log('No active editor!');
            return;
        }

        // Get word under cursor position
        let wordRange = editor.document.getWordRangeAtPosition(editor.selection.start);
        if (!wordRange) {
            console.log('No word under the cursor!');
            return;
        }

        // Get word text
        let wordText = editor.document.getText(wordRange);

        // Initiate search
        vscode.commands.executeCommand('workbench.action.findInFiles', {
            query: wordText,
            triggerSearch: true,
            matchWholeWord: true,
            isCaseSensitive: true,
        });
    });

    context.subscriptions.push(disposable);
}

export function deactivate() {}

Как оказалось, действие findInFiles имеет ряд полезных аргументов, которые оно принимает: https://github.com/microsoft/vscode/blob/9a987a1cd0d3413ffda4ed41268d9f9ee8b7565f/src/vs/workbench/contrib/search/browser/searchActions.ts#L163-L172

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...