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.