Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

HP Prime PPL — extensão para VS Code

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.

Recursos

  • 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.

Regras do linter

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.

Desenvolvimento

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.

Regenerar o catálogo

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.

Arquitetura

  • src/tokenizer.ts — lexer tolerante (ignora // e strings); módulo puro.
  • src/catalog.ts — carrega data/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.

Verificação contra o 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).

Limitações (v1)

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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages