[JAVA] Erstellen Sie ein VSCode-Plugin.

zunaechst

Für die Einstellungsdatei (Eigenschaftendatei) von Java9 und früheren Anwendungen konnte Japanisch (2-Byte-Code) nicht so verwendet werden, wie es ist, und es musste durch einen Code ersetzt werden, der mit '\ u' begann. Ich war in der Lage, Anwendungen vor Java9 zu warten, und es war eine mühsame und mühsame Aufgabe, native2ascii jedes Mal auszuführen, wenn ich VSCode verwendete.

Aus diesem Grund habe ich beschlossen, mit dem VScode-Plug-In eine Funktion zu erstellen, die native2ascii entspricht.

Erstellen Sie zunächst eine Umgebung für die Entwicklung von VS-Code-Plugins. Das Erstellen einer Umgebung ist "Visual Studio Code First Extension Development" von @rma. Bitte wende dich an die.

Politik

Soweit ich sehen konnte, konnte ich den Befehl auf VSCode nicht auslösen oder das Ereignis "Eigenschaftendatei lesen" abrufen (bitte geben Sie mir einige Informationen), daher habe ich den Befehl VSCode manuell verwendet. Wir fuhren mit der Konvertierung (Zeichen → Codierung) und Umkehrung (Code → Zeichen) mit fort.

Codiert

Zeichen → Codierung wurde mit dem folgenden Gefühl realisiert.

  1. Holen Sie sich die Dateizeichenfolge aus dem Dokument.
  2. Wiederholen Sie Zeile für Zeile, um Japanisch als regulären Ausdruck zu erhalten und ein Array zu erstellen.
  3. Erstellen Sie einen Code aus der in 2. erstellten Sequenz und erstellen Sie eine assoziative Sequenz aus Japanisch und Code.
  4. Ersetzen Sie die ursprüngliche Zeile durch die Ersetzungsmethode.
  5. Erstellen Sie ein neues Dokument, indem Sie die ersetzten Zeichenfolgen sammeln.
  6. Dokumente im Editor 5. Durch das in erstellte Dokument ersetzen.

Außerdem entspricht es keinen Ersatzzeichen.

function ascii(e: vscode.TextEditor, d: vscode.TextDocument, sel: vscode.Selection[]) {
    console.log(d.getText());
    let text = d.getText();
    let newTest = text.split("\n");
    let replaced = "";
    newTest.forEach(val => {
        let reg = val.match(/([^\x01-\x7E])/g);
        if (reg) {
            let t = reg.map(code => {
                let unicode = code.charCodeAt(0).toString(16);
                return {code, value:`\\u${unicode}`};
            }).reduce( (v,obj) => {
                let {code, value} = obj;
                let reg = new RegExp(code);
                return v.replace(reg, value);
            }, val);
            replaced = `${replaced}${t}\n`; 
        } else {
            replaced = `${replaced}${val}\n`; 
        }
    });
    e.edit((builder)=>{
        if (e) {
            let startPos = e.document.positionAt(0);
            let endPos = e.document.positionAt(text.length);
            let allRange = new vscode.Range(startPos,endPos);
            builder.replace(allRange,replaced);
        }
    });
}

umkehren

Es ist nicht viel anders als das codierte. Ich erstelle Zeichen aus Unicode.

function reverse(e: vscode.TextEditor, d: vscode.TextDocument, sel: vscode.Selection[]) {
        console.log(d.getText());
        let text = d.getText();
        let newTest = text.split("\n");
        let replaced = "";
        newTest.forEach(val => {
            let reg = val.match(/(\\u[0-9|a-f]{4})/g);
            if (reg) {
                let t = reg.map(unicode => {
                    let codeStrs = unicode.split("\\u");
                    let codePoints = parseInt(codeStrs[1], 16);
                    return {code:`\\${unicode}`, value:String.fromCharCode(codePoints)};
                }).reduce( (v,obj) => {
                    let {code, value} = obj;
                    let reg = new RegExp(code);
                    return v.replace(reg, value);
                }, val);
                replaced = `${replaced}${t}\n`; 
            } else {
                replaced = `${replaced}${val}\n`; 
            }
        });
        e.edit((builder)=>{
            if (e) {
                let startPos = e.document.positionAt(0);
                let endPos = e.document.positionAt(text.length);
                let allRange = new vscode.Range(startPos,endPos);
                builder.replace(allRange,replaced);
            }
        });
}

native2ascii Ich habe die folgenden Funktionen erstellt und zusammengefasst, damit die oben erstellten Funktionen durch Befehle aufgerufen werden können. Rufen Sie diese Funktion mit registerCommand auf und Sie sind fertig.

