Skip to content

docs: referência da API gerada a partir dos includes - #60

Merged
NullSablex merged 6 commits into
masterfrom
docs/pagina-de-natives
Sep 26, 2026
Merged

NullSablex merged 6 commits into
masterfrom
docs/pagina-de-natives

Conversation

@NullSablex

@NullSablex NullSablex commented Sep 26, 2026 •

Copy link
Copy Markdown
Owner

Os includes são o único lugar onde a assinatura de uma native e a sua documentação ficam lado a lado, e o build.rs já os mantém em passo com o Rust. A api-reference.md repetia essa informação em tabelas escritas à mão — nome, tipo e uma linha de descrição por native, mantidas em sincronia no braço.

A página passa a ser gerada deles. É o equivalente ao cargo doc, para a superfície Pawn.

O que a página passa a conter

Mesma URL, nada de link quebrado. Quatro partes, todas lidas do include:

  • Enumerações — MYSQL_OPT_*, códigos de erro, níveis de log e códigos do ORM, com os valores e o comentário de cada entrada. Os valores estavam digitados à mão; fazem parte do contrato, porque um script compara contra eles, e podiam divergir do include em silêncio.
  • Índice por seção.
  • Constantes documentadas — sem isso o MYSQL_SYNC não teria lugar na referência.
  • Natives e o forward, cada um com assinatura, o nome equivalente no include open.mp, descrição, parâmetros, retorno e exemplos.

O arquivo sai do versionamento e é reconstruído a cada build da documentação: sem cópia versionada, não existe cópia velha. O mkdocs.yml observa include/ e o gerador, então mkdocs serve recarrega quando a fonte muda.

Dois formatos de comentário

  • JavaDoc (@param, @return), que é o que estes includes usam.
  • pawndoc (<summary>, <param name="">, <returns>, <remarks>), que um projeto encontra em includes de terceiros.

Blocos que misturam os dois também funcionam. Como nada neste repositório usa pawndoc, nada aqui notaria esse suporte quebrando — por isso --selftest cobre seis fixtures: JavaDoc, pawndoc em bloco, pawndoc em ///, pawndoc multilinha, misto e vazio.

O que mudou nos includes

@example num bloco de documentação vira bloco de código na página, e as três natives que aceitam MYSQL_SYNC passam a trazer um:

mysql_query(sql, "SELECT COUNT(*) AS n FROM accounts", MYSQL_SYNC);
new total = cache_get_value_name_int(0, "n");

Isso corrige uma lacuna: quem lia a documentação da native não tinha como descobrir a forma bloqueante, porque o @param callback falava apenas do "". As duas natives de prepared statement, que recusam MYSQL_SYNC, passam a dizer isso explicitamente.

Para que um exemplo possa citar uma native, o build.rs agora reescreve nomes dentro de comentários ao gerar o include no estilo open.mp, do nome mais longo para o mais curto — caso contrário mysql_query_file viraria MySQL_Query_file. O mesmo exemplo lê mysql_query em um arquivo e MySQL_Query no outro.

O MYSQL_SAMP_VERSION ganhou bloco de documentação, trazendo para o include a explicação que só existia na página: o build.rs o carimba a partir do Cargo.toml, e compará-lo no arranque é como um gamemode percebe um include esquecido depois de atualizar.

Apresentação

Constantes e literais (MYSQL_SYNC, MYSQL_OPT_PORT, "") são renderizados como código, para não se confundirem com a prosa ao redor. Os títulos de seção perdem o qualificador entre parênteses usado no include — "Query (non-blocking)" vira "Query" —, já que cada entrada informa por si o que faz.

CI

O workflow de documentação executa --selftest e --check antes do build, então uma native sem bloco de documentação reprova o pull request.

Verificação

  • 81 entradas: 79 natives, 1 forward e 1 constante documentada, todas com bloco de documentação; mais os 5 enums com 28 valores
  • mkdocs build --strict sem avisos
  • 196 testes no alvo i686-unknown-linux-gnu, clippy e rustfmt limpos, verificação de codificação dos arquivos Pawn OK

A entrada do changelog foi para a seção 1.4.0, que ainda não foi lançada.

Os includes sao o unico lugar onde assinatura e documentacao de uma
native ficam lado a lado, e o build.rs ja os mantem em passo com o Rust.
Escrever a mesma coisa a mao em Markdown seria uma terceira copia para
esquecer, entao a pagina passa a ser gerada deles - o que o cargo doc faz
para o Rust, para a superficie Pawn.

