651 - TypeScript, GNOME y Neovim. Mi experiencia

651 - TypeScript, GNOME y Neovim. Mi experiencia

Personalizar y configurar desarrollando extensiones y aplicaciones para #gnome en #linux utilizando #typescript y si lo quieres también #neovim

1:25
-3:15

Como te vengo contando en las últimas semanas, estoy trabajando en el desarrollo de varias extensiones para GNOME Shell. Soy muy fan de la automatización, y esto me lleva a implementar distintas herramientas, servicios y aplicaciones, que me ayuden con ello. Lo cierto es que, en ocasiones, invierto mas tiempo desarrollando esas herramientas, que la hipotética ayuda que me pueden dar. Pero, como dice el dicho sarna con gusto no pica. Pero, sea como fuere, lo cierto es que lo disfruto. Y son, precisamente, esas herramientas que implemento para mi, las que más éxito han tenido, mas que nada, porque las mantengo actualizadas para seguir utilizándolas. En este tiempo, desde que utilizo Linux, he utilizado Python, Rust, JavaScript y en estos últimos meses TypeScript. Y es precisamente de TypeScript, GNOME y Neovim de lo que te quiero hablar en este episodio.

TypeScript, GNOME y Neovim. Mi experiencia

Sobre GNOME y JavaScript

Como ya he contado en algún que otro episodio, lo cierto es que incialmente no terminaba de entender porque los desarrolladores de GNOME se habían decantado por JavaScript como lenguaje principal para el desarrollo de aplicaciones, y por supuesto, también, para el desarrollo de extensiones de GNOME Shell.

Sin embargo, tal y como conté en la Ubucon Europe 2018, en la charla que di sobre el desarrollo de extensiones para GNOME Shell, la elección de JavaScript tiene mucho sentido. Y es que, JavaScript es un lenguaje muy potente, y muy versátil, que se ha convertido en el lenguaje de facto para el desarrollo de aplicaciones web. Y GNOME, como escritorio, no podía quedarse atrás. Y es que, GNOME, como escritorio, es un escritorio muy moderno, y por tanto, no podía quedarse atrás en la elección de un lenguaje de programación.

Sin embargo, nunca me ha resultado sencillo escribir aplicaciones utilizando el framework por la integración con el escritorio y por la documentación. Pero, esto está cambiando. Cada vez hay mas y mejor documentación para escribir aplicaciones y extensiones utilizando Gtk y el resto de librerías de GNOME. Solo me faltaba la integración con el editor.

TypeScript vs JavaScript

La eterna lucha de los lenguajes tipados frente a los no tipados. Siempre he tenido la sensación de que los lenguajes tipados son mas seguros, y que permiten detectar errores en tiempo de compilación, lo que a la larga, ahorra tiempo. Sin embargo, también he tenido la sensación de que los lenguajes tipados son mas verbosos, y que requieren mas tiempo para escribir el código. Pero, la verdad, es que TypeScript me ha sorprendido gratamente.

Implementar con Python o JavaScript me permite liberar mi melena, valga la ironía. Me permite hacer pruebas de concepto, muy rápidamente y ver si el desarrollo que estoy haciendo tiene sentido o no. Pero, conforme las aplicaciones se vuelven mas complejas el asunto cambia, y cambia mucho.

Esto de transpilar el código de TypeScript a JavaScript, me ha permitido tener un código mas limpio, mas seguro, y mas sostenible. Y es que, a pesar de que TypeScript es un lenguaje tipado, no es necesario que especifiques el tipo de las variables, ya que TypeScript es capaz de inferir el tipo de las variables. Y esto es una gran ventaja, ya que te permite tener un código mas limpio, y mas mantenible.

Así, en las últimos meses, las extensiones que venía haciendo en JavaScript las he ido migrando a TypeScript. El código resultante es mucho mas limpio y aseado.

TypeScript y GNOME

Si en algún momento te has planteado hacer alguna extensión para GNOME Shell, indicarte que existen utilidades que te ayudan con los primeros pasos. Pero esto mismo no sucede con TypeScript. Por ejemplo, si quieres iniciar un proyecto utilizando JavaScript lo puede hacer con el siguiente comando,

gnome-extensions create --interactive

Esto con unas pocas preguntas te creará el esqueleto de tu extensión de forma muy sencilla. De verdad que es un muy interesante punto de partida, para crear tu propia extensión y dar tus primeros pasos.

Sin embargo, pronto te darás cuenta que desarrollar una extensión o una aplicación directamente en JavaScript no es nada sencillo. Sin embargo, con TypeScript la cosa cambia sustancialmente.

Implementar una extensión o una aplicación con TypeScript es realmente cómodo gracias precisamente al tipado, que permite tener la ayuda contextual necesaria para que la cosa sea mas sencilla.

La magia aquí se encuentra en le archivo ambient.d.ts,

import "@girs/gjs";
import "@girs/gjs/dom";
import "@girs/gnome-shell/ambient";
import "@girs/gnome-shell/extensions/global";

Esto hace posible utilizar las rutas de importación habituales en tus archivos TypeScript en lugar de referenciar @girs/* directamente. Esto facilita enormemente el trabajo.

Uno de las aspectos a tener en cuenta es la modularidad. Esto te permite hacer un código mucho mas limpio, pero además te va a permitir reutilizarlo.

Neovim y TypeScript

Aquí justo es donde entra Neovim, que como sabrás es mi editor por defecto. Neovim es un editor muy potente, pero que no tiene la integración con TypeScript que tiene Visual Studio Code. Sin embargo, gracias a los LSP, y a los distintos complementos, la integración es total.

Te recomiendo que le des un vistazo a mis dotfiles en Gitub, para que veas exactamente como lo tengo montado en mi caso. Pero, indicarte que existen distintas opciones y posibilidades para conseguir esta integración.

En mi caso, estoy utilizando Lazy.

Una observación sobre GNOME Shell

En ocasiones he leído, mas que he oído, críticas sobre la simplicidad de GNOME. Me gusta la limpieza de GNOME, y las ventajas que esto ofrece. Dependiendo de lo que necesites, puedes utilizarlo tal y como viene de caja, o añadir aquellas extensiones que necesites para adaptarlo a tus necesidades.

Aquí, como he comentado en otras ocasiones, tu puedes adaptar el escritorio a tus necesidades, y no al revés. Y esto es algo que me gusta mucho. Y no solo, con las extensiones que puedes encontrar, sino que también puedes crear tus propias extensiones.

Conclusión

Estoy muy contento con TypeScript, GNOME y Neovim. Creo que es una combinación muy potente, y que me permite desarrollar de forma muy cómoda. Si te estás planteando hacer alguna extensión para GNOME Shell, te recomiendo que lo hagas con TypeScript.

En cuanto a utilizar Neovim o no, dependerá de si ya lo utilizas o no. Si no utilizas ya Neovim y no conoces TypeScript, o como hacer extensiones para GNOME Shell, no me embarcaría en esa nueva aventura. Simplemente seguiría utilizando el editor por defecto que utilices, o quizá me decantaría inicialmente por Visual Studio Code, para mas tarde, si aún así lo quieres dar el salto a Neovim.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *