[JAVA] Créez un plugin VSCode.

en premier

Pour le fichier de configuration (fichier de propriétés) de Java9 et des applications antérieures, le japonais (code à 2 octets) ne pouvait pas être utilisé tel quel, et il était nécessaire de le remplacer par un code commençant par '\ u'. J'étais en mesure de maintenir des applications avant Java9, et c'était une tâche fastidieuse et fastidieuse de faire native2ascii chaque fois que j'utilisais VSCode.

Par conséquent, j'ai décidé de créer une fonction équivalente à native2ascii avec le plug-in VScode.

Tout d'abord, créez un environnement pour développer des plugins VS Code. Comment créer un environnement est «Développement de l'extension Visual Studio Code First» de @rma. Veuillez vous référer au.

politique

Pour autant que je puisse voir, je ne pouvais pas lancer la commande sur VSCode ou sélectionner l'événement "lire le fichier de propriétés" (veuillez me donner quelques informations), j'ai donc utilisé la commande VSCode manuellement. Nous avons procédé à la politique de conversion (caractère → codage) et inverse (code → caractère) avec.

Codé

Le codage des caractères → a été réalisé avec le sentiment suivant.

  1. Récupérez la chaîne de fichier du document.
  2. Répétez ligne par ligne pour obtenir le japonais sous forme d'expression régulière et créez un tableau.
  3. Créez un code à partir de la séquence créée en 2. et créez une séquence associative de japonais et de code.
  4. Remplacez par la méthode de remplacement sur la ligne d'origine.
  5. Créez un nouveau document en collectant les chaînes remplacées.
  6. Documents dans l'éditeur 5. Remplacez-le par le document créé dans.

De plus, il ne correspond pas à des caractères de substitution.

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);
        }
    });
}

inverser

Ce n'est pas très différent de celui codé. Je crée des personnages à partir d'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 J'ai créé les fonctions suivantes et les ai résumées afin que les fonctions créées ci-dessus puissent être appelées par des commandes. Appelez cette fonction avec registerCommand et vous avez terminé.

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: "Conversion de caractère en Unicode" });
    items.push({ label: "reverse", description: "Conversion d'Unicode en caractères" });
    
    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;
            }
        }
    });
}

Créez un fichier VSIX avec VSCE.

Empaquetez le plugin créé. J'ai utilisé VSCE. Je l'ai installé avec la commande suivante.

npm install -g vsce

Après l'installation, conditionnez-le avec la commande suivante. Si vous ne réécrivez pas README.md, l'empaquetage échouera.

vsce package

Le code source est enregistré dans GitHub.

Résumé

L'environnement pour créer des plug-ins était substantiel et il n'y avait pas de place pour se faire prendre (grâce à @rma). C'était la première fois que j'utilisais du texte dactylographié, mais depuis que je touchais ES2015, je n'ai ressenti aucune gêne. Au contraire, VScode a une bonne prise en charge de la langue et je voulais vraiment utiliser du dactylographie.

Recommended Posts

Créez un plugin VSCode.
Plug-in VS Code recommandé pour les élèves des écoles de programmation
Exécuter un projet Spring Boot avec VS Code
Créer un extrait pour Thymeleaf dans VS Code
Créer un environnement Spring Boot avec Windows + VS Code
Essayez de déboguer un programme Java avec VS Code
Créer un environnement de développement Java avec VS Code
[Java] Créer un filtre
Comment afficher un aperçu du navigateur avec VS Code
Les débutants créent un environnement Spring Tools Suite avec VS Code
Créez une clé privée / clé publique dans CentOS8.2 et connectez-vous à SSH avec VS Code
Gestion Docker avec VS Code
Formater Ruby avec VS Code
Créer une méthode java [Memo] [java11]
Bonjour tout le monde avec VS Code!
[Java] Créer un fichier temporaire
Créez un terrain de jeu avec Xcode 12
Créer une loterie avec Ruby
Un mémo pour démarrer la programmation Java avec VS Code (version 2020-04)
Création d'un MOB à l'aide du plug-in Minecraft Java Mythicmobs | Préparation 1
Comment créer une méthode
[Note] Une histoire sur la modification des outils de compilation Java avec VS Code
Création d'un environnement haskell avec Docker + VS Code sur Windows10 Home
Comment ouvrir un fichier de script à partir d'Ubuntu avec du code VS
Créez un environnement Vue3 avec Docker!
[Android] Créer un calendrier à l'aide de GridView
Créer un projet Jetty à l'aide d'Eclipse
Un mémorandum pour écrire un beau code
Préparation à la création de l'application Rails
Environnement Java Spring dans vs Code
[Tutoriel Rails Chapitre 5] Créer une mise en page
Créer une base de données dans un environnement de production
Créer une nouvelle application avec Rails
Créer un projet Java à l'aide d'Eclipse
Construire Java avec Mac vs Code
Créer une fonction de filtrage en utilisant actes-as-taggable-on
Créer un programme Servlet dans Eclipse
Comment créer un plug-in Jenkins
Essayez de créer une application client serveur
Passer d'Eclipse à VS Code
Premiers pas avec Docker avec VS Code
Environnement de développement Java (Mac, VS Code)
Créez des exceptions avec une interface fluide
[Kotlin / Android] Créer une vue personnalisée
Créer un serveur fluentd pour les tests
Un mémorandum lorsque IME ne peut pas être activé avec VS Code (Ubuntu 20.04)
Notez que VS Code + JUnit 5 peut être utilisé sous Windows 10