Pular para o conteúdo
Voltar ao início
Feature

O Editor de Código que o Android Merece: LSP, IntelliSense e Mais

Um editor de código de verdade para Android: servidores de linguagem LSP, autocompletar semântico, realce de sintaxe TextMate, edição com múltiplos cursores, navegação de código e diagnósticos em linha — tudo no seu celular.

Atualizado:
10 min
Por Pelayo Naredo
O Editor de Código que o Android Merece: LSP, IntelliSense e Mais

A maioria dos "editores de código" no Android não passa de caixas de texto glorificadas. Elas se apoiam no TextView do Android, engasgam com um arquivo de 2.000 linhas e não oferecem nada que faça um desenvolvedor de verdade confiar código de produção a elas. Você ganha cores de sintaxe se tiver sorte, e é só isso. Então, no momento em que um bug precisa ser corrigido na correria, você acaba pegando o notebook de qualquer jeito.

O PocketCode segue o caminho oposto. Seu editor de código para Android é construído sobre o Sora Editor, um motor de alto desempenho pensado para arquivos grandes. Diferentemente das soluções baseadas em TextView, o Sora evita uma cópia O(n) a cada tecla pressionada, então arquivos grandes continuam fluidos. Em cima desse motor, o PocketCode adiciona as coisas que você espera de uma IDE de desktop: servidores de linguagem LSP, autocompletar semântico, realce de sintaxe de verdade, edição com múltiplos cursores e navegação de código profunda. Veja como isso funciona na prática.

Realce de sintaxe que não é brinquedo

O realce é feito por gramáticas TextMate (o mesmo formato .tmLanguage.json que o VS Code usa), processadas pelo motor tm4e. Isso cobre 39 linguagens prontas para uso — Kotlin, Java, Python, JavaScript, TypeScript (e TSX), Go, Rust, C, C++, C#, PHP, Ruby, Swift, Scala, SQL, YAML, TOML, Dockerfile, e mais — cada uma mapeada para seu escopo TextMate e extensões de arquivo corretos.

Para manter o editor responsivo em um celular, o PocketCode traz seu próprio IncrementalTokenizer, que pinta os tokens instantaneamente em vez de esperar a passagem completa do TextMate terminar. Ao redor disso você tem os recursos essenciais que deixam o código legível: números de linha configuráveis, indicadores de chaves e parênteses correspondentes, guias visuais de indentação e um esquema da estrutura do arquivo (classes, funções, blocos de comentário e de import, regiões personalizadas) que também alimenta a trilha de navegação. Não há dobramento de código: o motor Sora não consegue ocultar linhas.

A detecção de linguagem é automática, por extensão (CodeLanguage.fromExtension()) ou por nome de arquivo (CodeLanguage.fromFileName(), que reconhece Dockerfile, .gitignore e os arquivos de build do Gradle; um Makefile abre como texto simples), recorrendo a texto simples quando nada corresponde.

Autocompletar e IntelliSense, com a força do LSP

É aqui que o PocketCode deixa de ser um brinquedo mobile e passa a ser uma IDE. O editor inclui um cliente completo de Language Server Protocol — LspClient, que implementa o LSP 3.17 — que conversa com servidores de linguagem padrão, cada um instalado com um toque pelo editor: TypeScript e JavaScript, Pyright para Python, os servidores de HTML/CSS/JSON, Markdown, YAML (com Docker Compose e GitHub Actions), Dockerfile, Bash, Vue, Svelte, Astro, GraphQL, MDX, Prisma e Angular, mais auxiliares de CSS como Emmet, Stylelint ou UnoCSS. 19 linguagens têm um servidor de linguagem de um toque. Java, Kotlin, Go, Rust, C, C++, Ruby, Swift e Dart não têm: os servidores delas são programas nativos ou exigem um runtime que o PocketCode não inclui. O PHP só funciona se o projeto trouxer o intelephense no próprio node_modules. Limites: o Bash funciona sem ShellCheck, o YAML não baixa esquemas remotos, no máximo 2 servidores auxiliares ao mesmo tempo, e Vue, Svelte, Astro, MDX e Angular usam o pacote do TypeScript. O GraphQL precisa de um arquivo graphql-config no projeto e o Angular de um angular.json. A comunicação roda sobre JSON-RPC 2.0, com o ciclo de vida do servidor gerenciado pelo app e um reinício automático se ele cair.

Esse cliente LSP é o que transforma o autocompletar básico em IntelliSense de verdade. Aqui estão as oito capacidades que ele implementa:

