Pular para o conteúdo

CLI

Phasis inclui três executáveis principais em bin/:

  • bin/phasis — executa arquivos JavaScript, avalia código-fonte passado pela linha de comando e exibe ASTs.
  • bin/test262 — executa a suíte oficial de conformidade ECMAScript em Phasis.
  • bin/wpt — executa os testes do Web Platform Tests em Phasis (URL, codificação, fetch, cabeçalhos, Blob, AbortSignal, streams, …).

Depois de composer require phasis/phasis, bin/phasis e bin/test262 são vinculados a partir de vendor/bin/. Só bin/phasis funciona nesse diretório: bin/test262 precisa do submódulo test262 git e das classes de teste, que não estão incluídos no pacote Composer, e bin/wpt não é distribuído. Execute ambos a partir de um clone do repositório Phasis.

bin/phasis

Código
phasis <file.js> | phasis -e '<source>' | phasis --ast <file.js>

Essas três formas compõem toda a interface. Não há REPL, entrada via stdin nem flag de módulo.

Executar um arquivo

Shell
./vendor/bin/phasis script.js

Executa script.js como um script clássico. Quando termina, tudo o que o script escreveu com console.log (e console.error, console.warn, …) é impresso de uma só vez em stdout. Se o script lançar uma exceção, a mensagem de erro vai para stderr e o status de saída é 1.

O arquivo é sempre analisado como um script clássico, portanto um arquivo com import / export ou await no nível superior falha com um SyntaxError. Para executar um módulo ES, use Engine::evalAsModule() de PHP (consulte a referência APIreferência) ou agrupe o código primeiro.

Avaliar código-fonte

Shell
./vendor/bin/phasis -e 'console.log(Math.PI * 2)'
# 6.283185307179586

O argumento é avaliado como um script completo. Apenas a saída console é impressa; o valor da última expressão não é, então phasis -e '1 + 2' não imprime nada.

Exibir a AST

Shell
./vendor/bin/phasis --ast script.js
./vendor/bin/phasis -e 'a + b' --ast

Imprime a árvore sintática como JSON (com recuo de dois espaços). Útil para depurar problemas do analisador ou criar ferramentas com base em Phasis. Para acesso programático, use o analisador API.

bin/test262

bin/test262 executa a suíte oficial test262 em Phasis. Ela é útil como conjunto de testes de regressão ao contribuir com alterações. O instantâneo da suíte completa em COMPAT.md é gerado pelo bin/compat-report relacionado, que a matriz de CI iniciada manualmente executa em partes.

Executar uma categoria

Shell
./bin/test262 --category built-ins/Array

Executar a suíte completa

Shell
./bin/test262 --jobs 4

Configuração

O executor lê config/support.php da raiz do projeto. A lista test262_skipped_features está vazia: nenhum recurso test262 é ignorado, incluindo tail-call-optimization. O arquivo também lista as categorias e os testes que devem ser executados isoladamente.

A própria suíte é o submódulo test262 git; execute git submodule update --init test262 depois de clonar. Sem ele, o executor termina com "suíte test262 não encontrada".

Outras flags úteis

Flag Finalidade
--failures imprime uma linha para cada teste com falha
--limit N para após os primeiros N testes
--jobs N executa N testes em paralelo
--files-from file executa apenas os testes listados em file
--json emite um resumo legível por máquina em stdout
--no-progress oculta a linha de progresso

Consulte a seção de compatibilidade para ver o instantâneo mais recente.

bin/wpt

bin/wpt executa os testes do Web Platform Tests importados para tests/Wpt/fixtures/. O conjunto de testes cobre URL, codificação, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, toda a superfície de crypto/SubtleCrypto, fetch/Request/Response, XMLHttpRequest/XMLHttpRequestUpload e WebSocket. Consulte APIs da Web para ver a tabela de taxas de aprovação por área.

Executar todos os testes importados

Shell
./bin/wpt

Executar uma categoria

Shell
./bin/wpt --category headers
./bin/wpt --category streams
./bin/wpt --category blob

Saída por subteste

Shell
./bin/wpt --category abort --verbose

Imprime cada subteste (PASS / FAIL) dentro de cada teste, com mensagens de asserção quando há falha.

Saída JSON

Shell
./bin/wpt --json

Resumo de aprovação/falha legível por máquina para pipelines de CI ou análise por script.

Observações

  • Os testes que usam Fetch iniciam automaticamente o servidor de testes WPT incluído em tests/Wpt/fetch-server.php na porta 127.0.0.1:8765 e o encerram depois.
  • O shim do harness em tests/Wpt/testharness-shim.js implementa apenas a superfície API do WPT usada pelos testes importados (~400 linhas, em comparação com as ~3 mil linhas completas de testharness.js).
  • Os testes de origem ficam em tests/Wpt/upstream/ (um checkout esparso de web-platform-tests/wpt, ignorado pelo git). Para importar mais, copie os arquivos .any.js de upstream/<area>/ para fixtures/<category>/ e o executor os encontrará automaticamente.

Códigos de saída

bin/phasis termina com um de dois códigos:

Código Significado
0 sucesso — o script foi executado até o fim (também após --ast)
1 qualquer outro caso: uma exceção JS não capturada, erro de sintaxe, arquivo ausente ou argumentos inválidos

Os erros do script imprimem sua mensagem em stderr. Argumentos inválidos e arquivos ausentes imprimem a linha de uso em stderr.

Limites de recursos

bin/phasis é executado com os padrões do mecanismo e não tem flags para limites: um limite de pilha de chamadas de 4,096 frames em JS, uma proteção de 8,192 frames para closures transpiladas e o maxLoopIterations padrão de 100,000, que se aplica apenas ao código executado pelo interpretador que percorre a árvore (consulte API: setLimit). Não há limite de tempo; envolva o comando em timeout se um script puder não terminar.