Metadata-Version: 2.4
Name: ts-kotlin
Version: 0.0.1
Summary: Kotlin grammar for tree-sitter
License: MIT
Project-URL: Homepage, https://github.com/tree-sitter/tree-sitter-kotlin
Keywords: incremental,parsing,tree-sitter,kotlin
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Topic :: Software Development :: Compilers
Classifier: Topic :: Text Processing :: Linguistic
Classifier: Typing :: Typed
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: core
Requires-Dist: tree-sitter~=0.21; extra == "core"
Dynamic: license-file

# Kotlin Grammar for Tree-sitter

[![Build](https://github.com/fwcd/tree-sitter-kotlin/actions/workflows/build.yml/badge.svg)](https://github.com/fwcd/tree-sitter-kotlin/actions/workflows/build.yml)
[![NPM](https://img.shields.io/npm/v/tree-sitter-kotlin)](https://www.npmjs.com/package/tree-sitter-kotlin)
[![crates.io](https://img.shields.io/crates/v/tree-sitter-kotlin)](https://crates.io/crates/tree-sitter-kotlin)

[Kotlin](https://kotlinlang.org) language grammar for [Tree-sitter](http://tree-sitter.github.io/tree-sitter/). You can try it out directly [on the web](https://fwcd.github.io/tree-sitter-kotlin).

![Icon](Icon128.png)

The grammar is based on the [official language grammar](https://kotlinlang.org/docs/reference/grammar.html).

## Project Structure

| File | Description |
| ---- | ----------- |
| grammar.js | The Tree-sitter grammar |
| grammar-reference.js | A direct translation of the Kotlin language grammar that is, however, ambiguous to Tree-sitter |
| src | The generated parser |

## Setup

>`npm install`

## Python Package

Install the Python package from PyPI:

```bash
pip install ts-kotlin
```

The package includes the highlight queries bundled with it. You can access the `highlights.scm` file using the command-line entry point:

```bash
ts-kotlin-highlights
```

This will print the contents of the `queries/highlights.scm` file to stdout. The queries directory is automatically included when installing the package via pip.

### Usage

```python
from tree_sitter import Parser, Language
from tree_sitter_kotlin import language

# Create parser
lang = Language(language())
parser = Parser(lang)

# Parse Kotlin code
code = b"""
fun greet(name: String): String {
    return "Hello, $name!"
}
"""

tree = parser.parse(code)
print(tree.root_node.sexp())  # Print syntax tree
```

## Development

### Compilation

To (re-)compile the grammar, run:

>`npm run generate`

Note that the grammar is written completely in JavaScript (`grammar.js`), the other source files are generated by `tree-sitter`.

### Testing

To run the unit tests, run:

>`npm run test`

It is also helpful to run the parser on a real Kotlin project's source files.

```shell
./node_modules/.bin/tree-sitter parse "/path/to/some/project/**/*.kt"  --quiet --stat
```

## WebAssembly

### Compilation

First make sure to have [Emscripten](https://emscripten.org/) installed. If you use Homebrew, you can `brew install emscripten`. Then run:

>`npm run build-wasm`

### Playground

After compiling the grammar to WebAssembly, you can invoke

>`npm run playground`

to launch an interactive editing environment that displays the parsed syntax tree on-the-fly in the browser. You can also view a deployed version of this playground [on the web](https://fwcd.github.io/tree-sitter-kotlin).

![Screenshot](playground-screenshot.png)

## Documentation

More documentation on how to create Tree-sitter grammars [can be found here](https://tree-sitter.github.io/tree-sitter/creating-parsers).

## See also

* [Kotlin Language Server](https://github.com/fwcd/kotlin-language-server) for code completion, diagnostics and more
* [Kotlin Debug Adapter](https://github.com/fwcd/kotlin-debug-adapter) for JVM debugging support