`scripts/gen_natives_page.py` produz `docs/natives.md`, e um hook do
MkDocs o roda a cada build. O arquivo nao vai para o repositorio: sem
copia versionada nao ha copia velha. O `mkdocs.yml` passa a observar
`include/` e o gerador para que `mkdocs serve` recarregue quando a fonte
muda.

Dois formatos de comentario sao entendidos: JavaDoc, que e o que os
includes daqui usam, e pawndoc (`<summary>`, `<param name="">`,
`<returns>`), que um projeto encontra em includes de terceiros. Seis
fixtures cobrem os dois, mais o caso misto e o vazio, porque nada no
repositorio notaria o suporte a pawndoc quebrando.

`@example` num bloco vira bloco de codigo na pagina, e as tres natives
que aceitam MYSQL_SYNC passam a trazer um. Antes, quem lesse a
documentacao da native nao tinha como descobrir a forma bloqueante: o
`@param callback` falava so do `""`. Duas natives de statement, que
recusam o MYSQL_SYNC, passam a dizer isso explicitamente.

Para o exemplo poder citar uma native, o build.rs agora reescreve nomes
dentro de comentarios ao gerar o include no estilo open.mp - do nome mais
longo para o mais curto, senao `mysql_query_file` viraria
`MySQL_Query_file`. O mesmo exemplo le `mysql_query` num arquivo e
`MySQL_Query` no outro.

Na renderizacao, constantes e literais viram code span, para nao se
confundirem com a prosa ao redor, e os titulos de secao perdem o
qualificador entre parenteses que o include usa: "Query (non-blocking)"
vira "Query", ja que cada entrada diz por si o que faz.

O workflow de docs roda `--selftest` e `--check` antes do build, entao
native sem bloco de documentacao reprova.
A `api-reference.md` era um conjunto de tabelas escritas a mao com nome,
tipo e uma linha de descricao de cada native - a mesma informacao que o
include ja carrega ao lado de cada declaracao, mantida em passo no
braco. Era a copia que ainda faltava eliminar.

Agora o gerador produz a pagina inteira na mesma URL: natives, o forward,
as constantes documentadas e os enums com seus valores. O arquivo sai do
versionamento e e reconstruido a cada build da doc.

Os valores dos enums vinham digitados na pagina. Eles fazem parte do
contrato - um script compara contra eles - e estavam sujeitos a sair de
sincronia com o include em silencio; passam a ser lidos de la, junto com
o comentario de cada entrada.

A prosa que so existia na pagina foi para o include, que agora e a fonte
unica: o `MYSQL_SAMP_VERSION` ganhou bloco de documentacao explicando que
o build.rs o carimba a partir do Cargo.toml, e que compara-lo no arranque
e como um gamemode percebe include esquecido depois de uma atualizacao.

A pagina mantem a URL, entao nenhum link existente quebra, e a antiga
`natives.md` deixa de existir - uma referencia so.
O nome do estilo open.mp aparecia como comentario dentro do bloco Pawn,
o que o faz parecer uma linha a ser digitada. Ele nao e codigo: e o
outro nome da mesma native. Passa a ser uma linha propria abaixo da
assinatura.
@NullSablex NullSablex changed the title docs: página de natives gerada a partir dos includes docs: referência da API gerada a partir dos includes Sep 26, 2026
Faltavam duas, pequenas mas visiveis para quem usa: as duas natives de
prepared statement agora dizem que nao aceitam MYSQL_SYNC em vez de
calar, e o MYSQL_SAMP_VERSION ganhou bloco de documentacao. As duas
aparecem tanto na pagina quanto no hover do editor.
O site herdava a nuvem do Material no cabecalho e na aba do navegador.
Um plugin de MySQL merece o icone que diz isso: o logo passa a ser
`material/database` e o favicon o mesmo desenho, copiado do tema para
`docs/assets/favicon.svg` - SVG, entao escala em qualquer densidade de
tela e nao precisa de varios tamanhos.
Duas lacunas encontradas conferindo a secao commit a commit:

- o icone de banco no site, desta rodada;
- a rodada de bumps de actions e do pip, que a 1.3.0 registrava numa
  linha propria e aqui estava so implicita no "large round of transitive
  updates".

Com isso a secao cobre as 25 alteracoes desde a v1.3.0.
@NullSablex
NullSablex merged commit af6e767 into master Sep 26, 2026
11 checks passed
@NullSablex
NullSablex deleted the docs/pagina-de-natives branch September 26, 2026 19:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant