diff --git a/README.md b/README.md new file mode 100644 index 0000000..25c67b2 --- /dev/null +++ b/README.md @@ -0,0 +1,118 @@ +# Hurl tree-sitter Parser + +[hurl.dev](https://hurl.dev) + +## Introduction + +Welcome to the Hurl Tree-sitter parser. This project is aimed at creating a +syntax parser for Hurl, a text form of the CURL tool using the Tree-sitter +parsing library. + +Tree-sitter is a parser generator tool and an incremental parsing library. It +aims to build a concrete syntax tree for a source code and efficiently update +the syntax tree as your source code changes. + +This parser aids in transforming the text representation of Hurl into a +structured format that can be utilized by various text editors or IDEs for +features like syntax highlighting, code linting, and intelligent code +completion. + +## Dependencies + +- [Node.js](https://nodejs.org/) + +## Installation + +1. Clone this repository: + ``` + git clone https://github.com/kjuulh/tree-sitter-hurl.git + ``` + +2. Navigate to the project directory: + ``` + cd tree-sitter-hurl + ``` + +3. Install the required Node.js dependencies: + ``` + npm install + ``` + +4. Compile the parser: + ``` + npm run ci # runs both generate and test (for good measure) + ``` + +## Usage + +To parse a file or text, run: + +``` +tree-sitter parse examples/.hurl +``` + +This will generate a syntax tree for the input file. + +### Neovim + +Link to file: +https://github.com/kjuulh/lazyvim/blob/ff018a06c332ab69d48faa546f789bd4cedb4710/lua/plugins/treesitter.lua + +```lua +-- https://github.com/nvim-treesitter/nvim-treesitter/tree/master#adding-parsers +parser_config.hurl = { + install_info = { + url = "~/git/github.com/kjuulh/tree-sitter-hurl", -- or your own path, i.e. where you cloned the repository + files = { "src/parser.c" }, + branch = "main", + generate_requires_npm = false, + requires_generate_from_grammar = false, + }, + filetype = "hurl", +} + +-- https://neovim.io/doc/user/lua.html#vim.filetype.add() +-- Search for vim.filetype.add +vim.filetype.add({ + extension = { + hurl = "hurl" + } +}) +``` + +Add your own queries and injections as well (will come with nvim-treesitter, if +it ever goes upstream) + +``` +cp -r queries ~/.config/nvim +``` + +Moves queries to your own nvim config. It may be placed somewhere else use +`:h rfp` for help + +## Testing + +Tests can be performed using the following command: + +``` +npm run test +``` + +All test files are located in the `./corpus` directory. If you wish to add more +test cases, simply add new `.txt` files in the corpus directory following the +existing naming convention. + +## Contribution + +Contributions are very much welcomed and appreciated. Please open an issue or +submit a pull request if you find any bugs or think of a new feature that can be +added. + +## License + +This project is licensed under the terms of the MIT license. For more details, +please see the `LICENSE` file. + +## Contact + +For any questions or concerns, please open an issue on this repository.