Pular para conteúdo

AUR-463: Documentacao de JavaScript sem ferramenta externa

Documento histórico do board. Pode descrever componentes removidos; para uso atual, consulte o guia do produto.

Achado

aurumcode docs sobre um projeto .mjs sem typedoc no PATH retornava javascript: required tool not in PATH (typedoc not found: ...) e zero documentos. internal/documentation/extractors/javascript/extractor.go (JSExtractor) so sabe extrair via subprocesso typedoc; nao existia native.go nesse pacote.

O que este card entrega

internal/documentation/extractors/javascript/native.go adiciona NativeExtractor: um leitor de texto, sem subprocesso e sem rede, que reconhece export function, export class (com seus metodos), export const atribuido a funcao (arrow ou function), e export default, e anexa o bloco JSDoc /** ... */ imediatamente acima de cada um. Um simbolo exportado sem JSDoc aparece com assinatura e sem prosa -- este parser nunca sintetiza texto. extractor.go (o caminho typedoc) fica intocado.

Ligacao ponta a ponta (paths expandido)

cmd/regenerate-docs, cmd/aurumcode, internal/documentation/extractors/tool_unavailable_test.go e tool_failure_test.go entraram em paths. internal/pipeline continua read_paths (somente leitura) e pula Extract incondicionalmente sempre que Validate retorna erro -- sem excecao, sem fallback proprio. Como JSExtractor.Validate() precisa continuar reportando typedoc ausente como ToolUnavailableError (contrato pinado pelos dois testes acima, ainda correto: JSExtractor continua sendo um wrapper fino do subprocesso typedoc), a escolha entre "a ferramenta" e "o leitor nativo" nao pode viver dentro de Validate. Ela vive na raiz de composicao, uma unica vez, em javascript.SelectExtractor(ctx, runner) (internal/documentation/extractors/javascript/select.go): sonda typedoc --version e devolve JSExtractor quando a ferramenta responde, NativeExtractor quando a sondagem falha por ausencia genuina (exec.ErrNotFound, classificado via extractors.MissingTool), e ainda JSExtractor quando a ferramenta esta instalada mas quebrada (para o erro de instalacao continuar aparecendo, em vez de um fallback silencioso para nativo mascarar o toolchain quebrado).

cmd/regenerate-docs/main.go e cmd/aurumcode/docs.go chamam javascript.SelectExtractor(context.Background(), runner) no lugar do antigo javascript.NewJSExtractor(runner) incondicional, exatamente no ponto em que AUR-427 registrou rust.NewNativeExtractor() / csharp.NewNativeExtractor(). NativeExtractor.Extract foi ampliado para aceitar tambem LanguageTypeScript (mesma tolerancia que JSExtractor ja tinha), porque os dois binarios registram o mesmo extrator escolhido tambem como o extrator de TypeScript via um alias que reescreve req.Language.

Os dois testes agora possuidos nao tiveram nenhuma asercao alterada ou removida -- a linha "javascript/typedoc" de cada tabela continua afirmando exatamente o que afirmava, porque continua verdadeira. Cada arquivo ganhou testes aditivos (TestJSSelectExtractor_*) que fixam o novo contrato de composicao: ausencia real de typedoc -> NativeExtractor; presenca e funcionamento -> JSExtractor; presenca mas falha -> ainda JSExtractor (nunca um fallback silencioso).

Medido diretamente: aurumcode docs -source . -output out sobre um diretorio com .mjs e sem typedoc no PATH agora sai 0 e gera out/javascript/index.md com assinatura e JSDoc reais; com um typedoc real (ou um stub) no PATH, a mesma chamada invoca a ferramenta e devolve a saida dela, inalterada.

AC-003: o typedoc ainda vence

extractor.go nao foi tocado por este card. Byte a byte, quem tem typedoc instalado continua recebendo exatamente a saida de hoje, porque o codigo que a produz e o mesmo codigo, inalterado.