Completude de LMHT sensível a contexto e com inserção de marcação (#103)#123
Merged
leonelsanchesdasilva merged 1 commit intoJul 26, 2026
Conversation
…signLiquido#103) O provedor de completude de LMHT devolvia sempre a mesma lista de 122 tags, em qualquer posição do cursor, e sem insertText: escolher 'titulo1' inseria o texto pelado, não '<titulo1></titulo1>'. Não havia completude de atributos, e sugestões apareciam até dentro de comentários. Reescrita seguindo a técnica de contexto que o provedor de FolEs desta mesma extensão já usa. O provedor agora determina o contexto do cursor analisando o texto até a posição e decide o que sugerir: - Comentário (<!-- sem --> correspondente antes do cursor): não sugere nada. - Abertura de tag (após '<nome ' com espaço, sem '>' de fechamento): sugere atributos, não estruturas. Usa o dicionário de atributos que já existia em fontes/linguagens/lmht/atributos.ts, inserindo 'atributo="|"' com o cursor entre as aspas. - Posição de estrutura (início de arquivo, após '>' ou '<'): sugere as tags como snippet. Estruturas normais inserem '<tag>|</tag>' com o cursor no meio; as oito estruturas que correspondem a tags vazias (void) em HTML — area, campo, coluna, imagem, linha-horizontal, quebra-linha, quebra-linha-oportuna, recurso — inserem '<tag />' sem fechamento. Decisão de escopo: texto livre dentro de uma estrutura (por exemplo, após '<paragrafo>') continua sugerindo estruturas, porque LMHT permite aninhar tags no meio do texto ('<p>olá <negrito>mundo</negrito></p>'). Suprimir ali quebraria aninhamento legítimo; é também o comportamento do suporte a HTML embutido do VSCode, citado como referência na issue. Testes: a suíte de LMHT foi reescrita (10 casos) cobrindo os três contextos — estruturas com snippet de abertura/fechamento e de tag vazia, atributos dentro da tag (e a ausência de estruturas ali), e supressão dentro de comentário com retomada após o fechamento. Os mocks de vscode foram completados (SnippetString, MarkdownString, Position, Range) e o mock de atributos adicionado. Fixes DesignLiquido#103
leonelsanchesdasilva
merged commit Jul 26, 2026
059e613
into
DesignLiquido:principal
4 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Completude de LMHT sensível a contexto e com inserção de marcação
Fixes #103
Problema
O provedor de completude de LMHT devolvia sempre a mesma lista de 122 tags, em qualquer posição do cursor — fora de tag, dentro de tag, em texto ou em comentário, o resultado era idêntico. E nenhum item definia
insertText: escolhertitulo1inseria o texto pelado, não<titulo1></titulo1>. Também não havia completude de atributos.Solução
Reescrita seguindo a técnica de contexto que o provedor de FolEs desta mesma extensão já usa (o achado da issue). O provedor determina o contexto do cursor analisando o texto até a posição e decide o que sugerir:
Comentário (
<!--sem-->correspondente antes do cursor) → não sugere nada.Abertura de tag (após
<nomecom espaço, sem>de fechamento) → sugere atributos, não estruturas. Reutiliza o dicionário que já existia emfontes/linguagens/lmht/atributos.ts, inserindoatributo="$0"com o cursor entre as aspas.Posição de estrutura (início de arquivo, após
>ou<) → sugere as tags como snippet:<tag>$0</tag>com o cursor no meio;area,campo,coluna,imagem,linha-horizontal,quebra-linha,quebra-linha-oportuna,recurso— inserem<tag />sem fechamento.Antes e depois (medido)
titulo1(insertText)<titulo1>│</titulo1>imagem(void, insertText)<imagem │/>classe(insertText)classe="│"Decisão de escopo: texto livre dentro de estrutura
A issue lista "dentro de texto de parágrafo" como caso a suprimir. Optei por manter a sugestão de estruturas ali, porque LMHT permite aninhar tags no meio do texto —
<paragrafo>olá <negrito>mundo</negrito></paragrafo>é válido, e suprimir a completude quebraria esse aninhamento legítimo. É também o comportamento do suporte a HTML embutido do VSCode, citado como referência positiva na própria issue. Comentário e abertura-de-tag continuam tratados como pedido.Testes
A suíte de LMHT foi reescrita (10 casos) cobrindo os três contextos:
>; insere<titulo1>$0</titulo1>; insere<imagem $0/>para tag vazia; todos os itens têm label, documentação einsertText;classe="$0";-->.Os mocks de
vscodeforam completados (SnippetString,MarkdownString,Position,Range) e o mock deatributosadicionado.Checklist
insertTextcomSnippetString:titulo1→<titulo1>│</titulo1><tag />, sem fechamento incorretoatributos.tsjá existente; nenhuma dependência nova