Skip to content

Commit 51cc97e

Browse files
committed
feat: add arangolint linter
1 parent 2691aac commit 51cc97e

File tree

11 files changed

+180
-12
lines changed

11 files changed

+180
-12
lines changed

Diff for: .golangci.next.reference.yml

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ linters:
1111
# Enable specific linter
1212
# https://golangci-lint.run/usage/linters/#enabled-by-default
1313
enable:
14+
- arangolint
1415
- asasalint
1516
- asciicheck
1617
- bidichk
@@ -127,6 +128,7 @@ linters:
127128
# Disable specific linter
128129
# https://golangci-lint.run/usage/linters/#disabled-by-default
129130
disable:
131+
- arangolint
130132
- asasalint
131133
- asciicheck
132134
- bidichk

Diff for: go.mod

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/golangci/golangci-lint
22

3-
go 1.23.0
3+
go 1.24.2
44

55
require (
66
4d63.com/gocheckcompilerdirectives v1.3.0
@@ -11,6 +11,7 @@ require (
1111
github.com/Antonboom/nilnil v1.0.1
1212
github.com/Antonboom/testifylint v1.5.2
1313
github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c
14+
github.com/Crocmagnon/arangolint v0.0.0-20250411092530-82b47fd0a468
1415
github.com/Crocmagnon/fatcontext v0.7.1
1516
github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24
1617
github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1
@@ -126,8 +127,8 @@ require (
126127
go-simpler.org/sloglint v0.9.0
127128
go.uber.org/automaxprocs v1.6.0
128129
golang.org/x/mod v0.24.0
129-
golang.org/x/sys v0.31.0
130-
golang.org/x/tools v0.31.0
130+
golang.org/x/sys v0.32.0
131+
golang.org/x/tools v0.32.0
131132
gopkg.in/yaml.v3 v3.0.1
132133
honnef.co/go/tools v0.6.1
133134
mvdan.cc/gofumpt v0.7.0
@@ -196,7 +197,7 @@ require (
196197
go.uber.org/zap v1.24.0 // indirect
197198
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect
198199
golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac // indirect
199-
golang.org/x/sync v0.12.0 // indirect
200+
golang.org/x/sync v0.13.0 // indirect
200201
golang.org/x/text v0.22.0 // indirect
201202
google.golang.org/protobuf v1.36.5 // indirect
202203
gopkg.in/ini.v1 v1.67.0 // indirect

Diff for: go.sum

+10-8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: jsonschema/golangci.next.jsonschema.json

+1
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,7 @@
330330
"anyOf": [
331331
{
332332
"enum": [
333+
"arangolint",
333334
"asasalint",
334335
"asciicheck",
335336
"bidichk",

Diff for: pkg/golinters/arangolint/arangolint.go

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package arangolint
2+
3+
import (
4+
"github.com/Crocmagnon/arangolint/pkg/analyzer"
5+
"golang.org/x/tools/go/analysis"
6+
7+
"github.com/golangci/golangci-lint/pkg/goanalysis"
8+
)
9+
10+
func New() *goanalysis.Linter {
11+
a := analyzer.NewAnalyzer()
12+
13+
cfg := map[string]map[string]any{}
14+
15+
return goanalysis.NewLinter(
16+
a.Name,
17+
a.Doc,
18+
[]*analysis.Analyzer{a},
19+
cfg,
20+
).WithLoadMode(goanalysis.LoadModeTypesInfo)
21+
}
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package arangolint
2+
3+
import (
4+
"testing"
5+
6+
"github.com/golangci/golangci-lint/test/testshared/integration"
7+
)
8+
9+
func TestFromTestdata(t *testing.T) {
10+
integration.RunTestdata(t)
11+
}

Diff for: pkg/golinters/arangolint/testdata/arangolint.go

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package testdata
2+
3+
import (
4+
"context"
5+
"github.com/arangodb/go-driver/v2/arangodb"
6+
)
7+
8+
func example() {
9+
ctx := context.Background()
10+
arangoClient := arangodb.NewClient(nil)
11+
db, _ := arangoClient.GetDatabase(ctx, "name", nil)
12+
13+
// direct nil
14+
db.BeginTransaction(ctx, arangodb.TransactionCollections{}, nil) // want "missing AllowImplicit option"
15+
trx, _ := db.BeginTransaction(ctx, arangodb.TransactionCollections{}, nil) // want "missing AllowImplicit option"
16+
_ = trx
17+
18+
// direct missing
19+
db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{LockTimeout: 0}) // want "missing AllowImplicit option"
20+
trx, _ = db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{LockTimeout: 0}) // want "missing AllowImplicit option"
21+
22+
// direct false
23+
db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{AllowImplicit: false})
24+
trx, _ = db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{AllowImplicit: false})
25+
26+
// direct true
27+
db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{AllowImplicit: true})
28+
trx, _ = db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{AllowImplicit: true})
29+
30+
// direct with other fields
31+
db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{AllowImplicit: true, LockTimeout: 0})
32+
trx, _ = db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{AllowImplicit: true, LockTimeout: 0})
33+
34+
// indirect no pointer
35+
//options := arangodb.BeginTransactionOptions{LockTimeout: 0}
36+
//db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &options) // w@nt "missing AllowImplicit option"
37+
//options.AllowImplicit = true
38+
//db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &options)
39+
//
40+
// indirect pointer
41+
//optns := &arangodb.BeginTransactionOptions{LockTimeout: 0}
42+
//db.BeginTransaction(ctx, arangodb.TransactionCollections{}, optns) // w@nt "missing AllowImplicit option"
43+
//options.AllowImplicit = true
44+
//db.BeginTransaction(ctx, arangodb.TransactionCollections{}, optns)
45+
}

