Un editor de código de verdad para Android: servidores de lenguaje LSP, autocompletado semántico, resaltado de sintaxis TextMate, edición multicursor, navegación y diagnósticos en línea.
La mayoría de los «editores de código» en Android no son más que cajas de texto
con ínfulas. Se apoyan en el TextView de Android, se atragantan con un archivo
de 2.000 líneas y no ofrecen nada que lleve a un desarrollador de verdad a
confiarles su código de producción. Con suerte tienes colores de sintaxis, y ahí
se acaba la cosa. Así que, en cuanto surge un bug que hay que arreglar sobre la
marcha, acabas echando mano del portátil de todos modos.
Pocket Code adopta el enfoque contrario. Su editor de código para Android
está construido sobre Sora Editor, un motor de alto rendimiento respaldado por
una estructura de datos de tipo gap-buffer. A diferencia de las soluciones basadas
en TextView, Sora evita una copia O(n) en cada pulsación, así que los archivos
grandes se mantienen fluidos. Sobre ese motor, Pocket Code añade todo lo que
esperarías de un IDE de escritorio: servidores de lenguaje LSP,
autocompletado semántico, resaltado de sintaxis de verdad, edición
multicursor y navegación profunda por el código. Esto es lo que significa en
la práctica.
El resaltado se apoya en gramáticas TextMate (el mismo formato
.tmLanguage.json que usa VS Code), procesadas por el motor tm4e. Eso cubre 33
lenguajes de serie —Kotlin, Java, Python, JavaScript, TypeScript (y TSX), Go,
Rust, C, C++, C#, PHP, Ruby, Swift, Scala, SQL, YAML, TOML, Dockerfile y más—,
cada uno asignado a su ámbito TextMate y a sus extensiones de archivo correctas.
Para que el editor siga respondiendo con soltura en un móvil, Pocket Code incluye
su propio IncrementalTokenizer, que pinta los tokens al instante en lugar de
esperar a que termine la pasada completa de TextMate. Alrededor de eso tienes lo
esencial de un editor que hace legible el código: números de línea configurables,
indicadores de emparejamiento de llaves y paréntesis, guías visuales de sangría y
plegado de código para funciones, clases, métodos, interfaces, bloques de
comentarios, bloques de importaciones y regiones personalizadas, con plegados
anidados y un estado de plegado que se conserva por archivo.
La detección de lenguaje es automática, por extensión (CodeLanguage.fromExtension())
o por nombre de archivo (CodeLanguage.fromFileName(), que reconoce Dockerfile,
Makefile, .gitignore y compañía), y recurre a texto plano cuando no encaja
nada.
Aquí es donde Pocket Code deja de ser un juguete móvil y empieza a ser un IDE. El
editor incluye un cliente completo del Language Server Protocol —LspClient,
que implementa LSP 3.17— que se conecta a servidores de lenguaje externos
estándar (clangd, pyright y otros). La comunicación se realiza mediante
JSON-RPC 2.0, con gestión completa del ciclo de vida del servidor de lenguaje
y reconexión automática si un servidor se cae.
Ese cliente LSP es lo que convierte el autocompletado básico en un IntelliSense de verdad. Estas son las ocho capacidades que implementa:
| Método LSP | Función |
|---|---|
textDocument/completion | Autocompletado semántico |
textDocument/hover | Documentación al pasar el cursor |
textDocument/definition | Ir a la definición |
textDocument/references | Buscar referencias |
textDocument/signatureHelp | Pistas de parámetros de función |
textDocument/formatting | Formateo asistido por el servidor |
textDocument/rename | Renombrado semántico seguro |
textDocument/publishDiagnostics | Diagnósticos del servidor en tiempo real |
El motor Sora también proporciona su propia ventana flotante nativa de autocompletado, así que tienes sugerencias incluso antes de configurar un servidor de lenguaje. Y para la escritura asistida por IA, una capa de Ghost Text muestra las sugerencias como texto en línea semitransparente después del cursor, con un margen de 150 ms antes de que los pequeños movimientos del cursor la descarten: al aceptar una sugerencia se inserta el texto completo conservando tu historial de deshacer/rehacer, y nunca entra en conflicto con el motor de autocompletado estándar.
Escribir código en un móvil solo resulta doloroso si el editor lo hace doloroso.
El MultiCursorEngine de Pocket Code te permite colocar cursores adicionales
en posiciones arbitrarias y editar en todos ellos a la vez, con una conversión
limpia entre desplazamiento ↔ línea/columna y la posibilidad de eliminar cursores
concretos mientras los demás siguen activos.
Emmet está totalmente soportado para HTML y CSS: ul>li*3 se expande a una
lista anidada, div.cls#id se convierte en <div id="id" class="cls"></div>, y
abreviaturas de CSS como df → display: flex o w100p → width: 100%
funcionan todas.
Como los teclados de los móviles no se diseñaron para escribir código, hay una
barra de símbolos de programación encima del teclado del sistema. Una sección
inserta los caracteres que realmente necesitas —{ } [ ] ( ) ; :
= y los demás— y otra ofrece acciones: deshacer/rehacer, mover una línea arriba
o abajo, alternar comentarios de línea (//) o de bloque (/* */), duplicar la
línea actual, ir a una línea, ordenar las líneas seleccionadas y transformar
mayúsculas/minúsculas (MAYÚSCULAS / minúsculas / Título). Añade el ajuste del
tamaño de fuente con pellizco para hacer zoom, una lupa al mantener
pulsado para colocar el cursor con precisión y deshacer/rehacer ilimitados, y
la pantalla pequeña deja de ser una excusa.
Un editor de verdad se juzga por lo rápido que te mueves por una base de código. Pocket Code te da el kit de navegación completo:
Ctrl+Shift+F.No siempre quieres levantar un servidor de lenguaje, así que Pocket Code incluye
un motor local de InlineDiagnostics que detecta problemas en tiempo real
usando reglas por lenguaje, sin necesidad de LSP. Trae reglas para Kotlin,
Java, JavaScript/TypeScript, Python, Go, Rust, PHP, CSS, HTML y JSON.
Las reglas universales señalan espacios en blanco al final de línea, líneas en
blanco consecutivas de más y comentarios TODO / FIXME / HACK / NOTE /
BUG / WARN. Las reglas específicas de cada lenguaje van más allá: el uso de
!! en Kotlin, == en lugar de === o var en lugar de let/const en
JavaScript, sangría inconsistente e importaciones sin usar en Python, JSON mal
formado. Todo aparece en un panel de Problemas al estilo de VS Code, agrupado
por archivo y filtrable por severidad (ERROR, WARNING, INFO, HINT).
Donde puede, el editor te arregla las cosas. Las correcciones rápidas aparecen junto a los diagnósticos: limpian los espacios al final de línea, eliminan líneas en blanco y aplican acciones específicas de cada lenguaje. Y las refactorizaciones de extracción analizan las variables de una selección para extraer un método (con los parámetros y la llamada correctos) o envolver una expresión en una variable con nombre, con la sangría ajustada automáticamente al nivel correcto.
El formateo es totalmente local, en el dispositivo: sin herramientas externas, sin ida y vuelta por la red. Cada lenguaje tiene su propia implementación de formateador:
| Formateador | Lenguajes |
|---|---|
| Estilo C | Kotlin, Java, JS, TS, C, C++, C#, Dart, Go, Swift, Rust, PHP, Scala, Gradle |
| Python | Python (sangría PEP-8) |
| XML/HTML | HTML, XML, SVG |
| JSON | JSON (formateado o compacto) |
| CSS | CSS, SCSS, Less |
| YAML / SQL / Markdown | YAML, SQL, Markdown |
Las opciones por perfil te permiten definir el tamaño de sangría, el ancho máximo de línea, si añadir un salto de línea final, el espaciado alrededor de los operadores y la colocación de las llaves.
La disposición se adapta automáticamente a los formatos de móvil en vertical, móvil en horizontal, tablet y plegable. Un modo Zen oculta todo salvo el texto, un editor dividido muestra dos archivos en paralelo, y unos chips contextuales en la barra de herramientas ponen Formatear, Buscar, Reemplazar y Esquema a un toque. Prácticamente todas las acciones viven en un menú de desbordamiento organizado, y hay un modo sin conexión para que la edición, la ejecución local y Git sigan funcionando sin conectividad.
Un apunte sincero: la colaboración en tiempo real está en la hoja de ruta, pero todavía no está disponible. El panel de colaboración existe como prototipo de interfaz sin backend —la sincronización de cursores y las sesiones compartidas están planificadas—, así que no vamos a fingir que funcionan hoy.
Un móvil ya no es excusa para escribir código con una herramienta peor. El editor de Pocket Code lleva las partes que de verdad importan —autocompletado e IntelliSense respaldados por LSP, resaltado de sintaxis TextMate en 33 lenguajes, edición multicursor y navegación completa por el código— al dispositivo que siempre llevas en el bolsillo.
Pocket Code va camino de Google Play. Apúntate al preregistro para estar entre los primeros en probarlo en tu propio dispositivo.
Descarga la app y empieza a programar desde tu móvil.