Skip to content

Commit 4f63f28

Browse files
Rename scripts to build and add revive command as a new build tool command (#10942)
Co-authored-by: techknowlogick <[email protected]>
1 parent 4af7c47 commit 4f63f28

File tree

182 files changed

+15833
-1227
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

182 files changed

+15833
-1227
lines changed

.drone.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ steps:
339339
pull: default
340340
image: alpine:3.11
341341
commands:
342-
- ./scripts/update-locales.sh
342+
- ./build/update-locales.sh
343343

344344
- name: push
345345
pull: always

.gitattributes

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ conf/* linguist-vendored
66
docker/* linguist-vendored
77
options/* linguist-vendored
88
public/* linguist-vendored
9-
scripts/* linguist-vendored
9+
build/* linguist-vendored
1010
templates/* linguist-vendored

Makefile

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ TAGS ?=
8080
TAGS_SPLIT := $(subst $(COMMA), ,$(TAGS))
8181
TAGS_EVIDENCE := $(MAKE_EVIDENCE_DIR)/tags
8282

83-
GO_DIRS := cmd integrations models modules routers scripts services vendor
83+
GO_DIRS := cmd integrations models modules routers build services vendor
8484
GO_SOURCES := $(wildcard *.go)
8585
GO_SOURCES += $(shell find $(GO_DIRS) -type f -name "*.go" -not -path modules/options/bindata.go -not -path modules/public/bindata.go -not -path modules/templates/bindata.go)
8686

@@ -234,10 +234,7 @@ errcheck:
234234

235235
.PHONY: revive
236236
revive:
237-
@hash revive > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
238-
$(GO) get -u github.com/mgechev/revive; \
239-
fi
240-
revive -config .revive.toml -exclude=./vendor/... ./... || exit 1
237+
GO111MODULE=on $(GO) run -mod=vendor build/lint.go -config .revive.toml -exclude=./vendor/... ./... || exit 1
241238

242239
.PHONY: misspell-check
243240
misspell-check:
File renamed without changes.
File renamed without changes.
File renamed without changes.

build/lint.go

Lines changed: 325 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,325 @@
1+
// Copyright 2020 The Gitea Authors. All rights reserved.
2+
// Copyright (c) 2018 Minko Gechev. All rights reserved.
3+
// Use of this source code is governed by a MIT-style
4+
// license that can be found in the LICENSE file.
5+
6+
// +build ignore
7+
8+
package main
9+
10+
import (
11+
"flag"
12+
"fmt"
13+
"io/ioutil"
14+
"os"
15+
"path/filepath"
16+
"strings"
17+
18+
"github.com/BurntSushi/toml"
19+
"github.com/mgechev/dots"
20+
"github.com/mgechev/revive/formatter"
21+
"github.com/mgechev/revive/lint"
22+
"github.com/mgechev/revive/rule"
23+
"github.com/mitchellh/go-homedir"
24+
)
25+
26+
func fail(err string) {
27+
fmt.Fprintln(os.Stderr, err)
28+
os.Exit(1)
29+
}
30+
31+
var defaultRules = []lint.Rule{
32+
&rule.VarDeclarationsRule{},
33+
&rule.PackageCommentsRule{},
34+
&rule.DotImportsRule{},
35+
&rule.BlankImportsRule{},
36+
&rule.ExportedRule{},
37+
&rule.VarNamingRule{},
38+
&rule.IndentErrorFlowRule{},
39+
&rule.IfReturnRule{},
40+
&rule.RangeRule{},
41+
&rule.ErrorfRule{},
42+
&rule.ErrorNamingRule{},
43+
&rule.ErrorStringsRule{},
44+
&rule.ReceiverNamingRule{},
45+
&rule.IncrementDecrementRule{},
46+
&rule.ErrorReturnRule{},
47+
&rule.UnexportedReturnRule{},
48+
&rule.TimeNamingRule{},
49+
&rule.ContextKeysType{},
50+
&rule.ContextAsArgumentRule{},
51+
}
52+
53+
var allRules = append([]lint.Rule{
54+
&rule.ArgumentsLimitRule{},
55+
&rule.CyclomaticRule{},
56+
&rule.FileHeaderRule{},
57+
&rule.EmptyBlockRule{},
58+
&rule.SuperfluousElseRule{},
59+
&rule.ConfusingNamingRule{},
60+
&rule.GetReturnRule{},
61+
&rule.ModifiesParamRule{},
62+
&rule.ConfusingResultsRule{},
63+
&rule.DeepExitRule{},
64+
&rule.UnusedParamRule{},
65+
&rule.UnreachableCodeRule{},
66+
&rule.AddConstantRule{},
67+
&rule.FlagParamRule{},
68+
&rule.UnnecessaryStmtRule{},
69+
&rule.StructTagRule{},
70+
&rule.ModifiesValRecRule{},
71+
&rule.ConstantLogicalExprRule{},
72+
&rule.BoolLiteralRule{},
73+
&rule.RedefinesBuiltinIDRule{},
74+
&rule.ImportsBlacklistRule{},
75+
&rule.FunctionResultsLimitRule{},
76+
&rule.MaxPublicStructsRule{},
77+
&rule.RangeValInClosureRule{},
78+
&rule.RangeValAddress{},
79+
&rule.WaitGroupByValueRule{},
80+
&rule.AtomicRule{},
81+
&rule.EmptyLinesRule{},
82+
&rule.LineLengthLimitRule{},
83+
&rule.CallToGCRule{},
84+
&rule.DuplicatedImportsRule{},
85+
&rule.ImportShadowingRule{},
86+
&rule.BareReturnRule{},
87+
&rule.UnusedReceiverRule{},
88+
&rule.UnhandledErrorRule{},
89+
&rule.CognitiveComplexityRule{},
90+
&rule.StringOfIntRule{},
91+
}, defaultRules...)
92+
93+
var allFormatters = []lint.Formatter{
94+
&formatter.Stylish{},
95+
&formatter.Friendly{},
96+
&formatter.JSON{},
97+
&formatter.NDJSON{},
98+
&formatter.Default{},
99+
&formatter.Unix{},
100+
&formatter.Checkstyle{},
101+
&formatter.Plain{},
102+
}
103+
104+
func getFormatters() map[string]lint.Formatter {
105+
result := map[string]lint.Formatter{}
106+
for _, f := range allFormatters {
107+
result[f.Name()] = f
108+
}
109+
return result
110+
}
111+
112+
func getLintingRules(config *lint.Config) []lint.Rule {
113+
rulesMap := map[string]lint.Rule{}
114+
for _, r := range allRules {
115+
rulesMap[r.Name()] = r
116+
}
117+
118+
lintingRules := []lint.Rule{}
119+
for name := range config.Rules {
120+
rule, ok := rulesMap[name]
121+
if !ok {
122+
fail("cannot find rule: " + name)
123+
}
124+
lintingRules = append(lintingRules, rule)
125+
}
126+
127+
return lintingRules
128+
}
129+
130+
func parseConfig(path string) *lint.Config {
131+
config := &lint.Config{}
132+
file, err := ioutil.ReadFile(path)
133+
if err != nil {
134+
fail("cannot read the config file")
135+
}
136+
_, err = toml.Decode(string(file), config)
137+
if err != nil {
138+
fail("cannot parse the config file: " + err.Error())
139+
}
140+
return config
141+
}
142+
143+
func normalizeConfig(config *lint.Config) {
144+
if config.Confidence == 0 {
145+
config.Confidence = 0.8
146+
}
147+
severity := config.Severity
148+
if severity != "" {
149+
for k, v := range config.Rules {
150+
if v.Severity == "" {
151+
v.Severity = severity
152+
}
153+
config.Rules[k] = v
154+
}
155+
for k, v := range config.Directives {
156+
if v.Severity == "" {
157+
v.Severity = severity
158+
}
159+
config.Directives[k] = v
160+
}
161+
}
162+
}
163+
164+
func getConfig() *lint.Config {
165+
config := defaultConfig()
166+
if configPath != "" {
167+
config = parseConfig(configPath)
168+
}
169+
normalizeConfig(config)
170+
return config
171+
}
172+
173+
func getFormatter() lint.Formatter {
174+
formatters := getFormatters()
175+
formatter := formatters["default"]
176+
if formatterName != "" {
177+
f, ok := formatters[formatterName]
178+
if !ok {
179+
fail("unknown formatter " + formatterName)
180+
}
181+
formatter = f
182+
}
183+
return formatter
184+
}
185+
186+
func buildDefaultConfigPath() string {
187+
var result string
188+
if homeDir, err := homedir.Dir(); err == nil {
189+
result = filepath.Join(homeDir, "revive.toml")
190+
if _, err := os.Stat(result); err != nil {
191+
result = ""
192+
}
193+
}
194+
195+
return result
196+
}
197+
198+
func defaultConfig() *lint.Config {
199+
defaultConfig := lint.Config{
200+
Confidence: 0.0,
201+
Severity: lint.SeverityWarning,
202+
Rules: map[string]lint.RuleConfig{},
203+
}
204+
for _, r := range defaultRules {
205+
defaultConfig.Rules[r.Name()] = lint.RuleConfig{}
206+
}
207+
return &defaultConfig
208+
}
209+
210+
func normalizeSplit(strs []string) []string {
211+
res := []string{}
212+
for _, s := range strs {
213+
t := strings.Trim(s, " \t")
214+
if len(t) > 0 {
215+
res = append(res, t)
216+
}
217+
}
218+
return res
219+
}
220+
221+
func getPackages() [][]string {
222+
globs := normalizeSplit(flag.Args())
223+
if len(globs) == 0 {
224+
globs = append(globs, ".")
225+
}
226+
227+
packages, err := dots.ResolvePackages(globs, normalizeSplit(excludePaths))
228+
if err != nil {
229+
fail(err.Error())
230+
}
231+
232+
return packages
233+
}
234+
235+
type arrayFlags []string
236+
237+
func (i *arrayFlags) String() string {
238+
return strings.Join([]string(*i), " ")
239+
}
240+
241+
func (i *arrayFlags) Set(value string) error {
242+
*i = append(*i, value)
243+
return nil
244+
}
245+
246+
var configPath string
247+
var excludePaths arrayFlags
248+
var formatterName string
249+
var help bool
250+
251+
var originalUsage = flag.Usage
252+
253+
func init() {
254+
flag.Usage = func() {
255+
originalUsage()
256+
}
257+
// command line help strings
258+
const (
259+
configUsage = "path to the configuration TOML file, defaults to $HOME/revive.toml, if present (i.e. -config myconf.toml)"
260+
excludeUsage = "list of globs which specify files to be excluded (i.e. -exclude foo/...)"
261+
formatterUsage = "formatter to be used for the output (i.e. -formatter stylish)"
262+
)
263+
264+
defaultConfigPath := buildDefaultConfigPath()
265+
266+
flag.StringVar(&configPath, "config", defaultConfigPath, configUsage)
267+
flag.Var(&excludePaths, "exclude", excludeUsage)
268+
flag.StringVar(&formatterName, "formatter", "", formatterUsage)
269+
flag.Parse()
270+
}
271+
272+
func main() {
273+
config := getConfig()
274+
formatter := getFormatter()
275+
packages := getPackages()
276+
277+
revive := lint.New(func(file string) ([]byte, error) {
278+
return ioutil.ReadFile(file)
279+
})
280+
281+
lintingRules := getLintingRules(config)
282+
283+
failures, err := revive.Lint(packages, lintingRules, *config)
284+
if err != nil {
285+
fail(err.Error())
286+
}
287+
288+
formatChan := make(chan lint.Failure)
289+
exitChan := make(chan bool)
290+
291+
var output string
292+
go (func() {
293+
output, err = formatter.Format(formatChan, *config)
294+
if err != nil {
295+
fail(err.Error())
296+
}
297+
exitChan <- true
298+
})()
299+
300+
exitCode := 0
301+
for f := range failures {
302+
if f.Confidence < config.Confidence {
303+
continue
304+
}
305+
if exitCode == 0 {
306+
exitCode = config.WarningCode
307+
}
308+
if c, ok := config.Rules[f.RuleName]; ok && c.Severity == lint.SeverityError {
309+
exitCode = config.ErrorCode
310+
}
311+
if c, ok := config.Directives[f.RuleName]; ok && c.Severity == lint.SeverityError {
312+
exitCode = config.ErrorCode
313+
}
314+
315+
formatChan <- f
316+
}
317+
318+
close(formatChan)
319+
<-exitChan
320+
if output != "" {
321+
fmt.Println(output)
322+
}
323+
324+
os.Exit(exitCode)
325+
}
File renamed without changes.

build/vendor.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Copyright 2020 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package build
6+
7+
import (
8+
// for lint
9+
_ "github.com/BurntSushi/toml"
10+
_ "github.com/mgechev/dots"
11+
_ "github.com/mgechev/revive/formatter"
12+
_ "github.com/mgechev/revive/lint"
13+
_ "github.com/mgechev/revive/rule"
14+
_ "github.com/mitchellh/go-homedir"
15+
16+
// for embed
17+
_ "github.com/shurcooL/vfsgen"
18+
)

0 commit comments

Comments
 (0)