Skip to content

Commit ccb375d

Browse files
committed
feat: add arangolint linter
1 parent ec2da93 commit ccb375d

11 files changed

+171
-2
lines changed

Diff for: .golangci.next.reference.yml

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ linters:
1717
# Enable specific linter.
1818
# https://golangci-lint.run/usage/linters/#enabled-by-default
1919
enable:
20+
- arangolint
2021
- asasalint
2122
- asciicheck
2223
- bidichk
@@ -124,6 +125,7 @@ linters:
124125
# Disable specific linter.
125126
# https://golangci-lint.run/usage/linters/#disabled-by-default
126127
disable:
128+
- arangolint
127129
- asasalint
128130
- asciicheck
129131
- bidichk

Diff for: go.mod

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/golangci/golangci-lint/v2
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.1.0
1212
github.com/Antonboom/testifylint v1.6.1
1313
github.com/BurntSushi/toml v1.5.0
14+
github.com/Crocmagnon/arangolint v0.1.0
1415
github.com/Crocmagnon/fatcontext v0.7.2
1516
github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24
1617
github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1
@@ -48,6 +49,7 @@ require (
4849
github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32
4950
github.com/golangci/go-printf-func-name v0.1.0
5051
github.com/golangci/gofmt v0.0.0-20250106114630-d62b90e6713d
52+
github.com/golangci/golangci-lint v1.64.8
5153
github.com/golangci/golines v0.0.0-20250217134842-442fd0091d95
5254
github.com/golangci/misspell v0.6.0
5355
github.com/golangci/plugin-module-register v0.1.1
@@ -206,7 +208,6 @@ require (
206208
go.uber.org/atomic v1.7.0 // indirect
207209
go.uber.org/multierr v1.6.0 // indirect
208210
go.uber.org/zap v1.24.0 // indirect
209-
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect
210211
golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac // indirect
211212
golang.org/x/sync v0.13.0 // indirect
212213
golang.org/x/text v0.23.0 // indirect

Diff for: go.sum

+4
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
@@ -716,6 +716,7 @@
716716
"anyOf": [
717717
{
718718
"enum": [
719+
"arangolint",
719720
"asasalint",
720721
"asciicheck",
721722
"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/v2/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

+6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package lintersdb
33
import (
44
"github.com/golangci/golangci-lint/v2/pkg/config"
55
"github.com/golangci/golangci-lint/v2/pkg/golinters"
6+
"github.com/golangci/golangci-lint/v2/pkg/golinters/arangolint"
67
"github.com/golangci/golangci-lint/v2/pkg/golinters/asasalint"
78
"github.com/golangci/golangci-lint/v2/pkg/golinters/asciicheck"
89
"github.com/golangci/golangci-lint/v2/pkg/golinters/bidichk"
@@ -134,6 +135,11 @@ func (LinterBuilder) Build(cfg *config.Config) ([]*linter.Config, error) {
134135
// The linters are sorted in the alphabetical order (case-insensitive).
135136
// When a new linter is added the version in `WithSince(...)` must be the next minor version of golangci-lint.
136137
return []*linter.Config{
138+
linter.NewConfig(arangolint.New()).
139+
WithSince("v2.1.0").
140+
WithLoadForGoAnalysis().
141+
WithURL("https://github.com/Crocmagnon/arangolint"),
142+
137143
linter.NewConfig(asasalint.New(&cfg.Linters.Settings.Asasalint)).
138144
WithSince("v1.47.0").
139145
WithLoadForGoAnalysis().

0 commit comments

Comments
 (0)