66e99d722a
editorconfig-core-go made breaking api changes and has recently released v2.1.1. This change consumes the new api and fixes up any breaking references. |
||
---|---|---|
.. | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
.travis.yml | ||
CHANGELOG.md | ||
CMakeLists.txt | ||
editorconfig.go | ||
fnmatch.go | ||
go.mod | ||
go.sum | ||
LICENSE | ||
Makefile | ||
README.md |
Editorconfig Core Go
A Editorconfig file parser and manipulator for Go.
Currently this package does some basic work but does not fully support EditorConfig specs, so using it in "real world" is not recommended.
Missing features
unset
- escaping comments in values, probably in go-ini/ini
Installing
We recommend the use of Go 1.11+ modules for this package.
Import by the same path. The package name you will use to access it is
editorconfig
.
import (
"github.com/editorconfig/editorconfig-core-go/v2"
)
Usage
Parse from file
editorConfig, err := editorconfig.ParseFile("path/to/.editorconfig")
if err != nil {
log.Fatal(err)
}
Parse from slice of bytes
data := []byte("...")
editorConfig, err := editorconfig.ParseBytes(data)
if err != nil {
log.Fatal(err)
}
Get definition to a given filename
This method builds a definition to a given filename. This definition is a merge of the properties with selectors that matched the given filename. The lasts sections of the file have preference over the priors.
def := editorConfig.GetDefinitionForFilename("my/file.go")
This definition have the following properties:
type Definition struct {
Selector string
Charset string
IndentStyle string
IndentSize string
TabWidth int
EndOfLine string
TrimTrailingWhitespace bool
InsertFinalNewline bool
Raw map[string]string
}
Automatic search for .editorconfig
files
If you want a definition of a file without having to manually
parse the .editorconfig
files, you can then use the static version
of GetDefinitionForFilename
:
def, err := editorconfig.GetDefinitionForFilename("foo/bar/baz/my-file.go")
In the example above, the package will automatically search for
.editorconfig
files on:
foo/bar/baz/.editorconfig
foo/baz/.editorconfig
foo/.editorconfig
Until it reaches a file with root = true
or the root of the filesystem.
Generating a .editorconfig file
You can easily convert a Editorconfig struct to a compatible INI file:
// serialize to slice of bytes
data, err := editorConfig.Serialize()
if err != nil {
log.Fatal(err)
}
// save directly to file
err := editorConfig.Save("path/to/.editorconfig")
if err != nil {
log.Fatal(err)
}
Contributing
To run the tests:
go test -v ./...