Método LSPRecurso
textDocument/completionAutocompletar semântico
textDocument/hoverDocumentação ao passar o cursor
textDocument/definitionIr para a definição
textDocument/referencesLocalizar referências
textDocument/signatureHelpDicas de parâmetros de função
textDocument/formattingFormatação assistida pelo servidor
textDocument/renameRenomeação semântica segura
textDocument/publishDiagnosticsDiagnósticos do servidor em tempo real

O motor Sora também fornece sua própria janela flutuante nativa de autocompletar, então você tem sugestões mesmo antes de configurar um servidor de linguagem. E para a escrita assistida por IA, uma camada de Ghost Text renderiza sugestões como texto em linha semitransparente após o cursor, com uma janela de tolerância de 150 ms antes que pequenos movimentos do cursor as descartem — aceitar uma sugestão insere o texto completo preservando seu histórico de desfazer/refazer, e ela nunca briga com o motor de autocompletar padrão. O Ghost Text envia código ao provedor de IA que você configurou, após o seu consentimento.

Poder de edição: múltiplos cursores, Emmet e um teclado de símbolos

Digitar código no celular só é doloroso se o editor tornar isso doloroso. O MultiCursorEngine do PocketCode coloca um cursor em cada ocorrência da palavra sob o cursor (Ctrl+Shift+L, ou Adicionar cursores em todas as ocorrências no menu) e edita todas de uma vez — inclusive o que você digita no teclado da tela, não só em um físico.

O Emmet funciona para HTML e CSS pelo comando Expandir abreviação Emmet (sem atalho, e o Tab não o aciona): ul>li*3 se expande em uma lista aninhada, div.cls#id vira <div id="id" class="cls"></div>, e atalhos de CSS como df → display: flex ou w100p → width: 100% funcionam. É um subconjunto: não há ^ nem numeração com $.