Diff for: pkg/golinters/arangolint/testdata/arangolint_cgo.go

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package testdata
2+
3+
/*
4+
#include <stdio.h>
5+
#include <stdlib.h>
6+
7+
void myprint(char* s) {
8+
printf("%d\n", s);
9+
}
10+
*/
11+
import "C"
12+
13+
import (
14+
"context"
15+
"github.com/arangodb/go-driver/v2/arangodb"
16+
"unsafe"
17+
)
18+
19+
func _() {
20+
cs := C.CString("Hello from stdio\n")
21+
C.myprint(cs)
22+
C.free(unsafe.Pointer(cs))
23+
}
24+
25+
func _() {
26+
ctx := context.Background()
27+
arangoClient := arangodb.NewClient(nil)
28+
db, _ := arangoClient.GetDatabase(ctx, "name", nil)
29+
trx, _ := db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{LockTimeout: 0}) // want "missing AllowImplicit option"
30+
db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{AllowImplicit: false})
31+
_ = trx
32+
}

Diff for: pkg/golinters/arangolint/testdata/go.mod

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module testdata
2+
3+
go 1.24.2
4+
5+
require github.com/arangodb/go-driver/v2 v2.1.3
6+
7+
require (
8+
github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e // indirect
9+
github.com/dchest/siphash v1.2.3 // indirect
10+
github.com/google/uuid v1.6.0 // indirect
11+
github.com/kkdai/maglev v0.2.0 // indirect
12+
github.com/mattn/go-colorable v0.1.13 // indirect
13+
github.com/mattn/go-isatty v0.0.20 // indirect
14+
github.com/pkg/errors v0.9.1 // indirect
15+
github.com/rs/zerolog v1.33.0 // indirect
16+
golang.org/x/net v0.33.0 // indirect
17+
golang.org/x/sys v0.28.0 // indirect
18+
golang.org/x/text v0.21.0 // indirect
19+
)

Diff for: pkg/golinters/arangolint/testdata/go.sum

+27
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: pkg/lint/lintersdb/builder_linter.go

+7
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package lintersdb
33
import (
44
"github.com/golangci/golangci-lint/pkg/config"
55
"github.com/golangci/golangci-lint/pkg/golinters"
6+
"github.com/golangci/golangci-lint/pkg/golinters/arangolint"
67
"github.com/golangci/golangci-lint/pkg/golinters/asasalint"
78
"github.com/golangci/golangci-lint/pkg/golinters/asciicheck"
89
"github.com/golangci/golangci-lint/pkg/golinters/bidichk"
@@ -136,6 +137,12 @@ func (LinterBuilder) Build(cfg *config.Config) ([]*linter.Config, error) {
136137
// The linters are sorted in the alphabetical order (case-insensitive).
137138
// When a new linter is added the version in `WithSince(...)` must be the next minor version of golangci-lint.
138139
return []*linter.Config{
140+
linter.NewConfig(arangolint.New()).
141+
WithSince("v2.1.0").
142+
WithPresets(linter.PresetBugs).
143+
WithLoadForGoAnalysis().
144+
WithURL("https://github.com/Crocmagnon/arangolint"),
145+
139146
linter.NewConfig(asasalint.New(&cfg.LintersSettings.Asasalint)).
140147
WithSince("v1.47.0").
141148
WithPresets(linter.PresetBugs).

0 commit comments

Comments
 (0)