12 Commits

8 changed files with 86 additions and 69 deletions

View File

@@ -7,11 +7,14 @@ jobs:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: golangci-lint
uses: golangci/golangci-lint-action@v2
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
version: v1.37
go-version: 1.15
- name: golangci-lint
uses: golangci/golangci-lint-action@v3
with:
version: v1.50
env:
VERBOSE: "true"
@@ -19,11 +22,11 @@ jobs:
name: Tidy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
go-version: 1.15
- uses: actions/cache@v2
- uses: actions/cache@v3
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
@@ -37,11 +40,11 @@ jobs:
runs-on: ubuntu-latest
if: github.ref != 'refs/heads/main'
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
go-version: 1.15
- uses: actions/cache@v2
- uses: actions/cache@v3
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
@@ -67,18 +70,18 @@ jobs:
name: Coverage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
go-version: 1.15
- uses: actions/cache@v2
- uses: actions/cache@v3
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Publish coverage
uses: paambaati/codeclimate-action@v2.7.4
uses: paambaati/codeclimate-action@v3.2.0
env:
VERBOSE: "true"
GOMAXPROCS: 4
@@ -93,11 +96,11 @@ jobs:
name: Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
go-version: 1.15
- uses: actions/cache@v2
- uses: actions/cache@v3
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
@@ -113,11 +116,11 @@ jobs:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
go-version: 1.15
- uses: actions/cache@v2
- uses: actions/cache@v3
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
@@ -134,6 +137,16 @@ jobs:
with:
tool: "go"
output-file-path: output.txt
github-token: ${{ secrets.GH_PUSH_TOKEN }}
github-token: ${{ secrets.GITHUB_TOKEN }}
comment-on-alert: 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:
min-confidence: 0
govet:
check-shadowing: true
enable-all: true
disable:
- fieldalignment
lll:
line-length: 80
tab-width: 4
@@ -21,10 +22,10 @@ linters:
disable-all: true
enable:
- bodyclose
- deadcode
- depguard
- dupl
- errcheck
- exportloopref
- funlen
- gochecknoinits
- goconst
@@ -32,7 +33,6 @@ linters:
- gocyclo
- goerr113
- goimports
- golint
- goprintffuncname
- gosec
- gosimple
@@ -44,19 +44,15 @@ linters:
- nlreturn
- noctx
- nolintlint
- scopelint
- revive
- sqlclosecheck
- staticcheck
- structcheck
- typecheck
- unconvert
- unused
- varcheck
- whitespace
issues:
include:
# - EXC0002 # disable excluding of issues about comments from golint
exclude:
- Using the variable on range scope `tt` 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
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)

View File

@@ -48,7 +48,7 @@ endef
$(eval $(call tool,godoc,golang.org/x/tools/cmd/godoc))
$(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
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 (
"fmt"
"io"
"strings"
)
const (
@@ -20,50 +21,33 @@ func Bytes(s string) []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
min := 99999999999
count := 0
for i := 0; i < len(lfs); i++ {
offset := lfs[i]
end := len(s) - 1
if i+1 < len(lfs) {
end = lfs[i+1]
}
lfs := make([]int, 0, strings.Count(s, "\n"))
if s[0] != lf {
lfs = append(lfs, -1)
}
if offset+1 >= end {
continue
}
indent := 0
lineSeek:
for n := offset + 1; n < end && indent < min; n++ {
switch s[n] {
indent := 0
for i := 0; i < len(s); i++ {
if s[i] == lf {
lfs = append(lfs, i)
indent = 0
} else if indent < min {
switch s[i] {
case spc, tab:
indent++
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

View File

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