12 Commits

8 changed files with 86 additions and 69 deletions

View File

@@ -7,11 +7,14 @@ jobs:
name: Lint name: Lint
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- name: golangci-lint - uses: actions/setup-go@v3
uses: golangci/golangci-lint-action@v2
with: with:
version: v1.37 go-version: 1.15
- name: golangci-lint
uses: golangci/golangci-lint-action@v3
with:
version: v1.50
env: env:
VERBOSE: "true" VERBOSE: "true"
@@ -19,11 +22,11 @@ jobs:
name: Tidy name: Tidy
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- uses: actions/setup-go@v2 - uses: actions/setup-go@v3
with: with:
go-version: 1.15 go-version: 1.15
- uses: actions/cache@v2 - uses: actions/cache@v3
with: with:
path: ~/go/pkg/mod path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
@@ -37,11 +40,11 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: github.ref != 'refs/heads/main' if: github.ref != 'refs/heads/main'
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- uses: actions/setup-go@v2 - uses: actions/setup-go@v3
with: with:
go-version: 1.15 go-version: 1.15
- uses: actions/cache@v2 - uses: actions/cache@v3
with: with:
path: ~/go/pkg/mod path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
@@ -67,18 +70,18 @@ jobs:
name: Coverage name: Coverage
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- uses: actions/setup-go@v2 - uses: actions/setup-go@v3
with: with:
go-version: 1.15 go-version: 1.15
- uses: actions/cache@v2 - uses: actions/cache@v3
with: with:
path: ~/go/pkg/mod path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: | restore-keys: |
${{ runner.os }}-go- ${{ runner.os }}-go-
- name: Publish coverage - name: Publish coverage
uses: paambaati/codeclimate-action@v2.7.4 uses: paambaati/codeclimate-action@v3.2.0
env: env:
VERBOSE: "true" VERBOSE: "true"
GOMAXPROCS: 4 GOMAXPROCS: 4
@@ -93,11 +96,11 @@ jobs:
name: Test name: Test
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- uses: actions/setup-go@v2 - uses: actions/setup-go@v3
with: with:
go-version: 1.15 go-version: 1.15
- uses: actions/cache@v2 - uses: actions/cache@v3
with: with:
path: ~/go/pkg/mod path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
@@ -113,11 +116,11 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' if: github.ref == 'refs/heads/main'
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- uses: actions/setup-go@v2 - uses: actions/setup-go@v3
with: with:
go-version: 1.15 go-version: 1.15
- uses: actions/cache@v2 - uses: actions/cache@v3
with: with:
path: ~/go/pkg/mod path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
@@ -134,6 +137,16 @@ jobs:
with: with:
tool: "go" tool: "go"
output-file-path: output.txt output-file-path: output.txt
github-token: ${{ secrets.GH_PUSH_TOKEN }} github-token: ${{ secrets.GITHUB_TOKEN }}
comment-on-alert: true comment-on-alert: true
auto-push: true auto-push: true
release-please:
needs: [lint, tidy, test]
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: google-github-actions/release-please-action@v3
id: release-please
with:
command: manifest

View File

@@ -7,8 +7,9 @@ linters-settings:
golint: golint:
min-confidence: 0 min-confidence: 0
govet: govet:
check-shadowing: true
enable-all: true enable-all: true
disable:
- fieldalignment
lll: lll:
line-length: 80 line-length: 80
tab-width: 4 tab-width: 4
@@ -21,10 +22,10 @@ linters:
disable-all: true disable-all: true
enable: enable:
- bodyclose - bodyclose
- deadcode
- depguard - depguard
- dupl - dupl
- errcheck - errcheck
- exportloopref
- funlen - funlen
- gochecknoinits - gochecknoinits
- goconst - goconst
@@ -32,7 +33,6 @@ linters:
- gocyclo - gocyclo
- goerr113 - goerr113
- goimports - goimports
- golint
- goprintffuncname - goprintffuncname
- gosec - gosec
- gosimple - gosimple
@@ -44,19 +44,15 @@ linters:
- nlreturn - nlreturn
- noctx - noctx
- nolintlint - nolintlint
- scopelint - revive
- sqlclosecheck - sqlclosecheck
- staticcheck - staticcheck
- structcheck
- typecheck - typecheck
- unconvert - unconvert
- unused - unused
- varcheck
- whitespace - whitespace
issues: issues:
include:
# - EXC0002 # disable excluding of issues about comments from golint
exclude: exclude:
- Using the variable on range scope `tt` in function literal - Using the variable on range scope `tt` in function literal
- Using the variable on range scope `tc` in function literal - Using the variable on range scope `tc` in function literal

View File

@@ -0,0 +1,3 @@
{
".": "1.1.1"
}

View File

