Valhalla

Transformer Atom en un IDE Vala - Version 1.0.0

Le problème exposé dans ce sujet a été résolu.

Plop !

Je viens de terminer un gros changement dans le code qui améliore encore les performances. Maintenant tout est fluide, même sur mon PC sous puissant (testé avec 2 Go de RAM, processeur Atom à 1,33 Hz, avec Firefox (multiprocessus en plus), Slack, plusieurs Powershell et surement plein d'autre trucs en arrière-plan). Bref, c'est magique, tout marche bien … ou presque. Par exemple pour une raison qui m'est inconnue, les signaux ne marchent plus … Tout ça est dans la dernière version, la 0.10.0.

Malheureusement je ne risque de ne pas avoir beaucoup (voir pas du tout) accès à Internet pendant les vacances (qui commencent ce soir pour moi :p ), et donc je ne pourrais pas avancer à nouveau avant le mois de Septembre.

Sinon skyzohkey, tu utilises quel thème dans Atom ? Parce que je veux bien le même.

C'est même assez simple si tu connais un peu JavaScript ou CoffeeScript. Comme je l'ai dit, je rédigerai sûrement un tutoriel sur la création de packages, mais en attendant, je vais te donner quelques pistes.

Déjà, il te faudra Atom, c'est mieux. :D Ensuite, tu vas lance cette commande qui va créer un nouveau package dans le dossier courant.

[…]

Bat'

Hey ! Merci pour les infos. Mais je ne parlais pas de faire un truc « comme toi ». Je pensais plutôt à étendre ton système. Faire ce genre de truc de manière intelligente ça implique un watcher et des analyzers. Plein de trucs un peu compliqués que je pensais que t'avais fait et qu'on pouvait étendre.

@skyzohkey : Merci. :)

@Nek: Aaaah d'accord ! :D J'avais mal compris

Je n'ai pas vraiment d'analyseur, j'ai juste une méthode qui peut me donner le type d'une méthode ou d'une propriété d'instance, à partir d'un type et d'une expression. Par exemple, si j'ai une variable locale nommée r de type Valse.Router, et qu'on a tapé r.options.db_url je sais que c'est de type string, juste en faisant this.getType('Router', 'options.db_url'). Après j'ai bien-sûr tout mon parseur qui analyse aussi le code, avec de Regex. Donc je pourrai rendre tout ça extensible assez facilement, mais ce n'est pas du tout mon objectf. Si tu veux réutiliser ce que j'ai fait, le mieux, c'est de faire un fork et d'adapter ce que j'ai fait pour PHP ou autre.

Hello tout le monde !

Je viens avec quelques nouvelles du projet. Tout d'abord, je suis en train de réécrire quasiment tout le mécanisme d'autocomplétion, car une mise ç jour d'Atom l'a cassé sans que je sache pourquoi. J'en profite pour essayer de faire quelque chose de plus propre et surtout de plus optimisé que les anciennes versions, toujours pour gagner en performance. Pour le moment, on a un support plus basique, mais plus complet que dans l'ancienne version. Je m'explique : il est plus basique, parce qu'on ne va pas proposer des choses commes les méthodes d'une variable locale ou des choses comme ça, mais il est plus complet parce qu'on a maintenant un support pour les structs, les enums et les interfaces, ce qu'on avait pas du tout avant.

Et je travaille en ce moment même sur ça :

Au revoir Valadoc ?

Oui, c'est encore un peu vide, mais ça va vite se remplir ne vous inquiétez pas. :)

Bonjour, bonjour !

Comme on pu le voir ceux qui utilisent le package, une mise à jour a été faite aujourd'hui.

Version 0.11

Au programme, on retrouve :

  • La réécriture complète du moteur de suggestions. Le code est plus propre et il est normalement même un peu plus intelligent et rapide qu'avant !
  • Un bien meilleur support des interfaces et des structs ;
  • La documentation, qui en plus d'être bien pratique pour retrouver le nom d'une méthode ou d'une classe, va beaucoup m'aider à visualiser les bugs de mon parseur de Vala. Vous pouvez l'afficher en allant dans le menu « Vala » puis « Documentation » ou en utiisant la commande valhalla:documentation ;
  • Le support des énumérations (parfois un peu envahissant malheureusement).

La documentation d'une classe

Si vous trouvez un bug ou si vous avez des idées d'améliorations à apporter, vous pouvez ouvrir une issue sur le GitHub ou en parler directement ici.