function native2ascii() {
    if (!vscode.window.activeTextEditor) {
		vscode.window.showInformationMessage('Open a file first to manipulate text selections');
		return;
    }   
    var items: vscode.QuickPickItem[] = [];

	items.push({ label: "ascii", description: "Vom Zeichen in Unicode konvertieren" });
    items.push({ label: "reverse", description: "Von Unicode in Zeichen konvertieren" });
    
    Window.showQuickPick(items).then((selection) => {
		if (!selection) {
			return;
		}
        let e = Window.activeTextEditor;
        if (e) {
            let d = e.document;
            let sel = e.selections;
            switch (selection.label) {
                case "ascii":
                    ascii(e, d, sel);
                    break;
                case "reverse":
                    reverse(e, d, sel);
                    break;
                default:
		   console.log("hum this should not have happend - no selection")
		   break;
            }
        }
    });
}

Erstellen Sie eine VSIX-Datei mit VSCE.

Packen Sie das erstellte Plugin. Ich habe VSCE verwendet. Ich habe es mit dem folgenden Befehl installiert.

npm install -g vsce

Packen Sie es nach der Installation mit dem folgenden Befehl. Wenn Sie README.md nicht neu schreiben, schlägt die Verpackung fehl.

vsce package

Der Quellcode wird in GitHub gespeichert.

Zusammenfassung

Die Umgebung für die Erstellung von Plug-Ins war umfangreich und es gab keinen Ort, an dem man erwischt werden konnte (dank @rma). Es war mein erstes Mal, dass ich Typoskript verwendete, aber seit ich ES2015 berührte, fühlte ich mich nicht unwohl. Vielmehr hat VScode eine gute Sprachunterstützung und ich wollte ernsthaft Typoskript verwenden.

Recommended Posts

Erstellen Sie ein VSCode-Plugin.
VS-Code-Plug-In empfohlen für das Programmieren von Schülern
Führen Sie ein Spring Boot-Projekt mit VS-Code aus
Machen Sie einen Ausschnitt für Thymeleaf in VS Code
Erstellen Sie eine Spring Boot-Umgebung mit Windows + VS-Code
Versuchen Sie, ein Java-Programm mit VS-Code zu debuggen
Erstellen Sie eine Java-Entwicklungsumgebung mit VS Code
[Java] Erstellen Sie einen Filter
So zeigen Sie eine Browser-Vorschau mit VS-Code an
Anfänger erstellen eine Spring Tools Suite-Umgebung mit VS Code
Erstellen Sie in CentOS8.2 einen privaten / öffentlichen Schlüssel und stellen Sie mit VS Code eine Verbindung zu SSH her
Docker-Management mit VS-Code
Formatieren Sie Ruby mit VS-Code
Erstellen Sie eine Java-Methode [Memo] [java11]
Hallo Welt mit VS Code!
[Java] Erstellen Sie eine temporäre Datei
Erstellen Sie einen Spielplatz mit Xcode 12
Erstellen Sie eine Lotterie mit Ruby
Ein Memo zum Starten der Java-Programmierung mit VS Code (Version 2020-04)
Erstellen eines MOB mit dem Minecraft Java Mythicmobs-Plug-In | Vorbereitung 1
So erstellen Sie eine Methode
[Hinweis] Eine Geschichte über das Ändern von Java-Build-Tools mit VS-Code
Erstellen einer Haskell-Umgebung mit Docker + VS-Code unter Windows 10 Home
So öffnen Sie eine Skriptdatei von Ubuntu mit VS-Code
Erstellen Sie mit Docker eine Vue3-Umgebung!
[Android] Erstellen Sie einen Kalender mit GridView
Erstellen Sie mit Eclipse ein Jetty-Projekt
Ein Memorandum zum Schreiben von schönem Code
Vorbereiten der Erstellung einer Rails-Anwendung
Java Spring-Umgebung in vs Code
[Rails Tutorial Kapitel 5] Erstellen Sie ein Layout
Erstellen Sie eine Datenbank in einer Produktionsumgebung
Erstellen Sie eine neue App mit Rails
Erstellen Sie ein Java-Projekt mit Eclipse
Erstellen Sie Java mit Mac vs Code
Erstellen Sie eine Filterfunktion mit Acts-as-Taggable-On
Erstellen Sie ein Servlet-Programm in Eclipse
So erstellen Sie ein Jenkins-Plug-In
Versuchen Sie, eine Server-Client-App zu erstellen
Wechseln Sie von Eclipse zu VS Code
Erste Schritte mit Docker mit VS-Code
Java-Entwicklungsumgebung (Mac, VS Code)
Erstellen Sie Ausnahmen mit einer Fluid-Schnittstelle
[Kotlin / Android] Erstellen Sie eine benutzerdefinierte Ansicht
Erstellen Sie ein Maven-Projekt mit Befehlen
Erstellen Sie einen fließenden Server zum Testen
Ein Memorandum, in dem IME nicht mit VS Code aktiviert werden kann (Ubuntu 20.04)
Beachten Sie, dass VS Code + JUnit 5 unter Windows 10 verwendet werden kann