# Auto-detect language (/recipes/auto-detect-language)

### JavaScript / TypeScript

```js
const html = await highlight(
  '#!/usr/bin/env bash\necho "hello"',
  htmlInline({theme: frappe}),
)
```

### Rust

```rust
use lumis::languages::{self, Language};

let lang = languages::guess(Some("script.sh"), source);
```

### Elixir

```elixir
Lumis.highlight!("#!/usr/bin/env bash\necho 'hello'")
```

### CLI

```bash
lumis highlight main.rs
```


## Resolving the id without highlighting

Highlighting detects the language for you. To ask what a snippet is before
deciding what to do with it, call the detector directly. It returns the same id
highlighting would have used, falling back to `plaintext`.

### JavaScript / TypeScript

```js
import * as languages from '@lumis-sh/lumis/languages';

languages.guess('lib/app.ex')                      // "elixir"
languages.guess(undefined, '#!/usr/bin/env bash')  // "bash"
```

### Rust

```rust
use lumis::languages::{self, Language};

assert_eq!(
    languages::guess(Some("lib/app.ex"), ""),
    Language::Elixir
);
assert_eq!(
    languages::guess(None, "#!/usr/bin/env bash"),
    Language::Bash
);
```

### Elixir

```elixir
Lumis.Languages.guess("lib/app.ex")
Lumis.Languages.guess(nil, "#!/usr/bin/env bash")
```