docs: referência da API gerada a partir dos includes - #60
Merged
Merged
Conversation
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.
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.
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.
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.rsjá os mantém em passo com o Rust. Aapi-reference.mdrepetia 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:
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.MYSQL_SYNCnão teria lugar na referência.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.ymlobservainclude/e o gerador, entãomkdocs serverecarrega quando a fonte muda.Dois formatos de comentário
@param,@return), que é o que estes includes usam.<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
--selftestcobre seis fixtures: JavaDoc, pawndoc em bloco, pawndoc em///, pawndoc multilinha, misto e vazio.O que mudou nos includes
@examplenum bloco de documentação vira bloco de código na página, e as três natives que aceitamMYSQL_SYNCpassam a trazer um:Isso corrige uma lacuna: quem lia a documentação da native não tinha como descobrir a forma bloqueante, porque o
@param callbackfalava apenas do"". As duas natives de prepared statement, que recusamMYSQL_SYNC, passam a dizer isso explicitamente.Para que um exemplo possa citar uma native, o
build.rsagora reescreve nomes dentro de comentários ao gerar o include no estilo open.mp, do nome mais longo para o mais curto — caso contráriomysql_query_filevirariaMySQL_Query_file. O mesmo exemplo lêmysql_queryem um arquivo eMySQL_Queryno outro.O
MYSQL_SAMP_VERSIONganhou bloco de documentação, trazendo para o include a explicação que só existia na página: obuild.rso carimba a partir doCargo.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
--selfteste--checkantes do build, então uma native sem bloco de documentação reprova o pull request.Verificação
mkdocs build --strictsem avisosi686-unknown-linux-gnu, clippy e rustfmt limpos, verificação de codificação dos arquivos Pawn OKA entrada do changelog foi para a seção 1.4.0, que ainda não foi lançada.