hcl/README.md
2015-11-03 02:21:28 +03:00

45 lines
2.0 KiB
Markdown

# hcl [![GoDoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](http://godoc.org/github.com/fatih/hcl) [![Build Status](http://img.shields.io/travis/fatih/hcl.svg?style=flat-square)](https://travis-ci.org/fatih/hcl)
HCL is a lexer and parser family written in Go for
[HCL](https://github.com/hashicorp/hcl) (Hashicorp Configuration Language). It
has several components, similar to Go's own parser family. It provides a set of
packages to write tools and customize files written in HCL. For example both
[`hclfmt`](https://github.com/fatih/hclfmt) and `hcl2json` (coming soon) is
written based on these tools.
This package is still under heavy development. The next stable version will be
released with version 0.1.
## API
If you are already familiar with Go's own parser family it's really easy to
dive. It basically resembles the same logic. However there are several differences
and the implementation is completely different. Right now it contains the
following packages:
* `token`: defines constants representing the lexical tokens for a scanned HCL file.
* `scanner`: scanner is a lexical scanner. It scans a given HCL file and
returns a stream of tokens.
* `ast`: declares the types used to represent the syntax tree for parsed HCL files.
* `parser`: parses a given HCL file and creates a AST representation
* `printer`: prints any given AST node and formats
## Why
The whole parser family was created because I wanted a `hclfmt` command. This
command would be just like `gofmt`, format an HCL file. I didn't want to use
the package [github/hashicorp/hcl](https://github.com/hashicorp/hcl) in the
first place, because the lexer and parser is generated and it doesn't expose
the flexibility I wanted to have.
Another reason was that I wanted to learn and experience how to implement a
proper lexer and parser in Go and how a formatter could be implemented from an
AST. It was really fun and I think it was worth it.
## License
The BSD 3-Clause License - see
[`LICENSE`](https://github.com/fatih/hcl/blob/master/LICENSE) for more
details