upgrade gopkg.in/editorconfig/editorconfig-core-go.v1 (#8501)

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.
lunny/display_deleted_branch2
Colin Arnott 5 years ago committed by zeripath
parent 80655026d2
commit 66e99d722a

@ -29,6 +29,7 @@ require (
github.com/cznic/strutil v0.0.0-20181122101858-275e90344537 // indirect github.com/cznic/strutil v0.0.0-20181122101858-275e90344537 // indirect
github.com/denisenkom/go-mssqldb v0.0.0-20190924004331-208c0a498538 github.com/denisenkom/go-mssqldb v0.0.0-20190924004331-208c0a498538
github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/editorconfig/editorconfig-core-go/v2 v2.1.1
github.com/emirpasic/gods v1.12.0 github.com/emirpasic/gods v1.12.0
github.com/etcd-io/bbolt v1.3.2 // indirect github.com/etcd-io/bbolt v1.3.2 // indirect
github.com/ethantkoenig/rupture v0.0.0-20180203182544-0a76f03a811a github.com/ethantkoenig/rupture v0.0.0-20180203182544-0a76f03a811a
@ -107,13 +108,11 @@ require (
golang.org/x/tools v0.0.0-20190910221609-7f5965fd7709 // indirect golang.org/x/tools v0.0.0-20190910221609-7f5965fd7709 // indirect
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
gopkg.in/asn1-ber.v1 v1.0.0-20150924051756-4e86f4367175 // indirect gopkg.in/asn1-ber.v1 v1.0.0-20150924051756-4e86f4367175 // indirect
gopkg.in/editorconfig/editorconfig-core-go.v1 v1.3.0
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
gopkg.in/ini.v1 v1.48.0 gopkg.in/ini.v1 v1.48.0
gopkg.in/ldap.v3 v3.0.2 gopkg.in/ldap.v3 v3.0.2
gopkg.in/src-d/go-billy.v4 v4.3.2 gopkg.in/src-d/go-billy.v4 v4.3.2
gopkg.in/src-d/go-git.v4 v4.13.1 gopkg.in/src-d/go-git.v4 v4.13.1
gopkg.in/stretchr/testify.v1 v1.2.2 // indirect
gopkg.in/testfixtures.v2 v2.5.0 gopkg.in/testfixtures.v2 v2.5.0
mvdan.cc/xurls/v2 v2.1.0 mvdan.cc/xurls/v2 v2.1.0
strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251 strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251

@ -134,6 +134,8 @@ github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/editorconfig/editorconfig-core-go/v2 v2.1.1 h1:mhPg/0hGebcpiiQLqJD2PWWyoHRLEdZ3sXKaEvT1EQU=
github.com/editorconfig/editorconfig-core-go/v2 v2.1.1/go.mod h1:/LuhWJiQ9Gvo1DhVpa4ssm5qeg8rrztdtI7j/iCie2k=
github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw=
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg=
@ -522,6 +524,7 @@ github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304/go.mod h1
github.com/smartystreets/assertions v1.0.1 h1:voD4ITNjPL5jjBfgR/r8fPIIBrliWrWHeiJApdr3r4w= github.com/smartystreets/assertions v1.0.1 h1:voD4ITNjPL5jjBfgR/r8fPIIBrliWrWHeiJApdr3r4w=
github.com/smartystreets/assertions v1.0.1/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= github.com/smartystreets/assertions v1.0.1/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM=
github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 h1:WN9BUFbdyOsSH/XohnWpXOlq9NBD5sGAB2FciQMUEe8= github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 h1:WN9BUFbdyOsSH/XohnWpXOlq9NBD5sGAB2FciQMUEe8=
github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
@ -763,13 +766,12 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/editorconfig/editorconfig-core-go.v1 v1.3.0 h1:oxOEwvhxLMpWpN+0pb2r9TWrM0DCFBHxbuIlS27tmFg=
gopkg.in/editorconfig/editorconfig-core-go.v1 v1.3.0/go.mod h1:s2mQFI9McjArkyCwyEwU//+luQENTnD/Lfb/7Sj3/kQ=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE=
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw=
gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.44.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.44.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.44.2/go.mod h1:M3Cogqpuv0QCi3ExAY5V4uOt4qb/R3xZubo9m8lK5wg= gopkg.in/ini.v1 v1.44.2/go.mod h1:M3Cogqpuv0QCi3ExAY5V4uOt4qb/R3xZubo9m8lK5wg=
gopkg.in/ini.v1 v1.46.0 h1:VeDZbLYGaupuvIrsYCEOe/L/2Pcs5n7hdO1ZTjporag= gopkg.in/ini.v1 v1.46.0 h1:VeDZbLYGaupuvIrsYCEOe/L/2Pcs5n7hdO1ZTjporag=
@ -786,8 +788,6 @@ gopkg.in/src-d/go-git-fixtures.v3 v3.5.0 h1:ivZFOIltbce2Mo8IjzUHAFoq/IylO9WHhNOA
gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g=
gopkg.in/src-d/go-git.v4 v4.13.1 h1:SRtFyV8Kxc0UP7aCHcijOMQGPxHSmMOPrzulQWolkYE= gopkg.in/src-d/go-git.v4 v4.13.1 h1:SRtFyV8Kxc0UP7aCHcijOMQGPxHSmMOPrzulQWolkYE=
gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8=
gopkg.in/stretchr/testify.v1 v1.2.2 h1:yhQC6Uy5CqibAIlk1wlusa/MJ3iAN49/BsR/dCCKz3M=
gopkg.in/stretchr/testify.v1 v1.2.2/go.mod h1:QI5V/q6UbPmuhtm10CaFZxED9NreB8PnFYN9JcR6TxU=
gopkg.in/testfixtures.v2 v2.5.0 h1:N08B7l2GzFQenyYbzqthDnKAA+cmb17iAZhhFxr7JHw= gopkg.in/testfixtures.v2 v2.5.0 h1:N08B7l2GzFQenyYbzqthDnKAA+cmb17iAZhhFxr7JHw=
gopkg.in/testfixtures.v2 v2.5.0/go.mod h1:vyAq+MYCgNpR29qitQdLZhdbLFf4mR/2MFJRFoQZZ2M= gopkg.in/testfixtures.v2 v2.5.0/go.mod h1:vyAq+MYCgNpR29qitQdLZhdbLFf4mR/2MFJRFoQZZ2M=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=

@ -19,8 +19,8 @@ import (
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
"gitea.com/macaron/macaron" "gitea.com/macaron/macaron"
"github.com/editorconfig/editorconfig-core-go/v2"
"github.com/unknwon/com" "github.com/unknwon/com"
"gopkg.in/editorconfig/editorconfig-core-go.v1"
) )
// PullRequest contains informations to make a pull request // PullRequest contains informations to make a pull request

@ -30,7 +30,7 @@ import (
"code.gitea.io/gitea/services/gitdiff" "code.gitea.io/gitea/services/gitdiff"
mirror_service "code.gitea.io/gitea/services/mirror" mirror_service "code.gitea.io/gitea/services/mirror"
"gopkg.in/editorconfig/editorconfig-core-go.v1" "github.com/editorconfig/editorconfig-core-go/v2"
) )
// NewFuncMap returns functions for injecting to templates // NewFuncMap returns functions for injecting to templates
@ -145,7 +145,11 @@ func NewFuncMap() []template.FuncMap {
}, },
"TabSizeClass": func(ec *editorconfig.Editorconfig, filename string) string { "TabSizeClass": func(ec *editorconfig.Editorconfig, filename string) string {
if ec != nil { if ec != nil {
def := ec.GetDefinitionForFilename(filename) def, err := ec.GetDefinitionForFilename(filename)
if err != nil {
log.Error("tab size class: getting definition for filename: %v", err)
return "tab-size-8"
}
if def.TabWidth > 0 { if def.TabWidth > 0 {
return fmt.Sprintf("tab-size-%d", def.TabWidth) return fmt.Sprintf("tab-size-%d", def.TabWidth)
} }

@ -136,7 +136,7 @@ func GetEditorconfig(ctx *context.APIContext) {
} }
fileName := ctx.Params("filename") fileName := ctx.Params("filename")
def := ec.GetDefinitionForFilename(fileName) def, _ := ec.GetDefinitionForFilename(fileName)
if def == nil { if def == nil {
ctx.NotFound(err) ctx.NotFound(err)
return return

@ -3,11 +3,12 @@
root = true root = true
[*] [*]
end_of_line = lf
insert_final_newline = true insert_final_newline = true
charset = utf-8 charset = utf-8
trim_trailing_whitespace = true trim_trailing_whitespace = true
indent_style = space
indent_size = 2
[*.go] [{Makefile,go.mod,go.sum,*.go}]
indent_style = tab indent_style = tab
indent_size = 8 indent_size = 8

@ -0,0 +1,30 @@
---
language: go
dist: xenial
sudo: true
go:
- '1.11.x'
- '1.12.x'
compiler:
- gcc
install:
# first we create a directory for the CMake binaries
- DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
- mkdir ${DEPS_DIR} && cd ${DEPS_DIR}
# we use wget to fetch the cmake binaries
- travis_retry wget --no-check-certificate https://cmake.org/files/v3.14/cmake-3.14.6-Linux-x86_64.tar.gz
- echo "82e08e50ba921035efa82b859c74c5fbe27d3e49a4003020e3c77618a4e912cd cmake-3.14.6-Linux-x86_64.tar.gz" > sha256sum.txt
- sha256sum -c sha256sum.txt
- tar -xvf cmake-3.14.6-Linux-x86_64.tar.gz > /dev/null
- mv cmake-3.14.6-Linux-x86_64 cmake-install
- PATH=${DEPS_DIR}/cmake-install:${DEPS_DIR}/cmake-install/bin:$PATH
- cd ${TRAVIS_BUILD_DIR}
env:
- GO111MODULE=on
script:
- make test

@ -0,0 +1,20 @@
# Change log
## v2.1.1 - 2019-08-18
- Fix a small path bug
([#17](https://github.com/editorconfig/editorconfig-core-go/issues/17),
[#18](https://github.com/editorconfig/editorconfig-core-go/pull/18)).
## v2.1.0 - 2019-08-10
- This package is now *way* more compliant with the Editorconfig definition
thanks to a refactor work made by [@greut](https://github.com/greut)
([#15](https://github.com/editorconfig/editorconfig-core-go/pull/15)).
## v2.0.0 - 2019-07-14
- This project now uses [Go Modules](https://blog.golang.org/using-go-modules)
([#14](https://github.com/editorconfig/editorconfig-core-go/pull/14)).
- The import path has been changed from `gopkg.in/editorconfig/editorconfig-core-go.v1`
to `github.com/editorconfig/editorconfig-core-go/v2`.

@ -0,0 +1,5 @@
project(editorconfig-core-go)
cmake_minimum_required(VERSION 3.14)
enable_testing()
set(EDITORCONFIG_CMD ${CMAKE_CURRENT_LIST_DIR}/editorconfig)
add_subdirectory(core-test)

@ -0,0 +1,19 @@
PROJECT_ROOT_DIR := $(CURDIR)
SRC := $(shell git ls-files *.go */*.go)
.PHONY: bin test test-go test-core submodule
test: test-go test-core
submodule:
git submodule update --init
editorconfig: $(SRC)
go build ./cmd/editorconfig
test-go:
go test -v ./...
test-core: editorconfig
cd core-test; cmake ..
cd core-test; ctest -E "(comments_after_section|octothorpe|unset_|_pre_0.9.0|max_|root_file_mixed_case)" --output-on-failure .

@ -1,27 +1,30 @@
[![Build Status](https://travis-ci.org/editorconfig/editorconfig-core-go.svg?branch=master)](https://travis-ci.org/editorconfig/editorconfig-core-go) <!-- Currently tests against core-test are not done so hide build status badge for now -->
[![GoDoc](https://godoc.org/gopkg.in/editorconfig/editorconfig-core-go.v1?status.svg)](https://godoc.org/gopkg.in/editorconfig/editorconfig-core-go.v1) <!-- [![Build Status](https://travis-ci.org/editorconfig/editorconfig-core-go.svg?branch=master)](https://travis-ci.org/editorconfig/editorconfig-core-go) -->
[![Go Report Card](https://goreportcard.com/badge/gopkg.in/editorconfig/editorconfig-core-go.v1)](https://goreportcard.com/report/gopkg.in/editorconfig/editorconfig-core-go.v1) [![GoDoc](https://godoc.org/github.com/editorconfig/editorconfig-core-go?status.svg)](https://godoc.org/github.com/editorconfig/editorconfig-core-go)
[![Go Report Card](https://goreportcard.com/badge/github.com/editorconfig/editorconfig-core-go)](https://goreportcard.com/report/github.com/editorconfig/editorconfig-core-go)
# Editorconfig Core Go # Editorconfig Core Go
A [Editorconfig][editorconfig] file parser and manipulator for Go. A [Editorconfig][editorconfig] file parser and manipulator for Go.
> This package is already working, but still under testing. > Currently this package does some basic work but does not fully support
> EditorConfig specs, so using it in "real world" is not recommended.
## Installing ## Missing features
We recommend the use of [gopkg.in][gopkg] for this package: - `unset`
- escaping comments in values, probably in [go-ini/ini](https://github.com/go-ini/ini)
```bash ## Installing
go get -u gopkg.in/editorconfig/editorconfig-core-go.v1
``` 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 Import by the same path. The package name you will use to access it is
`editorconfig`. `editorconfig`.
```go ```go
import ( import (
"gopkg.in/editorconfig/editorconfig-core-go.v1" "github.com/editorconfig/editorconfig-core-go/v2"
) )
``` ```
@ -70,6 +73,7 @@ type Definition struct {
EndOfLine string EndOfLine string
TrimTrailingWhitespace bool TrimTrailingWhitespace bool
InsertFinalNewline bool InsertFinalNewline bool
Raw map[string]string
} }
``` ```
@ -115,8 +119,7 @@ if err != nil {
To run the tests: To run the tests:
```bash ```bash
go test -v go test -v ./...
``` ```
[editorconfig]: http://editorconfig.org/ [editorconfig]: http://editorconfig.org/
[gopkg]: https://gopkg.in

@ -15,6 +15,7 @@ import (
) )
const ( const (
// ConfigNameDefault represents the name of the configuration file
ConfigNameDefault = ".editorconfig" ConfigNameDefault = ".editorconfig"
) )
@ -37,6 +38,7 @@ const (
CharsetUTF8 = "utf-8" CharsetUTF8 = "utf-8"
CharsetUTF16BE = "utf-16be" CharsetUTF16BE = "utf-16be"
CharsetUTF16LE = "utf-16le" CharsetUTF16LE = "utf-16le"
CharsetUTF8BOM = "utf-8 bom"
) )
// Definition represents a definition inside the .editorconfig file. // Definition represents a definition inside the .editorconfig file.
@ -81,28 +83,21 @@ func ParseBytes(data []byte) (*Editorconfig, error) {
var ( var (
iniSection = iniFile.Section(sectionStr) iniSection = iniFile.Section(sectionStr)
definition = &Definition{} definition = &Definition{}
raw = make(map[string]string) raw = make(map[string]string)
) )
err := iniSection.MapTo(&definition) err := iniSection.MapTo(&definition)
if err != nil { if err != nil {
return nil, err return nil, err
} }
// tab_width defaults to indent_size:
// https://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties#tab_width
if definition.TabWidth <= 0 {
if num, err := strconv.Atoi(definition.IndentSize); err == nil {
definition.TabWidth = num
}
}
// Shallow copy all properties // Shallow copy all properties
for k, v := range iniSection.KeysHash() { for k, v := range iniSection.KeysHash() {
raw[k] = v raw[strings.ToLower(k)] = v
} }
definition.Selector = sectionStr definition.Selector = sectionStr
definition.Raw = raw definition.Raw = raw
definition.normalize()
editorConfig.Definitions = append(editorConfig.Definitions, definition) editorConfig.Definitions = append(editorConfig.Definitions, definition)
} }
return editorConfig, nil return editorConfig, nil
@ -122,44 +117,18 @@ var (
regexpBraces = regexp.MustCompile("{.*}") regexpBraces = regexp.MustCompile("{.*}")
) )
func filenameMatches(pattern, name string) bool { // normalize fixes some values to their lowercaes value
// basic match func (d *Definition) normalize() {
matched, _ := filepath.Match(pattern, name) d.Charset = strings.ToLower(d.Charset)
if matched { d.EndOfLine = strings.ToLower(d.EndOfLine)
return true d.IndentStyle = strings.ToLower(d.IndentStyle)
}
// foo/bar/main.go should match main.go
matched, _ = filepath.Match(pattern, filepath.Base(name))
if matched {
return true
}
// foo should match foo/main.go
matched, _ = filepath.Match(filepath.Join(pattern, "*"), name)
if matched {
return true
}
// *.{js,go} should match main.go
if str := regexpBraces.FindString(pattern); len(str) > 0 {
// remote initial "{" and final "}"
str = strings.TrimPrefix(str, "{")
str = strings.TrimSuffix(str, "}")
// testing for empty brackets: "{}"
if len(str) == 0 {
patt := regexpBraces.ReplaceAllString(pattern, "*")
matched, _ = filepath.Match(patt, filepath.Base(name))
return matched
}
for _, patt := range strings.Split(str, ",") { // tab_width defaults to indent_size:
patt = regexpBraces.ReplaceAllString(pattern, patt) // https://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties#tab_width
matched, _ = filepath.Match(patt, filepath.Base(name)) num, err := strconv.Atoi(d.IndentSize)
if matched { if err == nil && d.TabWidth <= 0 {
return true d.TabWidth = num
}
}
} }
return false
} }
func (d *Definition) merge(md *Definition) { func (d *Definition) merge(md *Definition) {
@ -192,26 +161,71 @@ func (d *Definition) merge(md *Definition) {
} }
} }
// InsertToIniFile ... TODO
func (d *Definition) InsertToIniFile(iniFile *ini.File) { func (d *Definition) InsertToIniFile(iniFile *ini.File) {
iniSec := iniFile.Section(d.Selector) iniSec := iniFile.Section(d.Selector)
for k, v := range d.Raw { for k, v := range d.Raw {
iniSec.Key(k).SetValue(v) if k == "insert_final_newline" {
iniSec.Key(k).SetValue(strconv.FormatBool(d.InsertFinalNewline))
} else if k == "trim_trailing_whitespace" {
iniSec.Key(k).SetValue(strconv.FormatBool(d.TrimTrailingWhitespace))
} else if k == "charset" {
iniSec.Key(k).SetValue(d.Charset)
} else if k == "end_of_line" {
iniSec.Key(k).SetValue(d.EndOfLine)
} else if k == "indent_style" {
iniSec.Key(k).SetValue(d.IndentStyle)
} else if k == "tab_width" {
iniSec.Key(k).SetValue(strconv.Itoa(d.TabWidth))
} else if k == "indent_size" {
iniSec.Key(k).SetValue(d.IndentSize)
} else {
iniSec.Key(k).SetValue(v)
}
}
if _, ok := d.Raw["indent_size"]; !ok {
if d.TabWidth > 0 {
iniSec.Key("indent_size").SetValue(strconv.Itoa(d.TabWidth))
} else if d.IndentStyle == IndentStyleTab {
iniSec.Key("indent_size").SetValue(IndentStyleTab)
}
}
if _, ok := d.Raw["tab_width"]; !ok && len(d.IndentSize) > 0 {
if _, err := strconv.Atoi(d.IndentSize); err == nil {
iniSec.Key("tab_width").SetValue(d.IndentSize)
}
} }
} }
// GetDefinitionForFilename returns a definition for the given filename. // GetDefinitionForFilename returns a definition for the given filename.
// The result is a merge of the selectors that matched the file. // The result is a merge of the selectors that matched the file.
// The last section has preference over the priors. // The last section has preference over the priors.
func (e *Editorconfig) GetDefinitionForFilename(name string) *Definition { func (e *Editorconfig) GetDefinitionForFilename(name string) (*Definition, error) {
def := &Definition{} def := &Definition{}
def.Raw = make(map[string]string) def.Raw = make(map[string]string)
for i := len(e.Definitions) - 1; i >= 0; i-- { for i := len(e.Definitions) - 1; i >= 0; i-- {
actualDef := e.Definitions[i] actualDef := e.Definitions[i]
if filenameMatches(actualDef.Selector, name) { selector := actualDef.Selector
if !strings.HasPrefix(selector, "/") {
if strings.ContainsRune(selector, '/') {
selector = "/" + selector
} else {
selector = "/**/" + selector
}
}
if !strings.HasPrefix(name, "/") {
name = "/" + name
}
ok, err := FnmatchCase(selector, name)
if err != nil {
return nil, err
}
if ok {
def.merge(actualDef) def.merge(actualDef)
} }
} }
return def return def, nil
} }
func boolToString(b bool) string { func boolToString(b bool) string {
@ -279,10 +293,23 @@ func GetDefinitionForFilenameWithConfigname(filename string, configname string)
if err != nil { if err != nil {
return nil, err return nil, err
} }
definition.merge(ec.GetDefinitionForFilename(filename))
relativeFilename := filename
if len(dir) < len(abs) {
relativeFilename = abs[len(dir):]
}
def, err := ec.GetDefinitionForFilename(relativeFilename)
if err != nil {
return nil, err
}
definition.merge(def)
if ec.Root { if ec.Root {
break break
} }
} }
return definition, nil return definition, nil
} }

@ -0,0 +1,177 @@
package editorconfig
import (
"fmt"
"regexp"
"strconv"
"strings"
)
var (
// findLeftBrackets matches the opening left bracket {
findLeftBrackets = regexp.MustCompile(`(^|[^\\])\{`)
// findLeftBrackets matches the closing right bracket {
findRightBrackets = regexp.MustCompile(`(^|[^\\])\}`)
// findNumericRange matches a range of number, e.g. -2..5
findNumericRange = regexp.MustCompile(`^([+-]?\d+)\.\.([+-]?\d+)$`)
)
// FnmatchCase tests whether the name matches the given pattern case included.
func FnmatchCase(pattern, name string) (bool, error) {
p, err := translate(pattern)
if err != nil {
return false, err
}
r, err := regexp.Compile(fmt.Sprintf("^%s$", p))
if err != nil {
return false, err
}
return r.MatchString(name), nil
}
func translate(pattern string) (string, error) {
index := 0
pat := []rune(pattern)
length := len(pat)
result := strings.Builder{}
braceLevel := 0
isEscaped := false
inBrackets := false
matchesBraces := len(findLeftBrackets.FindAllString(pattern, -1)) == len(findRightBrackets.FindAllString(pattern, -1))
for index < length {
r := pat[index]
index++
if r == '*' {
p := index
if p < length && pat[p] == '*' {
result.WriteString(".*")
index++
} else {
result.WriteString("[^/]*")
}
} else if r == '/' {
p := index
if p+2 < length && pat[p] == '*' && pat[p+1] == '*' && pat[p+2] == '/' {
result.WriteString("(?:/|/.*/)")
index += 3
} else {
result.WriteRune(r)
}
} else if r == '?' {
result.WriteString("[^/]")
} else if r == '[' {
if inBrackets {
result.WriteString("\\[")
} else {
hasSlash := false
res := strings.Builder{}
p := index
for p < length {
if pat[p] == ']' && pat[p-1] != '\\' {
break
}
res.WriteRune(pat[p])
if pat[p] == '/' && pat[p-1] != '\\' {
hasSlash = true
break
}
p++
}
if hasSlash {
result.WriteString("\\[" + res.String())
index = p + 1
} else {
inBrackets = true
if index < length && pat[index] == '!' || pat[index] == '^' {
index++
result.WriteString("[^")
} else {
result.WriteRune('[')
}
}
}
} else if r == ']' {
if inBrackets && pat[index-2] == '\\' {
result.WriteString("\\]")
} else {
result.WriteRune(r)
inBrackets = false
}
} else if r == '{' {
hasComma := false
p := index
res := strings.Builder{}
for p < length {
if pat[p] == '}' && pat[p-1] != '\\' {
break
}
res.WriteRune(pat[p])
if pat[p] == ',' && pat[p-1] != '\\' {
hasComma = true
break
}
p++
}
if !hasComma && p < length {
inner := res.String()
sub := findNumericRange.FindStringSubmatch(inner)
if len(sub) == 3 {
from, _ := strconv.Atoi(sub[1])
to, _ := strconv.Atoi(sub[2])
result.WriteString("(?:")
// XXX does not scale well
for i := from; i < to; i++ {
result.WriteString(strconv.Itoa(i))
result.WriteRune('|')
}
result.WriteString(strconv.Itoa(to))
result.WriteRune(')')
} else {
r, _ := translate(inner)
result.WriteString(fmt.Sprintf("\\{%s\\}", r))
}
index = p + 1
} else if matchesBraces {
result.WriteString("(?:")
braceLevel++
} else {
result.WriteString("\\{")
}
} else if r == '}' {
if braceLevel > 0 {
if isEscaped {
result.WriteRune('}')
isEscaped = false
} else {
result.WriteRune(')')
braceLevel--
}
} else {
result.WriteString("\\}")
}
} else if r == ',' {
if braceLevel == 0 || isEscaped {
result.WriteRune(r)
} else {
result.WriteRune('|')
}
} else if r != '\\' || isEscaped {
result.WriteString(regexp.QuoteMeta(string(r)))
isEscaped = false
} else {
isEscaped = true
}
}
return result.String(), nil
}

@ -0,0 +1,9 @@
module github.com/editorconfig/editorconfig-core-go/v2
go 1.12
require (
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a // indirect
github.com/stretchr/testify v1.3.0
gopkg.in/ini.v1 v1.42.0
)

@ -0,0 +1,22 @@
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs=
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
gopkg.in/ini.v1 v1.42.0 h1:7N3gPTt50s8GuLortA00n8AqRTk75qOP98+mTPpgzRk=
gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=

@ -1,5 +0,0 @@
* text eol=lf
*.jpg binary
*.jpeg binary
*.png binary
*.ico binary

@ -1,14 +0,0 @@
---
language: go
sudo: false
go:
- '1.8'
- '1.9'
- '1.10'
go_import_path: gopkg.in/editorconfig/editorconfig-core-go.v1
install:
- make installdeps
script:
- make test

@ -1,25 +0,0 @@
PROJECT_ROOT_DIR := $(CURDIR)
SRC := editorconfig.go cmd/editorconfig/main.go
.PHONY: bin test test-go test-core submodule installdeps
test: test-go test-core
submodule:
git submodule update --init
installdeps:
go get -t ./...
editorconfig: $(SRC)
go build ./cmd/editorconfig
test-go:
go test -v
test-core: editorconfig
cd $(PROJECT_ROOT_DIR)/core-test && \
cmake -DEDITORCONFIG_CMD="$(PROJECT_ROOT_DIR)/editorconfig" .
# Temporarily disable core-test
# cd $(PROJECT_ROOT_DIR)/core-test && \
# ctest --output-on-failure .

@ -119,6 +119,8 @@ github.com/denisenkom/go-mssqldb/internal/decimal
github.com/denisenkom/go-mssqldb/internal/querytext github.com/denisenkom/go-mssqldb/internal/querytext
# github.com/dgrijalva/jwt-go v3.2.0+incompatible # github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/dgrijalva/jwt-go github.com/dgrijalva/jwt-go
# github.com/editorconfig/editorconfig-core-go/v2 v2.1.1
github.com/editorconfig/editorconfig-core-go/v2
# github.com/edsrzf/mmap-go v1.0.0 # github.com/edsrzf/mmap-go v1.0.0
github.com/edsrzf/mmap-go github.com/edsrzf/mmap-go
# github.com/emirpasic/gods v1.12.0 # github.com/emirpasic/gods v1.12.0
@ -537,8 +539,6 @@ google.golang.org/appengine/urlfetch
gopkg.in/alexcesaro/quotedprintable.v3 gopkg.in/alexcesaro/quotedprintable.v3
# gopkg.in/asn1-ber.v1 v1.0.0-20150924051756-4e86f4367175 # gopkg.in/asn1-ber.v1 v1.0.0-20150924051756-4e86f4367175
gopkg.in/asn1-ber.v1 gopkg.in/asn1-ber.v1
# gopkg.in/editorconfig/editorconfig-core-go.v1 v1.3.0
gopkg.in/editorconfig/editorconfig-core-go.v1
# gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df # gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
gopkg.in/gomail.v2 gopkg.in/gomail.v2
# gopkg.in/ini.v1 v1.48.0 # gopkg.in/ini.v1 v1.48.0

Loading…
Cancel
Save