Voilà, je commence aussi l'écriture d'un tutoriel sur la création de packages Atom, un sujet assez vaste, donc je ne pense pas le mettre en bêta tout de suite, mais je le signale, si jamais des gens voudrait m'aider. :)

+1 -0

Hello les zesteux,

J’ai pas mal avancé cette semaine, avec trois versions mineures qui ont été publiées. Au final, voici ce qui a changé depuis la version 0.11.0.

  • Le support des types génériques ;
  • Les suggestions de méthodes affichent désormais les paramètres de celle-ci ;
  • On charge les symboles depuis tous les projets ouverts dans Atom (même si un éditeur n’est pas ouvert pour le fichier) ;
  • On charge aussi les .vapi indépendants de la version de Vala sous Linux (qui sont dans /usr/share/vala/vapi/) et on peut préciser plusieurs emplacements pour la recherche de fichiers .vapi ;
  • Les énumérations s’affichent uniquement quand on en a besoin (elles avaient tendance à s’afficher un peu n’importe quand) ;
  • On suggère les espaces de noms du projet lorsqu’on écrit namespace ;
  • La fonction « Entourer de… » a été réparé (elle ne marchait plus) ;
  • Valhalla s’intègre maintenant avec atom-builder, ce qui fait qu’on peut compiler en trois clics si on a installé le package atom-builder ;
  • Le mot-clé unowned est maintenant supporté ;
  • Les commentaires Valadoc sont colorés !

Un commentaire Valadoc

Bref, il y a eu du changement ! :p Et ce n’est pas fini, puisque que j’ai des issues qui sont encore ouvertes sur le GitHub du projet, et des // TODO un peu partout dans mon code. D’ailleurs, si vous vous intéressez à JavaScript et à Vala, et que vous souhaiteriez aider, c’est pas interdit. :D Je me ferai une joie de vous faire découvrir le fonctionnement du projet.

Et pour ceux qui sont curieux de savoir comment Valhalla fonctionne, mais qui n’ont pas spécialement envie de contribuer, je suis en train d’écrire une série d’articles sur mon blog pour expliquer tout ça.

Chouette projet !

J'ai de la peine à comprendre le JS que t'écris par contre. J'ai jeté un oeil ici par exemple : https://bat41.gitlab.io/fonctionnement-valhalla-3.html

Voilà 2-3 trucs qui me chiffonnent. Et y'en a beaucoup beaucoup je trouve.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
getSuggestions ({editor, bufferPosition, scopeDescriptor, prefix, activatedManually}) {
    var line = editor.getTextInRange([[bufferPosition.row, 0], bufferPosition]);
    // ^ évite les `var`

    return new Promise ((resolve) => {
        let suggestions = [];
        // ^ devrait être `const`

        const trimLine = line.trim ();

        let explore = (scope) => {
          // ^ devrait être `const`

            if (trimLine.startsWith('using ')) {
                if (scope.data && scope.data.type == 'namespace') {
                  //                              ^ ici
                    if (name.startsWith(prefix) || prefix == ' ') {
                      //                            et là ^, toujours des ===, jamais de ==
                        suggestions.push (suggestion);
                        //              ^ évite ces espaces
                    }
                }
            }

Si j'étais toi j'utiliserais un linter genre eslint ou standardjs, pour éviter les problèmes évidents et avoir un style un peu cohérent. Pour le reste y'a d'autres choses que je trouve louches, mais je pense que ce topic est pas idéal pour du code review. ;)

+1 -0

Merci pour ces conseils. :) Du coup j'en ai profiter pour virer tous les vars, et pour les lets qui devraient être des consts, je le ferai au fur et à mesure quand j'en verrai ou je prendrais un quart d'heure pour chercher dans tout le projet. Pour les == et les espaces, c'est que j'ai l'habitude de faire comme ça, mais c'est vrai que c'est pas super. Mais je les ait remplacés, et je vais essayer de faire ça correctement maintenant. :p Je regarderait peut-être pour un linter. Et si tu veux faire faire du code review, je suis preneur (mais plutôt par MPs pour ne pas flood ici ;) ).

J'arrête le Vala. En réfléchissant bien, je me dit que ce langage n'est qu'une perte de temps. Il va doucement mourir, dans son coin, parce qu'il n'a pas de vrai intérêt. Les outils ne conviennent pas : Valadoc.org a de nombreux défauts, déboguer du code est une horreur, il n'y a pas de vrai IDE, et installer des dépendances est trop complexe. On aurait pu créer ou améliorer les outils nécessaires, mais il aurait fallu le faire il y a dix ans. Aujourd'hui on a des langages comme Rust ou Crystal qui sont tout autant efficaces que Vala sur les quelques points qui rendait le langage intéressant (à savoir la vitesse et la légèreté tout en gardant un certain haut niveau, et la possibilité d'être réutilisé dans d'autres langages facilement). J'abandonne donc le Vala, Valse, poulp, Valhalla, le tuto sur Vala et tous mes projets liés au langage. Voilà.

Je rédigerai cependant le tutoriel sur la création de packages Atom, pas d'inquiétudes de ce côté là. :)

J'ai rien dit, voir plus bas. :p

+0 -0

Bon, j'ai réfléchi à ma décision d'arrêter Vala, et je suis revenu dessus. Même si Vala a des problèmes, sa syntaxe est l'une des seules que je supporte (je suis assez exigeant de ce côté là, et les seules syntaxes que j'aime sont celle de Vala et de Ruby). Les autres langages que j'ai pu essayer (Rust, Crystal, Ruby) ont eux aussi des problèmes (et parfois ça va plus loin que juste la syntaxe que je n'aime pas.

