Выбор VSCode во фрагмент - PullRequest
       4

Выбор VSCode во фрагмент

0 голосов
/ 03 декабря 2018

Это вопрос новичка, так что не будь таким сложным для меня.

Пример:

A,B,C,D, ..

Мне нужно преобразовать эту строку в следующий вывод в VSCode

enum id name
{
    value(0; A) { Caption = 'A'; }
    value(1; B) { Caption = 'B'; }
    value(2; C) { Caption = 'C'; }
    value(3; D) { Caption = 'D'; }
}

Я могу прочитать выборку и разделить ее на отдельные токены.

Но я застрял, когда дело доходит до записи его обратно в мою строку.

Мой код:

'use strict';
// The module 'vscode' contains the VS Code extensibility API
// Import the module and reference it with the alias vscode in your code below
//import * as vscode from 'vscode';
import { window, commands, Disposable, ExtensionContext, StatusBarAlignment, StatusBarItem, TextDocument, TextEditor, ViewColumn, workspace, TextLine, TextEdit, Uri, Position } from 'vscode';
import { stringify } from 'querystring';

// this method is called when your extension is activated
// your extension is activated the very first time the command is executed
export function activate(context: ExtensionContext) {
    console.log('"Cg Helper" is now active!');
    let cgHelper = new CgALHelper;
    let disp = commands.registerCommand('extension.convertSelection2Enum', () =>{
        cgHelper.convertSelection2Enum(window.activeTextEditor);
    })

    context.subscriptions.push(disp);
}

// this method is called when your extension is deactivated
export function deactivate() {
}

class CgALHelper 
{
    public convertSelection2Enum(editor: TextEditor)
    {        
        this.convertTextLine2Enum(editor);
    }

    public convertInputText2Enum()
    {

    }

    private convertTextLine2Enum(editor: TextEditor)
    {
        let line = editor.document.lineAt(editor.selection.active.line);
        if (line != null && line.text != null)
        {
            window.showInformationMessage(line.text);        
            let tokens = line.text.split(',');
            if (tokens[0] != null && tokens[0] != '' && tokens.length != 0 )
            {

                tokens.forEach(tok => {
                    // I'm stuck here !            
                });

            } else
                window.showErrorMessage('nothing to convert');

        } else
            window.showErrorMessage('Nothing to convert');
    }
}

1 Ответ

0 голосов
/ 06 декабря 2018

Вы хотите построить SnippetString.Строки фрагмента можно создавать постепенно:

 const snippet = new vscode.SnippetString();
 snippet.appendText('enum id name {');
 tokens.forEach(tok => {
      snippet.appendText(`    value(0; ${tok}) { Caption = '${tok}'; }`)
 });
 snippet.appendText('}');

Затем примените фрагмент к редактору, используя TextEditor.insertSnippet:

editor.insertSnippet(snippet);
...