
# CLI

shikiphp menyertakan alat baris perintah kecil di `bin/shikiphp` (dipasang sebagai `vendor/bin/shikiphp` di proyek Anda). Alat ini memiliki tiga perintah: `highlight` merender satu file ke HTML, sedangkan `langs` dan `themes` menampilkan isi bundle.

## `highlight`

Sorot file ke HTML dan cetak ke stdout.

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

- `<file>` — jalur file yang akan dibaca. File harus sudah ada; input standar tidak dibaca.
- `--lang` — ID atau alias bahasa. Jika tidak dicantumkan, ekstensi file digunakan apa adanya sebagai ID (jika tidak ada, gunakan `txt`).
- `--theme` — ID tema. Default-nya `github-dark`.

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

Outputnya adalah blok `<pre class="shiki …">` tema tunggal yang sama dengan yang dikembalikan [`codeToHtml`](https://shikiphp.inline0.dev/id/docs/api#shikiphpcodetohtml), diikuti baris baru, sehingga dapat langsung dialihkan ke file:

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

Perintah ini tidak menerima opsi lain. Untuk tema ganda, transformer, atau opsi[lainnya](https://shikiphp.inline0.dev/id/docs/options), panggil PHP API saja.

### Opsi dan argumen

Opsi harus menggunakan bentuk `--name=value`. Argumen lain yang diawali `--` akan diabaikan, dan argumen terakhir yang tidak diawali `--` dianggap sebagai file. Jadi, `--lang php file.rs` menyorot `file.rs` sebagai Rust: `--lang` diabaikan, `php` digantikan dengan `file.rs`, dan bahasa ditentukan dari ekstensi `.rs`.

### Penentuan bahasa otomatis

Tanpa `--lang`, ekstensi menjadi id bahasa tanpa perubahan. Ini berfungsi
jika ekstensi tersebut merupakan id atau alias yang sudah disertakan — `php`, `js`, `ts`,
`tsx`, `py`, `rs`, `go`, `md`, `yml`, `json`, `sh`, dan banyak lagi (lihat
[Bahasa](https://shikiphp.inline0.dev/id/docs/languages)). Ini tidak berlaku untuk:

- file tanpa ekstensi, seperti `Makefile` atau `Dockerfile`, yang menggunakan
  `txt` sebagai fallback;
- ekstensi yang bukan id bahasa, seperti `.txt`.

`txt` bukan bahasa yang disertakan, sehingga kedua kasus saat ini berhenti dengan
kesalahan `Unknown language "txt"` ([#3](https://github.com/inline0/shikiphp/issues/3)).
Berikan `--lang` untuk file-file ini:

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

## `langs`

Cetak setiap id yang diterima bundle sebagai bahasa, satu per baris.

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

Daftar ini terdiri dari 350 baris: 253 id tata bahasa yang disertakan dalam urutan bundle (bukan
alfabetis), diikuti 97 aliasnya (`js`, `cjs`, `mjs`, dan seterusnya).
Id tata bahasa mencakup 18 tata bahasa pembantu yang disematkan oleh tata bahasa lain, seperti
`vue-directives` dan `es-tag-css`; lihat [Bahasa](https://shikiphp.inline0.dev/id/docs/languages) untuk
katalog nama dan alias. Salurkan melalui `sort` untuk mendapatkan daftar alfabetis.

## `themes`

Cetak setiap id tema yang disertakan, satu per baris, dalam urutan alfabetis (65 tema).

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

Lihat [Tema](https://shikiphp.inline0.dev/id/docs/themes) untuk katalog yang berisi nama dan jenis terang/gelap.

## Bantuan dan status keluar

Jalankan tanpa perintah, atau `-h` / `--help` / `help`, untuk mencetak petunjuk penggunaan.

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

| Situasi | Keluaran | Status keluar |
| --- | --- | --- |
| Berhasil, atau bantuan | stdout | `0` |
| Perintah tidak dikenal | `Unknown command: <name>` di stderr | `1` |
| `highlight` tanpa file, atau file tidak ada | baris petunjuk penggunaan di stderr | `1` |
| Bahasa atau tema tidak dikenal | `Shikiphp\Exceptions\Highlight` yang tidak tertangkap (kesalahan fatal PHP dengan stack trace) | `255` |