Je me dis donc qu'essayer de résoudre les problèmes de Vala est une meilleure solution que chercher une alternative, qui de toute façon risque elle aussi d'avoir des problèmes. De toute façon, je développe pour le fun, donc ce qui est important c'est que je prenne du plaisir. Et il n'y a qu'avec Vala que je m'amuse. Parce que c'est quand même drôle de passer deux heures à chercher d'où vient cette segfault. Donc finalement, je n'abandonne pas le projet, je vais même me concentrer sur celui-ci dans le futur, parce que si on veut que Vala ne meure pas comme c'est le cas en ce moment, il faut qu'il ait un IDE correct et Valhalla peut remplir ce rôle.

Salut les gens !

Je me suis remis à bosser activement sur Valhalla depuis deux ou trois semaines (après un longue pause), ce qui m’amène à déterrer ce sujet. Je viens de publier la toute première version stable du package.

1.0.0 : un code plus propre et stable

Bien que cette version n’apporte pas de gros changements visibles pour l’utilisateur, c’est une réécriture d’une bonne partie du code qui a eu lieu. J’ai en effet réécrit un tout nouveau parseur (et un lexeur) qui est beaucoup plus fiable (car moins basé sur des expressions régulières géantes) que le précédent. J’ai aussi refait toutes les vues avec etch, un tout petit package npm qui permet d’utiliser du JSX et un DOM virtuel (un peu comme React donc), spécialement conçu pour Atom et Electron. De votre côté ça devrait se traduire par une possible amélioration des performances (grâce au DOM virtuel). Mon code sera donc aussi beaucoup plus facile à maintenir dans le futur (parce que jouer avec des HTMLElement c’est un peu… le bordel).

Pour ce qui est des changements visibles, on a :

  • l’affichage des erreurs en temps réel, si le package linter est lui aussi installé (ce que je vous conseille de faire, c’est assez pratique) ;
  • On donne aussi des conseils (par exemple si on a un using en double, on est prévenu) ;
  • On vérifie aussi certaines règles au niveau du style du code (pour le moment la seule règle est de toujours mettre une espace avant d’ouvrir une parenthèse) ;
  • Les errordomain sont supportés ;
  • On propose aussi des suggestions dans les commentaires de documentation ;
Un avertissement quand on a using en double
Suggestion d’errordomains
L’autocomplétion des taglets de documentation

J’ai également mis en place eslint suite aux conseil de victor, mon code devrait être plus agréable à lire. :)

Voilà, si vous avez des questions ou des suggestions, n’hésitez pas. :) Je devrais aussi reprendre l’écriture du tuto sur les packages Atom très bientôt également (genre juste après avoir posté ce message). :p

Hello !

Je continue d’avancer, j’ai sorti la 1.1.0. Depuis la sortie de la 1.0.0, j’ai ajouté deux fonctionnalités assez sympas. La première, que j’avais en tête depuis longtemps, est la possibilité de créer une classe fille en faisant un clic-droit sur le nom de la classe mère.

Création d’une classe fille facilitée

La seconde est une liste des symboles du fichier que l’on est en train d’éditer, ce qui permet de naviguer rapidement à travers les gros fichiers. Vous pouvez en voir une démo en vidéo ici. Bref, je m’amuse bien avec etch. :D

J’ai aussi ajouté une règle au linter pour interdire les espaces en fin de ligne et fixé trois bugs qu’on m’avait rapporté sur GitHub.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte