Realce de sintaxe, linter (diagnósticos de erro), autocompletar e hover para a
linguagem PPL da HP Prime, em arquivos .hpprgm (e .ppl). Os dados de
linguagem vêm do material do livro Programação em HP Prime PPL — em especial o
catálogo completo de comandos (Basico/hplang/userDefineLang.xml) e o catálogo de
erros (Apêndice C).
A análise é estática: o linter examina o texto sem depender da calculadora. A Calculadora Virtual HP Prime serve apenas como oráculo de teste (softkey Verif.) para conferir os casos — ela não é necessária para usar a extensão.
- Realce de sintaxe — palavras-chave, ~700 comandos/funções, variáveis globais
integradas, operadores, strings, comentários e a diretiva
#pragma. - Linter — sublinha os erros mais comuns em tempo real (ver tabela abaixo).
- Autocompletar — todos os comandos do catálogo, palavras-chave e globais, com assinatura e descrição curta.
- Hover — assinatura + descrição (em português) dos comandos conhecidos.
- Snippets —
export,pragma,if,ifelse,for,while,repeat,case,iferr,input.
| Código | Severidade | O que detecta | Apêndice C |
|---|---|---|---|
ppl.block.unclosed / extra-end / repeat-end / until |
Erro | Bloco BEGIN/IF/FOR/WHILE/CASE/IFERR sem END, REPEAT sem UNTIL, ou fechamento sobrando |
C.1.1 |
ppl.bracket.unclosed / extra / mismatch |
Erro | () [] {} desbalanceados |
C.1.3 |
ppl.ident.invalid / ppl.ident.space |
Erro | Nome começando por dígito (2X) ou contendo espaço |
C.1.4 |
ppl.cond.assign |
Aviso | := ou = isolado dentro de uma condição (use ==) |
C.3.1 |
ppl.cmd.unknown |
Aviso | Identificador chamado como função fora do catálogo (possível typo) | — |
ppl.global.overwrite |
Aviso | Atribuição a global integrada (A, L0, M0, Z0…) sem LOCAL |
— |
ppl.concat.string |
Informação | "texto" + número sem STRING(...) |
C.2.1 |
ppl.pragma.missing |
Informação | Arquivo com EXPORT sem #pragma mode(...) |
— |
Os três avisos/infos configuráveis podem ser desligados em Configurações:
ppl.lint.unknownCommands, ppl.lint.overwriteGlobals, ppl.lint.requirePragma.
npm install
npm run gen-catalog # gera data/commands.json e syntaxes/ppl.tmLanguage.json a partir do UDL
npm run compile # TypeScript -> out/
npm run test:lint # roda a suíte de regressão sobre test-fixtures/No VS Code, pressione F5 para abrir o Extension Development Host já com a pasta
test-fixtures/ carregada.
scripts/gen-catalog.js lê ../Basico/hplang/userDefineLang.xml e produz
data/commands.json (vocabulário) e syntaxes/ppl.tmLanguage.json (realce). As
descrições curtas ficam em scripts/descriptions.js (derivadas dos Apêndices A e B).
Rode npm run gen-catalog depois de alterar qualquer um desses.
src/tokenizer.ts— lexer tolerante (ignora//e strings); módulo puro.src/catalog.ts— carregadata/commands.json; conjuntos de keywords/globais.src/linter.ts— as 8 regras; módulo puro, retorna diagnósticos simples.src/extension.ts— liga o linter aos eventos do VS Code; registra providers.src/completion.ts,src/hover.ts— autocompletar e hover.src/test/run-regression.ts— runner de regressão em Node puro.
O linter (linter.ts/tokenizer.ts/catalog.ts) não importa vscode, então roda
em Node puro — é o que permite a suíte de regressão e testes contra o corpus do livro.
O linter foi rodado sobre os 204 programas completos extraídos dos blocos de código do livro: 0 erros estruturais (regras de balanço de blocos/delimitadores/ identificadores). Os avisos restantes são, em sua maioria, chamadas a funções definidas em outros blocos (esperado ao analisar trechos isolados).
Não faz validação real de compilação (só o firmware da calculadora sabe), nem inferência de tipos completa. A checagem de "ponto e vírgula ausente" (C.1.2) foi deixada de fora por gerar muitos falsos positivos. Tudo isso são melhorias futuras.