Skip to content

Commit c0a9b80

Browse files
Crocmagnonldez
authored andcommitted
feat: add arangolint linter
1 parent 5a945fd commit c0a9b80

11 files changed

+188
-0
lines changed

.golangci.next.reference.yml

Lines changed: 2 additions & 0 deletions
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
@@ -125,6 +126,7 @@ linters:
125126
# Disable specific linter.
126127
# https://golangci-lint.run/usage/linters/#disabled-by-default
127128
disable:
129+
- arangolint
128130
- asasalint
129131
- asciicheck
130132
- bidichk

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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.3
1415
github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24
1516
github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1
1617
github.com/OpenPeeDeeP/depguard/v2 v2.2.1

go.sum

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

jsonschema/golangci.next.jsonschema.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,7 @@
718718
"anyOf": [
719719
{
720720
"enum": [
721+
"arangolint",
721722
"asasalint",
722723
"asciicheck",
723724
"bidichk",
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
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+
return goanalysis.NewLinter(
14+
a.Name,
15+
a.Doc,
16+
[]*analysis.Analyzer{a},
17+
nil,
18+
).WithLoadMode(goanalysis.LoadModeTypesInfo)
19+
}
Lines changed: 11 additions & 0 deletions
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/v2/test/testshared/integration"
7+
)
8+
9+
func TestFromTestdata(t *testing.T) {
10+
integration.RunTestdata(t)
11+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
//golangcitest:args -Earangolint
2+
package testdata
3+
4+
import (
5+
"context"
6+
7+
"github.com/arangodb/go-driver/v2/arangodb"
8+
)
9+
10+
func example() {
11+
ctx := context.Background()
12+
arangoClient := arangodb.NewClient(nil)
13+
db, _ := arangoClient.GetDatabase(ctx, "name", nil)
14+
15+
// direct nil
16+
db.BeginTransaction(ctx, arangodb.TransactionCollections{}, nil) // want "missing AllowImplicit option"
17+
trx, _ := db.BeginTransaction(ctx, arangodb.TransactionCollections{}, nil) // want "missing AllowImplicit option"
18+
_ = trx
19+
20+
// direct missing
21+
db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{LockTimeout: 0}) // want "missing AllowImplicit option"
22+
trx, _ = db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{LockTimeout: 0}) // want "missing AllowImplicit option"
23+
24+
// direct false
25+
db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{AllowImplicit: false})
26+
trx, _ = db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{AllowImplicit: false})
27+
28+
// direct true
29+
db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{AllowImplicit: true})
30+
trx, _ = db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{AllowImplicit: true})
31+
32+
// direct with other fields
33+
db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{AllowImplicit: true, LockTimeout: 0})
34+
trx, _ = db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{AllowImplicit: true, LockTimeout: 0})
35+
36+
// indirect no pointer
37+
// options := arangodb.BeginTransactionOptions{LockTimeout: 0}
38+
// db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &options) // w@nt "missing AllowImplicit option"
39+
// options.AllowImplicit = true
40+
// db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &options)
41+
//
42+
// indirect pointer
43+
// optns := &arangodb.BeginTransactionOptions{LockTimeout: 0}
44+
// db.BeginTransaction(ctx, arangodb.TransactionCollections{}, optns) // w@nt "missing AllowImplicit option"
45+
// options.AllowImplicit = true
46+
// db.BeginTransaction(ctx, arangodb.TransactionCollections{}, optns)
47+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
//golangcitest:args -Earangolint
2+
package testdata
3+
4+
/*
5+
#include <stdio.h>
6+
#include <stdlib.h>
7+
8+
void myprint(char* s) {
9+
printf("%d\n", s);
10+
}
11+
*/
12+
import "C"
13+
14+
import (
15+
"context"
16+
"unsafe"
17+
18+
"github.com/arangodb/go-driver/v2/arangodb"
19+
)
20+
21+
func _() {
22+
cs := C.CString("Hello from stdio\n")
23+
C.myprint(cs)
24+
C.free(unsafe.Pointer(cs))
25+
}
26+
27+
func _() {
28+
ctx := context.Background()
29+
arangoClient := arangodb.NewClient(nil)
30+
db, _ := arangoClient.GetDatabase(ctx, "name", nil)
31+
trx, _ := db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{LockTimeout: 0}) // want "missing AllowImplicit option"
32+
db.BeginTransaction(ctx, arangodb.TransactionCollections{}, &arangodb.BeginTransactionOptions{AllowImplicit: false})
33+
_ = trx
34+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module testdata
2+
3+
go 1.23.0
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+
)

pkg/golinters/arangolint/testdata/go.sum

Lines changed: 46 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/lint/lintersdb/builder_linter.go

Lines changed: 6 additions & 0 deletions
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"
@@ -135,6 +136,11 @@ func (LinterBuilder) Build(cfg *config.Config) ([]*linter.Config, error) {
135136
// The linters are sorted in the alphabetical order (case-insensitive).
136137
// When a new linter is added the version in `WithSince(...)` must be the next minor version of golangci-lint.
137138
return []*linter.Config{
139+
linter.NewConfig(arangolint.New()).
140+
WithSince("v2.1.0").
141+
WithLoadForGoAnalysis().
142+
WithURL("https://github.com/Crocmagnon/arangolint"),
143+
138144
linter.NewConfig(asasalint.New(&cfg.Linters.Settings.Asasalint)).
139145
WithSince("v1.47.0").
140146
WithLoadForGoAnalysis().

0 commit comments

Comments
 (0)