Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
9882984
ci: migrate CodeQL to advanced setup and add CODEOWNERS (#16)
NullSablex Aug 30, 2026
c299a3b
chore: re-pin rust-samp SDK to 51ba519 (v3.4.0)
NullSablex Aug 31, 2026
fb86df3
feat(debugger): call stack multi-frame
NullSablex Aug 31, 2026
3fb6d2e
feat(debugger): data breakpoints (pausar quando variável muda)
NullSablex Aug 31, 2026
5b641ff
chore: re-pin rust-samp SDK to 6c8b528 (Amx::hlw accessor)
NullSablex Aug 31, 2026
f8c4601
feat(debugger): detect STACKERR, HEAPLOW e MEMACCESS
NullSablex Aug 31, 2026
a8daf5d
Merge branch 'master' into feat/recursos-faltantes
NullSablex Aug 31, 2026
b152a5a
chore: re-pin rust-samp SDK to stable master (336f8de, #54 merged)
NullSablex Aug 31, 2026
4d2b2f3
docs: marcar call stack, data breakpoints e erros de runtime como con…
NullSablex Aug 31, 2026
66a0544
feat(debugger): inspeção rica de arrays e strings
NullSablex Aug 31, 2026
817de72
feat(dap-adapter): watch/hover com expressões
NullSablex Aug 31, 2026
771e078
feat(debugger): filtro de exceção (ligar/desligar erros de runtime)
NullSablex Aug 31, 2026
49c9095
chore: re-pin rust-samp SDK to 3d15a19 (AmxDbg::function_address)
NullSablex Aug 31, 2026
8dc9499
feat(dap-adapter): breakpoints de função
NullSablex Aug 31, 2026
8ca8c63
chore: re-pin rust-samp to 900ebd0 (rustfmt do #55)
NullSablex Aug 31, 2026
acc9181
feat(dap-adapter): localizar mensagens do adaptador (5 idiomas)
NullSablex Aug 31, 2026
f088143
feat(dap-adapter): autocomplete no watch/console (completions)
NullSablex Aug 31, 2026
8153b56
refactor(i18n): centralizar traduções em protocol/messages (5 idiomas)
NullSablex Aug 31, 2026
a5e9756
docs(i18n): roadmap de 50 idiomas + entrada no nav
NullSablex Aug 31, 2026
ed5a737
feat(debugger): data breakpoint em elemento de array
NullSablex Aug 31, 2026
cb79f8a
feat(dap-adapter): setExpression (editar lvalue no watch/console)
NullSablex Aug 31, 2026
10a4941
feat(debugger): readMemory (ver memória de dados crua)
NullSablex Aug 31, 2026
7cadf61
refactor: enxugar comentários redundantes nas capabilities
NullSablex Aug 31, 2026
aba544d
docs: atualizar README e documentação para os recursos atuais
NullSablex Aug 31, 2026
5d8831b
refactor: traduzir e enxugar os comentários do plugin
NullSablex Aug 31, 2026
01a8fdf
docs: completar os opcodes de STACKERR e MEMACCESS
NullSablex Aug 31, 2026
69871d9
docs: badges de downloads, stars e OpenSSF Scorecard no README
NullSablex Aug 31, 2026
720bc0c
docs(i18n): site em pt-BR e en-US com mkdocs-static-i18n
NullSablex Aug 31, 2026
34d7ec7
docs: registrar docs, i18n do site e Scorecard no changelog
NullSablex Aug 31, 2026
19f1430
chore(release): 0.2.0
NullSablex Aug 31, 2026
2f38f57
docs: mover a data do release 0.2.0 para 01/09/2026
NullSablex Sep 1, 2026
f041dde
refactor: usar as primitivas de VM do SDK (rust-samp-sdk 3.4.0)
NullSablex Sep 1, 2026
5e4cc9f
chore(deps): consumir rust-samp 3.4.0 do crates.io
NullSablex Sep 1, 2026
a664a9d
docs(changelog): completar a 0.2.0 com tudo desde a v0.1.0
NullSablex Sep 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions .github/workflows/scorecard.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# OpenSSF Scorecard.
#
# Scores the repository's supply-chain practices (branch protection, pinned
# actions, token permissions, dependency update tooling, …) and uploads the
# result twice: as SARIF to code scanning, and — via `publish_results` — to the
# public OpenSSF API, which is what backs the Scorecard badge in the README.
#
# `publish_results` only works on a push to the default branch of a public
# repository; on a pull request the workflow still runs and reports to code
# scanning, without publishing.
name: Scorecard

on:
push:
branches: [ "master" ]
# Weekly, so the score keeps up with the checks Scorecard adds over time.
schedule:
- cron: '31 4 * * 1'
workflow_dispatch:

permissions: read-all

jobs:
analysis:
name: Scorecard analysis
runs-on: ubuntu-latest
permissions:
security-events: write # upload the SARIF results
id-token: write # OIDC token, required to publish the results
contents: read
actions: read

steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Run analysis
uses: ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc # v2.4.4
with:
results_file: results.sarif
results_format: sarif
publish_results: true

# Kept for 5 days so a failed upload can still be inspected.
- name: Upload artifact
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: SARIF file
path: results.sarif
retention-days: 5

- name: Upload to code scanning
uses: github/codeql-action/upload-sarif@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8
with:
sarif_file: results.sarif
40 changes: 40 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,46 @@ Podem existir falhas ou itens não declarados, causados por falha humana ou por

---

## [0.2.0] - 01/09/2026

Segundo pré-lançamento. Amplia o conjunto DAP suportado: a depuração deixa de ser
"breakpoint e inspeção" e passa a cobrir call stack, data breakpoints, edição por
expressão, leitura de memória e mais três classes de erro de runtime.

### Adicionado
- **Call stack multi-frame** — caminha a cadeia de frames do AMX (FRM → endereço de retorno) e entrega nome da função, linha e variáveis de cada frame. O editor navega entre os frames e a inspeção segue o frame selecionado.
- **Data breakpoints** — pausar quando um valor muda, em globais, locais e **elementos de array** (`arr[3]`). Watches de locais expiram quando o frame dono retorna, para não dispararem com o conteúdo de outro frame no mesmo slot.
- **Breakpoints de função** — parar ao entrar numa função pelo nome; um nome que não resolve volta ao editor como não verificado, sem quebrar a sessão.
- **Três novos erros de runtime** — `STACKERR` (colisão pilha/heap), `HEAPLOW` (underflow de heap) e `MEMACCESS` (acesso inválido à memória), somando-se à divisão por zero e ao índice fora do limite. A simulação é fiel ao `amx.c` e conservadora: o rastreio dos registradores perde a confiança ao primeiro opcode não modelado, então não há falso-positivo.
- **Filtro de exceção** — o editor liga e desliga a pausa em erros de runtime pelo painel de breakpoints.
- **Inspeção de arrays e strings** — arrays são expansíveis (cada elemento vira um filho) e arrays de char são mostrados como **string** quando o conteúdo é texto terminado em zero.
- **Edição por expressão** (`setExpression`) — `x = 1` ou `arr[i] = 10` direto no watch ou no console, com o índice podendo ser uma subexpressão. O array inteiro não é editável, só os elementos.
- **Leitura de memória** (`readMemory`) — hex view da memória de dados crua a partir de qualquer variável, que agora expõe um `memoryReference`.
- **Expressões no watch e no hover** — um operador de topo com `+ - * / %` (seguindo o truncamento do Pawn) e `== != < > <= >=`, sobre literais, variáveis e `arr[i]`.
- **Autocomplete** — sugestão de variáveis em escopo no watch e no console.
- **Documentação em inglês** — o site passa a ter **pt-BR** na raiz e **en-US** em `/en-US/`, com todas as páginas traduzidas e o menu localizado.

### Alterado
- **Mensagens do adaptador agora são localizadas** — antes só os erros de runtime seguiam o idioma do editor. As mensagens dos dois lados foram unificadas em `crates/protocol/src/messages`, com 11 chaves em pt-BR, en, es, ro e ru; a tabela de cada idioma é exaustiva, então um idioma incompleto não compila.
- **O protocolo ganhou um canal request/response** — `ReadMemory` ↔ `MemoryData`, correlacionados por `id` e com timeout, para a sessão não ficar presa se o plugin não responder. O restante do protocolo continua assíncrono nos dois sentidos.
- **README e documentação reescritos** — recursos, arquitetura e a página de localização atualizados para o que esta versão entrega. O README ganhou a fileira de badges (CI, CodeQL, docs, OpenSSF Scorecard, release, downloads, estrelas e licença) e uma linha de navegação para a documentação, os releases e a extensão.
- **Marcador do plugin atualizado para `PAWNPRO_DEBUG_MARKER:0.2.0`** — a extensão casa apenas o prefixo `PAWNPRO_DEBUG_MARKER`, então o reconhecimento do plugin oficial não muda; o tamanho segue 26 bytes.

### Corrigido
- Tabela de erros em [Como funciona a pausa no erro](docs/runtime-errors.md): faltavam `OP_CALL_PRI` no STACKERR e `OP_LODB_I`/`OP_STRB_I`/`OP_LIDX_B` no MEMACCESS, todos já checados pelo plugin.

### Dependências
- **SDK `rust-samp` agora vem do crates.io** (`3.4.0`), no lugar da dependência `git` + `rev` que o projeto carregava desde o início — ela existia porque o debugger precisava de API ainda não publicada. O build deixa de depender do GitHub para resolver dependências.
- Ao longo do ciclo o SDK acompanhou o que cada versão liberou: `v3.3.1` (correção), `v3.4.0`, o acessor `Amx::hlw` (exigido pelo HEAPLOW) e `AmxDbg::function_address` (exigido pelos breakpoints de função).
- Atualizações do **Dependabot** nos três ecossistemas, agrupadas por ecossistema a partir de #13: `cargo` (`serde` 1.0.228 → 1.0.229 e o grupo cargo com 2 atualizações), `github-actions` (`checkout`, `upload-artifact`, `download-artifact`, `setup-python`, `rust-cache`, `action-gh-release`) e `pip` (`mkdocs-material`, `pymdown-extensions`). Nenhuma altera comportamento do debugger.
- **Lógica genérica de VM devolvida ao SDK** (`rust-samp-sdk` 3.4.0) — a numeração dos opcodes, o tamanho das instruções, o decodificador da relocação por computed-goto (`OpcodeMap`), a caminhada da cadeia de frames e a leitura de faixas de memória eram fatos da VM AMX que viviam aqui. Agora vêm de `samp::debug::opcode`, `samp::debug::stack` e `Amx::read_bytes`/`call_stack`/`data_only`, e o plugin ficou ~250 linhas menor sem perder comportamento.
- Atualizações de `serde` (1.0.229), `serde_json` (1.0.151), das GitHub Actions e das dependências da documentação.

### Infraestrutura
- **CodeQL** migrado para advanced setup, garantindo as duas análises (`actions`, `rust`) em todo pull request, com `CODEOWNERS`.
- **OpenSSF Scorecard** — análise semanal e em push no `master`, publicando o resultado na API pública do OpenSSF e o SARIF no code scanning.
- **Dependabot** para `github-actions`, `cargo` e `pip`, agrupado em um PR por ecossistema.

## [0.1.0] - 04/07/2026

Primeiro pré-lançamento (pre-release).
Expand Down
Loading