
# CLI

shikiphp inclui uma pequena ferramenta de linha de comando em `bin/shikiphp` (instalada como `vendor/bin/shikiphp` no seu projeto). Ela tem três comandos: `highlight` renderiza um arquivo em HTML, e `langs` e `themes` listam o conteúdo do pacote.

## `highlight`

Destaca um arquivo em HTML e imprime o resultado em stdout.

```bash
vendor/bin/shikiphp highlight <file> [--lang=<lang>] [--theme=<theme>]
```

- `<file>` — o caminho do arquivo a ler. Ele deve existir; a entrada padrão não é lida.
- `--lang` — o ID ou alias do idioma. Se omitido, a extensão do arquivo é usada como está para o ID (ou `txt` se não houver extensão).
- `--theme` — o ID do tema. O padrão é `github-dark`.

```bash
vendor/bin/shikiphp highlight src/App.php --lang=php --theme=nord
```

A saída é o mesmo bloco `<pre class="shiki …">` de tema único retornado por [`codeToHtml`](https://shikiphp.inline0.dev/pt/docs/api#shikiphpcodetohtml), seguido de uma quebra de linha, para que possa ser redirecionado diretamente para um arquivo:

```bash
vendor/bin/shikiphp highlight src/App.php --theme=github-light > app.html
```

O comando não aceita outras opções. Para temas duplos, transformadores ou qualquer outra [opção](https://shikiphp.inline0.dev/pt/docs/options), chame a PHP API.

### Opções e argumentos

As opções devem usar o formato `--name=value`. Qualquer outro argumento que comece com `--` é ignorado, e o último argumento que não começa com `--` é considerado o arquivo. Portanto, `--lang php file.rs` destaca `file.rs` como Rust: `--lang` é ignorado, `php` é substituído por `file.rs`, e o idioma é inferido pela extensão `.rs`.

### Inferência de idioma

Sem `--lang`, a extensão se torna o próprio id de linguagem, sem alterações. Isso funciona
sempre que a extensão já é um id ou alias incluído no pacote — `php`, `js`, `ts`,
`tsx`, `py`, `rs`, `go`, `md`, `yml`, `json`, `sh` e muitos outros (consulte
[Idiomas](https://shikiphp.inline0.dev/pt/docs/languages)). Isso não funciona para:

- arquivos sem extensão, como `Makefile` ou `Dockerfile`, que recorrem
  a `txt`;
- extensões que não são um id de linguagem, como `.txt`.

`txt` não é uma linguagem incluída no pacote, então ambos os casos são interrompidos atualmente com um erro `Unknown language "txt"` ([#3](https://github.com/inline0/shikiphp/issues/3)).
Passe `--lang` para esses arquivos:

```bash
vendor/bin/shikiphp highlight Dockerfile --lang=docker
vendor/bin/shikiphp highlight Makefile --lang=make
```

## `langs`

Imprima cada id aceito pelo pacote como linguagem, um por linha.

```bash
vendor/bin/shikiphp langs
```

A lista tem 350 linhas: os 253 ids de gramática incluídos no pacote, na ordem do pacote (não
alfabética), seguidos de seus 97 aliases (`js`, `cjs`, `mjs` e assim por diante).
Os ids de gramática incluem 18 gramáticas auxiliares incorporadas por outras gramáticas, como
`vue-directives` e `es-tag-css`; consulte [Idiomas](https://shikiphp.inline0.dev/pt/docs/languages) para ver o
catálogo com nomes e aliases. Encadeie com `sort` para obter uma lista em ordem alfabética.

## `themes`

Imprima cada id de tema incluído no pacote, um por linha, em ordem alfabética (65 temas).

```bash
vendor/bin/shikiphp themes
```

Consulte [Temas](https://shikiphp.inline0.dev/pt/docs/themes) para ver o catálogo com nomes e tipos claro/escuro.

## Ajuda e código de saída

Execute sem comando ou com `-h` / `--help` / `help` para imprimir as instruções de uso.

```bash
vendor/bin/shikiphp --help
```

| Situação | Saída | Código de saída |
| --- | --- | --- |
| Sucesso ou ajuda | stdout | `0` |
| Comando desconhecido | `Unknown command: <name>` em stderr | `1` |
| `highlight` sem arquivo ou se o arquivo não existir | linha de instruções de uso em stderr | `1` |
| Idioma ou tema desconhecido | `Shikiphp\Exceptions\Highlight` não capturado (erro fatal PHP com rastreamento de pilha) | `255` |
