
# CLI

shikiphp fournit un petit outil en ligne de commande dans `bin/shikiphp` (installé sous `vendor/bin/shikiphp` dans votre projet). Il propose trois commandes : `highlight` met un fichier en évidence dans HTML, tandis que `langs` et `themes` répertorient le contenu du bundle.

## `highlight`

Mettre un fichier en évidence dans HTML et afficher le résultat sur stdout.

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

- `<file>` — le chemin du fichier à lire. Il doit s’agir d’un fichier existant ; l’entrée standard n’est pas lue.
- `--lang` — l’identifiant ou l’alias du langage. S’il est omis, l’extension du fichier est utilisée telle quelle comme identifiant (ou `txt` si le fichier n’a pas d’extension).
- `--theme` — l’identifiant du thème. La valeur par défaut est `github-dark`.

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

La sortie est le même bloc `<pre class="shiki …">` à thème unique que renvoie [`codeToHtml`](https://shikiphp.inline0.dev/fr/docs/api#shikiphpcodetohtml), suivi d’un saut de ligne, ce qui permet de la rediriger directement dans un fichier :

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

La commande n’accepte aucune autre option. Pour utiliser deux thèmes, des transformateurs ou toute autre [option](https://shikiphp.inline0.dev/fr/docs/options), appelez plutôt le API PHP.

### Options et arguments

Les options doivent utiliser la forme `--name=value`. Tout autre argument commençant par `--` est ignoré et le dernier argument ne commençant pas par `--` est traité comme le fichier. Ainsi, `--lang php file.rs` met `file.rs` en évidence comme Rust : `--lang` est ignoré, `php` est remplacé par `file.rs` et le langage est déduit de l’extension `.rs`.

### Détection du langage

Sans `--lang`, l’extension devient l’identifiant du langage, sans modification. Cela fonctionne lorsque l’extension correspond à un identifiant ou alias fourni dans le bundle : `php`, `js`, `ts`, `tsx`, `py`, `rs`, `go`, `md`, `yml`, `json`, `sh` et bien d’autres (voir [Langages](https://shikiphp.inline0.dev/fr/docs/languages)). Cela ne fonctionne pas pour :

- les fichiers sans extension, comme `Makefile` ou `Dockerfile`, qui utilisent `txt` par défaut ;
- les extensions qui ne correspondent pas à un identifiant de langage, comme `.txt`.

`txt` n’est pas un langage fourni dans le bundle : dans les deux cas, l’exécution s’arrête actuellement avec une erreur `Unknown language "txt"` ([#3](https://github.com/inline0/shikiphp/issues/3)).
Pour ces fichiers, passez `--lang` :

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

## `langs`

Afficher un identifiant par ligne pour chaque langage accepté par le bundle.

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

La liste comporte 350 lignes : les 253 identifiants de grammaire fournis dans le bundle, dans l’ordre du bundle (et non par ordre alphabétique), suivis de leurs 97 alias (`js`, `cjs`, `mjs`, etc.). Les identifiants de grammaire incluent 18 grammaires auxiliaires intégrées par d’autres grammaires, comme `vue-directives` et `es-tag-css` ; consultez [Langages](https://shikiphp.inline0.dev/fr/docs/languages) pour le catalogue des noms et alias. Utilisez `sort` pour obtenir une liste alphabétique.

## `themes`

Afficher un identifiant par ligne pour chaque thème fourni dans le bundle, par ordre alphabétique (65 thèmes).

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

Consultez [Thèmes](https://shikiphp.inline0.dev/fr/docs/themes) pour le catalogue avec les noms et les types clair/sombre.

## Aide et code de sortie

Lancez la commande sans argument, ou avec `-h` / `--help` / `help`, pour afficher l’aide.

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

| Situation | Sortie | Code de sortie |
| --- | --- | --- |
| Réussite ou aide | stdout | `0` |
| Commande inconnue | `Unknown command: <name>` sur stderr | `1` |
| `highlight` sans fichier ou fichier inexistant | ligne d’utilisation sur stderr | `1` |
| Langage ou thème inconnu | `Shikiphp\Exceptions\Highlight` non interceptée (erreur fatale PHP avec trace de pile) | `255` |
