Hybrid Structured Editing: Structures for Tools, Text for Users

Este artigo propõe a "edição estruturada híbrida", uma abordagem que permite aos criadores de ferramentas definir garantias estruturais sobre o código para facilitar a integração de ferramentas de programação, enquanto mantém aos usuários uma interface de edição de texto familiar e consistente.

Tom Beckmann (Hasso Plattner Institute, Germany / University of Potsdam, Germany), Christoph Thiede (Hasso Plattner Institute, Germany / University of Potsdam, Germany), Jens Lincke (Hasso Plattner Institute, Germany / University of Potsdam, Germany), Robert Hirschfeld (Hasso Plattner Institute, Germany / University of Potsdam, Germany)

Publicado Mon, 09 Ma
📖 5 min de leitura🧠 Leitura aprofundada

Each language version is independently generated for its own context, not a direct translation.

Imagine que você está escrevendo um livro. O texto é o que você vê no papel (ou na tela), mas por trás de cada palavra, existe uma estrutura invisível: capítulos, parágrafos, frases e palavras.

Normalmente, os editores de texto (como o Word ou o VS Code) são como máquinas de escrever muito inteligentes: eles entendem o que você digita, mas se você apagar uma vírgula, eles podem ficar confusos sobre onde começa e termina uma frase.

Agora, imagine que você quer adicionar "superpoderes" ao seu livro. Por exemplo:

  • Um pequeno visor flutuante ao lado de uma frase que mostra o que ela significa na vida real.
  • Um botão que transforma um número em um controle deslizante (slider) para você testar valores diferentes.
  • Um editor de SQL embutido dentro de uma string de JavaScript, sem precisar fugir de caracteres estranhos.

O problema é que criar esses "superpoderes" é difícil. Se o editor for apenas texto, o programador que cria a ferramenta precisa ficar constantemente calculando: "Se o usuário apagar uma letra aqui, onde minha ferramenta deve aparecer agora?". É como tentar colar um adesivo em uma parede enquanto alguém está pintando a parede e mudando a textura o tempo todo.

A Solução: "Edição Híbrida Estruturada" (HybridSE)

Os autores deste artigo propõem uma solução genial chamada Edição Híbrida Estruturada. Eles criaram uma "ponte" mágica entre dois mundos:

  1. O Mundo do Usuário (Texto): Para você, o usuário final, tudo parece um editor de texto normal. Você digita, apaga e move o cursor como sempre fez. Nada de menus estranhos ou cliques em caixas de diálogo.
  2. O Mundo da Ferramenta (Estrutura): Para as ferramentas e plugins, o código não é apenas texto bagunçado. É uma árvore organizada, com galhos e folhas bem definidos.

A Analogia do "Mestre de Obras"

Pense no editor de texto tradicional como um pedreiro que só vê tijolos e argamassa. Se você pedir para ele colocar uma janela, ele precisa saber exatamente qual tijolo remover e onde colocar o vidro, senão a parede cai.

A Edição Híbrida introduz um Mestre de Obras (o sistema HybridSE) entre você e o pedreiro.

  • Você (o cliente): Fala com o Mestre de Obras: "Quero uma janela aqui". Você não precisa saber qual tijolo remover.
  • O Mestre de Obras (HybridSE): Ele olha para a planta baixa (a estrutura do código), sabe exatamente qual é o "bloco" da janela, e diz ao pedreiro: "Remova este tijolo específico e coloque o vidro aqui".
  • O Pedreiro (o Editor de Texto): Ele apenas executa a ordem de remover e colocar, mas como o Mestre de Obras garantiu que a estrutura está correta, a parede nunca cai.

Como isso funciona na prática?

O sistema usa três truques principais para manter a mágica funcionando:

  1. Rastreamento Inteligente (O GPS):
    Quando você edita o texto, o sistema sabe exatamente qual "peça" do código você está mexendo. Se você mudar o nome de uma variável, a ferramenta que estava monitorando essa variável sabe que ela ainda é a mesma, mesmo que o texto tenha mudado de lugar. É como se cada ferramenta tivesse um GPS que a mantém presa ao objeto certo, mesmo que você o mova pela casa.

  2. Janelas dentro de Janelas (Os Fragmentos):
    Às vezes, uma ferramenta precisa mostrar um pedaço do código para você editar. O sistema cria uma "janela" (um fragmento) que mostra apenas aquela parte. Se você editar dentro dessa janela, o sistema sabe que você está editando a estrutura original, não apenas um pedaço solto de papel. É como editar um capítulo de um livro que está sendo exibido em uma tela separada, mas que ainda faz parte do mesmo livro físico.

  3. O "Desfazer" Automático (Transações):
    Imagine que você está editando um código e, sem querer, digita algo que quebra a regra da ferramenta (por exemplo, apaga um parêntese necessário). Em um editor normal, a ferramenta desapareceria ou mostraria erro.
    Com o HybridSE, o sistema entra em um modo de "espera". Ele mostra uma mensagem: "Ei, isso vai quebrar a ferramenta. Você quer continuar mesmo assim ou voltar?". Se você continuar, ele aplica a mudança. Se você desistir, ele reverte para o estado seguro. Isso evita que a ferramenta "morra" acidentalmente.

Por que isso é importante?

Antes, para ter ferramentas incríveis que mostram dados em tempo real ou permitem edição visual, você precisava usar editores "estruturados" (onde você não digita texto, mas clica em blocos). O problema é que esses editores são estranhos e difíceis de usar para quem está acostumado a digitar código.

Com a Edição Híbrida, você ganha o melhor dos dois mundos:

  • Para o Usuário: Você continua usando seu editor de texto favorito, com atalhos de teclado e digitação livre.
  • Para o Criador de Ferramentas: Eles podem criar ferramentas poderosas que "entendem" o código profundamente, sem se preocupar em calcular onde o texto vai ficar depois que você digitar uma letra.

Conclusão

Em resumo, os autores criaram um "tradutor universal" que permite que ferramentas inteligentes e visuais vivam dentro de editores de texto comuns. Eles garantem que, enquanto você digita, a estrutura do seu programa permaneça sólida e organizada, permitindo que ferramentas inovadoras (como visualizadores de dados ao vivo ou editores de SQL embutidos) funcionem de forma suave e sem quebrar nada.

É como ter um assistente invisível que organiza a bagunça do texto em tempo real, permitindo que você tenha o poder de um editor visual com a liberdade de um editor de texto.