Skip to content

TypeFox/fastbelt

Repository files navigation

Fastbelt

Fastbelt is a high-performance DSL toolkit for Go with a parser generator and Language Server Protocol (LSP) support.

It is designed for language tooling that needs low latency and good throughput on large workspaces.

For background and benchmarks, see the Fastbelt introduction blog post.

Installation

Adding to a Module

Fastbelt ships as a Go module:

go get typefox.dev/fastbelt@latest
go get -tool typefox.dev/fastbelt/cmd/fastbelt@latest

Global Install

You can also globally install the fastbelt CLI:

go install typefox.dev/fastbelt/cmd/fastbelt@latest

Quick start

The first step is to write a grammar definition file, e.g. grammar.fb, which has a similar format as the grammar language of Langium.

To run the code generator for your grammar definition:

# globally installed
fastbelt -g ./grammar.fb -o ./
# on demand install
go run typefox.dev/fastbelt/cmd/fastbelt@latest -g ./grammar.fb -o ./

This writes generated Go files for services such as lexer, parser, linker, and type definitions.

Typically you will want to run generation using go generate. Add a directive to some file in your module (assumes install with go tool):

//go:generate go tool typefox.dev/fastbelt/cmd/fastbelt -g ./grammar.fb -o ./

Scaffolding

To bootstrap a new Go module for a language (minimal .fb grammar, go:generate using go tool on this CLI, LSP command, and VS Code extension layout), run:

fastbelt scaffold -module example.com/you/mylang -language "MyLanguage"

That creates a directory named after the last segment of -module (here ./mylang) in the current working directory, runs go mod init, pulls in fastbelt as a library and tool dependency, lays down the files, and runs go generate. Use fastbelt scaffold -h for full usage.

Examples

A minimal state machine example is available in examples/statemachine.

For editor integration, see the VS Code extension in internal/vscode-extensions/statemachine.

Contributing

Issues and pull requests are welcome.

License

Fastbelt is licensed under the MIT License.

About

High-performance language engineering toolkit for Go

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Contributors

Languages