Como os teclados de celular não foram feitos para código, uma barra de símbolos de programação fica acima do teclado do sistema. Uma seção insere os caracteres que você realmente precisa — { } [ ] ( ) ; : = e o resto — e outra expõe ações: desfazer/refazer, mover uma linha para cima ou para baixo, alternar comentários de linha (//) ou de bloco (/* */), duplicar a linha atual, ir para uma linha, ordenar linhas selecionadas e transformar maiúsculas e minúsculas (MAIÚSCULA / minúscula). Some a isso o dimensionamento de fonte com pinça para dar zoom, uma lupa ao manter pressionado para posicionar o cursor com precisão e 200 passos de desfazer/refazer por aba, e a tela pequena deixa de ser uma desculpa.

Um editor de verdade é julgado pela velocidade com que você consegue se mover por uma base de código. O PocketCode te dá o kit completo de navegação:

  • Ir para símbolo — um diálogo com filtro difuso sobre o arquivo ativo, cobrindo funções, métodos, classes, interfaces, propriedades, variáveis, constantes, imports e regiões, cada um mostrado com uma linha de contexto.
  • Painel de estrutura — uma árvore deslizante da estrutura do arquivo que se atualiza ao vivo conforme você edita.
  • Espiar definição — um popup em linha mostrando cerca de 10 linhas de contexto ao redor da definição de um símbolo, sem mover o cursor.
  • Ir para referências — as referências que o servidor de linguagem encontra, possivelmente em vários arquivos; sem servidor, uma busca de texto só no arquivo atual.
  • Renomear símbolo — mostra uma pré-visualização que separa as ocorrências no código das de strings e comentários (que não são renomeadas) antes de você aplicar. Com um servidor de linguagem pode editar outros arquivos; sem ele, renomeia só no arquivo atual.
  • Buscar em arquivos — texto ou regex no projeto (Ctrl+Shift+F), pela paleta ou pelo menu Ir para. Ele pula arquivos grandes (512 KB ou mais), para em 500 resultados e só busca: não há substituição entre arquivos.
  • Paleta de comandos — um ponto de entrada difuso no estilo VS Code para todas as ações do editor.
  • Auto-import — sugere um import para símbolos ainda não importados, a partir de uma tabela interna de símbolos conhecidos (Kotlin, Java, Python, JavaScript/TypeScript, Go e Rust); não procura os símbolos do seu próprio projeto.

Diagnósticos sem servidor

Nem sempre você quer subir um servidor de linguagem, então o PocketCode traz um motor local de InlineDiagnostics que captura problemas em tempo real usando regras por linguagem — sem precisar de LSP. Ele carrega regras para Kotlin, Java, JavaScript/TypeScript, Python, Go, Rust, PHP, CSS, HTML e JSON.

Regras universais sinalizam espaços em branco no final da linha, linhas em branco consecutivas em excesso, chaves e parênteses sem par, e comentários TODO / FIXME / HACK / XXX / BUG. Regras específicas de linguagem vão além — uso de !! em Kotlin, == em vez de === ou var em vez de let/const em JavaScript, mistura de tabs e espaços e except sem tipo em Python, JSON malformado. Tudo aparece em um painel de Problemas no estilo VS Code, agrupado por arquivo e filtrável por severidade (ERROR, WARNING, INFO, HINT).

Onde consegue, o editor corrige as coisas para você. As correções rápidas aparecem ao lado dos diagnósticos — limpar espaços em branco no final da linha, remover linhas em branco e aplicar ações específicas de linguagem. E as refatorações de extração analisam as variáveis em uma seleção para extrair um método (com os parâmetros e o ponto de chamada corretos) ou envolver uma expressão em uma variável nomeada, indentada automaticamente no nível correto.

Formatação, no dispositivo

A formatação é totalmente no dispositivo — sem ferramentas externas, sem ida-e-volta pela rede. Oito formatadores dedicados cobrem 24 linguagens:

FormatadorLinguagens
Estilo CKotlin, Java, JS, TS, C, C++, C#, Dart, Go, Swift, Rust, PHP, Scala, Gradle
PythonPython (indentação PEP-8)
XML/HTMLHTML, XML, SVG
JSONJSON (formatado ou compacto)
CSSCSS, SCSS, Less
YAML / SQL / MarkdownYAML, SQL, Markdown

Formatar documento (Shift+Alt+F, com Formatador de código ligado em Configurações) tenta primeiro o servidor de linguagem e recorre a estes. A indentação e a largura da linha vêm do .editorconfig do projeto (indent_style, indent_size, tab_width, end_of_line, max_line_length). As demais linguagens recebem só uma limpeza genérica (espaços finais, linhas em branco, quebra de linha final).

Feito para o celular, não portado para ele

O layout se adapta automaticamente aos formatos Celular Retrato, Celular Paisagem, Tablet e Dobrável. Um modo Zen esconde tudo, menos o texto, um visualização dividida mostra um segundo painel somente leitura ao lado do editor, e as abas ficam sempre no topo, com um explorador no estilo VS Code a um toque. Toda ação fica em um menu por seções, com uma fileira de acesso rápido para Formatar, Localizar, Ir para símbolo, Controle de código e Executar, e, com uma sessão já iniciada, edição, execução local e Git local funcionam no dispositivo sem conexão. São 23 temas de editor integrados: 4 grátis (PocketCode Dark, PocketCode Light, VS Code Dark+ e GitHub Light) e 19 Pro.

A colaboração em tempo real funciona na sua rede local: quem está no mesmo Wi-Fi edita o mesmo arquivo com presença, cursores e comentários, e nada sai da rede.


Um celular não é mais desculpa para escrever código com uma ferramenta pior. O editor do PocketCode traz as partes que realmente importam — autocompletar e IntelliSense com apoio de LSP, realce de sintaxe TextMate em 39 linguagens, edição com múltiplos cursores e navegação de código completa — para o dispositivo que está sempre no seu bolso. Se você chega ao editor a partir de um projeto novo, o guia de primeiros passos mostra o caminho, e o terminal integrado fecha o ciclo entre escrever e executar.

O PocketCode está disponível no Google Play. Baixe o PocketCode para experimentar o editor no seu próprio dispositivo.

Perguntas frequentes

Existe um bom editor de código para Android?

Sim. O PocketCode é um editor de código completo com autocompletar apoiado em LSP, realce de sintaxe para 39 linguagens, edição com múltiplos cursores e Git integrado — rodando inteiramente no celular.

Dá para programar no Android sem um computador?

Sim. O PocketCode é uma IDE completa: você pode escrever e executar código só no celular, e depurar JavaScript no Node. Precisa de conexão para entrar na conta; depois disso seu código roda no dispositivo. Sem notebook nem servidor.

Existe um editor de código para Android com terminal?

Sim. O PocketCode combina o editor com um terminal integrado (shell local, SSH e SFTP) e runners de código no dispositivo, então você edita e executa no mesmo app.

O editor tem Git?

Sim — Git integrado com commit, diff, blame e branches, sem precisar de um cliente externo.

É grátis e sem anúncios?

O editor completo é grátis e sem anúncios. O plano Free inclui 1 projeto e 4 dos 23 temas integrados; o Pro remove o limite de projetos e adiciona sincronização na nuvem e os temas Pro.

Funciona offline?

É preciso conexão para entrar na conta; abrir o app com uma sessão já iniciada funciona offline. O editor, o Git local e os runners rodam no dispositivo, e os servidores de linguagem e os pacotes de runtime opcionais, uma vez baixados, também funcionam sem conexão (baixá-los exige rede).

A ferramenta por trás deste artigo

Editor de código

Pronto para experimentar o PocketCode?

Baixe o app e comece a programar pelo seu celular.