@@ -1,6 +1,11 @@
# Changelog # Changelog
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. ## [1.1.1](https://github.com/jimeh/undent/compare/v1.1.0...v1.1.1) (2022-12-05)
### Performance Improvements
* simplify line-feed and minimum indentation loops ([178d9b5](https://github.com/jimeh/undent/commit/178d9b5bf6dd090a406229e862c5da1ba26cbf5d))
## [1.1.0](https://github.com/jimeh/undent/compare/v1.0.2...v1.1.0) (2021-02-22) ## [1.1.0](https://github.com/jimeh/undent/compare/v1.0.2...v1.1.0) (2021-02-22)

View File

@@ -48,7 +48,7 @@ endef
$(eval $(call tool,godoc,golang.org/x/tools/cmd/godoc)) $(eval $(call tool,godoc,golang.org/x/tools/cmd/godoc))
$(eval $(call tool,gofumports,mvdan.cc/gofumpt/gofumports)) $(eval $(call tool,gofumports,mvdan.cc/gofumpt/gofumports))
$(eval $(call tool,golangci-lint,github.com/golangci/golangci-lint/cmd/golangci-lint@v1.37)) $(eval $(call tool,golangci-lint,github.com/golangci/golangci-lint/cmd/golangci-lint@v1.50))
.PHONY: tools .PHONY: tools
tools: $(TOOLS) tools: $(TOOLS)

View File

@@ -0,0 +1,16 @@
{
"bootstrap-sha": "369ec87dddfae22534693f8cf3be6cb85bc46f9d",
"last-release-sha": "369ec87dddfae22534693f8cf3be6cb85bc46f9d",
"release-type": "go",
"bump-minor-pre-major": true,
"bump-patch-for-minor-pre-major": true,
"packages": {
".": {
"changelog-path": "CHANGELOG.md",
"draft": false,
"prerelease": false,
"extra-files": []
}
},
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json"
}

View File

@@ -5,6 +5,7 @@ package undent
import ( import (
"fmt" "fmt"
"io" "io"
"strings"
) )
const ( const (
@@ -20,50 +21,33 @@ func Bytes(s string) []byte {
return []byte{} return []byte{}
} }
// find line feeds
lfs := []int{}
if s[0] != lf {
lfs = append(lfs, -1)
}
for i := 0; i < len(s); i++ {
if s[i] == lf {
lfs = append(lfs, i)
}
}
// find smallest indent relative to each line-feed // find smallest indent relative to each line-feed
min := 99999999999 min := 99999999999
count := 0 count := 0
for i := 0; i < len(lfs); i++ { lfs := make([]int, 0, strings.Count(s, "\n"))
offset := lfs[i] if s[0] != lf {
end := len(s) - 1 lfs = append(lfs, -1)
if i+1 < len(lfs) { }
end = lfs[i+1]
}
if offset+1 >= end { indent := 0
continue for i := 0; i < len(s); i++ {
} if s[i] == lf {
lfs = append(lfs, i)
indent := 0 indent = 0
lineSeek: } else if indent < min {
for n := offset + 1; n < end && indent < min; n++ { switch s[i] {
switch s[n] {
case spc, tab: case spc, tab:
indent++ indent++
default: default:
break lineSeek if indent > 0 {
count++
}
if indent < min {
min = indent
}
} }
} }
if indent < min {
min = indent
}
if indent > 0 {
count++
}
} }
// extract each line without indentation // extract each line without indentation

View File

@@ -717,7 +717,7 @@ func TestPrint(t *testing.T) {
for _, tt := range stringTestCases { for _, tt := range stringTestCases {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
got, err := fakeio.Stdout().Do(func() { got, err := fakeio.Stdout().Do(func() {
Print(tt.s, 5, tt.s) _, _ = Print(tt.s, 5, tt.s)
}) })
require.NoError(t, err) require.NoError(t, err)
@@ -731,7 +731,7 @@ func TestPrintf(t *testing.T) {
for _, tt := range stringfTestCases { for _, tt := range stringfTestCases {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
got, err := fakeio.Stdout().Do(func() { got, err := fakeio.Stdout().Do(func() {
Printf(tt.s, tt.a...) _, _ = Printf(tt.s, tt.a...)
}) })
require.NoError(t, err) require.NoError(t, err)
@@ -746,7 +746,7 @@ func TestFprint(t *testing.T) {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
var buf bytes.Buffer var buf bytes.Buffer
Fprint(&buf, tt.s, 5, tt.s) _, _ = Fprint(&buf, tt.s, 5, tt.s)
got := buf.String() got := buf.String()
assert.IsType(t, "", got) assert.IsType(t, "", got)
@@ -760,7 +760,7 @@ func TestFprintf(t *testing.T) {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
var buf bytes.Buffer var buf bytes.Buffer
Fprintf(&buf, tt.s, tt.a...) _, _ = Fprintf(&buf, tt.s, tt.a...)
got := buf.String() got := buf.String()
assert.IsType(t, "", got) assert.IsType(t, "", got)