Skip to content

Commit 0056db5

Browse files
Merge pull request #83 from sashamelentyev:feat/syslog
Add syslog.Priority
2 parents b13f455 + 04e2fd1 commit 0056db5

File tree

6 files changed

+228
-0
lines changed

6 files changed

+228
-0
lines changed

pkg/analyzer/analyzer.go

+37
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const (
2525
SQLIsolationLevelFlag = "sql-isolation-level"
2626
TLSSignatureSchemeFlag = "tls-signature-scheme"
2727
ConstantKindFlag = "constant-kind"
28+
SyslogPriorityFlag = "syslog-priority"
2829
)
2930

3031
// New returns new usestdlibvars analyzer.
@@ -51,6 +52,7 @@ func flags() flag.FlagSet {
5152
flags.Bool(SQLIsolationLevelFlag, false, "suggest the use of sql.LevelXX.String()")
5253
flags.Bool(TLSSignatureSchemeFlag, false, "suggest the use of tls.SignatureScheme.String()")
5354
flags.Bool(ConstantKindFlag, false, "suggest the use of constant.Kind.String()")
55+
flags.Bool(SyslogPriorityFlag, false, "suggest the use of syslog.Priority")
5456
return *flags
5557
}
5658

@@ -238,6 +240,33 @@ func funArgs(pass *analysis.Pass, x *ast.Ident, fun *ast.SelectorExpr, args []as
238240
checkHTTPMethod(pass, basicLit)
239241
}
240242
}
243+
case "syslog":
244+
switch fun.Sel.Name {
245+
case "New":
246+
if !lookupFlag(pass, SyslogPriorityFlag) {
247+
return
248+
}
249+
250+
if basicLit := getBasicLitFromArgs(args, 2, 0, token.INT); basicLit != nil {
251+
checkSyslogPriority(pass, basicLit)
252+
}
253+
case "Dial":
254+
if !lookupFlag(pass, SyslogPriorityFlag) {
255+
return
256+
}
257+
258+
if basicLit := getBasicLitFromArgs(args, 4, 2, token.INT); basicLit != nil {
259+
checkSyslogPriority(pass, basicLit)
260+
}
261+
case "NewLogger":
262+
if !lookupFlag(pass, SyslogPriorityFlag) {
263+
return
264+
}
265+
266+
if basicLit := getBasicLitFromArgs(args, 2, 0, token.INT); basicLit != nil {
267+
checkSyslogPriority(pass, basicLit)
268+
}
269+
}
241270
default:
242271
// w.WriteHeader(http.StatusOk)
243272
if fun.Sel.Name == "WriteHeader" {
@@ -470,6 +499,14 @@ func checkConstantKind(pass *analysis.Pass, basicLit *ast.BasicLit) {
470499
}
471500
}
472501

502+
func checkSyslogPriority(pass *analysis.Pass, basicLit *ast.BasicLit) {
503+
currentVal := getBasicLitValue(basicLit)
504+
505+
if newVal, ok := mapping.SyslogPriority[currentVal]; ok {
506+
report(pass, basicLit.Pos(), currentVal, newVal)
507+
}
508+
}
509+
473510
// getBasicLitFromArgs gets the *ast.BasicLit of a function argument.
474511
//
475512
// Arguments:

pkg/analyzer/analyzer_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ func TestUseStdlibVars(t *testing.T) {
2121
analyzer.SQLIsolationLevelFlag,
2222
analyzer.TLSSignatureSchemeFlag,
2323
analyzer.ConstantKindFlag,
24+
analyzer.SyslogPriorityFlag,
2425
} {
2526
if err := a.Flags.Set(flag, "true"); err != nil {
2627
t.Fatal(err)
@@ -36,6 +37,7 @@ func TestUseStdlibVars(t *testing.T) {
3637
"a/sql",
3738
"a/tls",
3839
"a/constant",
40+
"a/syslog",
3941
}
4042

4143
analysistest.Run(t, analysistest.TestData(), a, pkgs...)

pkg/analyzer/internal/gen.go

+6
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,12 @@ func main() {
107107
templateName: "test-template.go.tmpl",
108108
fileName: "pkg/analyzer/testdata/src/a/constant/kind.go",
109109
},
110+
{
111+
mapping: mapping.SyslogPriority,
112+
packageName: "syslog_test",
113+
templateName: "test-syslog.go.tmpl",
114+
fileName: "pkg/analyzer/testdata/src/a/syslog/priority.go",
115+
},
110116
}
111117

112118
for _, operation := range operations {

pkg/analyzer/internal/mapping/mapping.go

+33
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"crypto/tls"
66
"database/sql"
77
"go/constant"
8+
"log/syslog"
89
"net/http"
910
"net/rpc"
1011
"os"
@@ -202,3 +203,35 @@ var ConstantKind = map[string]string{
202203
constant.Float.String(): "constant.Float.String()",
203204
constant.Complex.String(): "constant.Complex.String()",
204205
}
206+
207+
var SyslogPriority = map[string]string{
208+
// strconv.Itoa(int(syslog.LOG_EMERG)): "syslog.LOG_EMERG",
209+
strconv.Itoa(int(syslog.LOG_ALERT)): "syslog.LOG_ALERT",
210+
strconv.Itoa(int(syslog.LOG_CRIT)): "syslog.LOG_CRIT",
211+
strconv.Itoa(int(syslog.LOG_ERR)): "syslog.LOG_ERR",
212+
strconv.Itoa(int(syslog.LOG_WARNING)): "syslog.LOG_WARNING",
213+
strconv.Itoa(int(syslog.LOG_NOTICE)): "syslog.LOG_NOTICE",
214+
strconv.Itoa(int(syslog.LOG_INFO)): "syslog.LOG_INFO",
215+
strconv.Itoa(int(syslog.LOG_DEBUG)): "syslog.LOG_DEBUG",
216+
217+
// strconv.Itoa(int(syslog.LOG_KERN)): "syslog.LOG_KERN",
218+
strconv.Itoa(int(syslog.LOG_USER)): "syslog.LOG_USER",
219+
strconv.Itoa(int(syslog.LOG_MAIL)): "syslog.LOG_MAIL",
220+
strconv.Itoa(int(syslog.LOG_DAEMON)): "syslog.LOG_DAEMON",
221+
strconv.Itoa(int(syslog.LOG_AUTH)): "syslog.LOG_AUTH",
222+
strconv.Itoa(int(syslog.LOG_SYSLOG)): "syslog.LOG_SYSLOG",
223+
strconv.Itoa(int(syslog.LOG_LPR)): "syslog.LOG_LPR",
224+
strconv.Itoa(int(syslog.LOG_NEWS)): "syslog.LOG_NEWS",
225+
strconv.Itoa(int(syslog.LOG_UUCP)): "syslog.LOG_UUCP",
226+
strconv.Itoa(int(syslog.LOG_CRON)): "syslog.LOG_CRON",
227+
strconv.Itoa(int(syslog.LOG_AUTHPRIV)): "syslog.LOG_AUTHPRIV",
228+
strconv.Itoa(int(syslog.LOG_FTP)): "syslog.LOG_FTP",
229+
strconv.Itoa(int(syslog.LOG_LOCAL0)): "syslog.LOG_LOCAL0",
230+
strconv.Itoa(int(syslog.LOG_LOCAL1)): "syslog.LOG_LOCAL1",
231+
strconv.Itoa(int(syslog.LOG_LOCAL2)): "syslog.LOG_LOCAL2",
232+
strconv.Itoa(int(syslog.LOG_LOCAL3)): "syslog.LOG_LOCAL3",
233+
strconv.Itoa(int(syslog.LOG_LOCAL4)): "syslog.LOG_LOCAL4",
234+
strconv.Itoa(int(syslog.LOG_LOCAL5)): "syslog.LOG_LOCAL5",
235+
strconv.Itoa(int(syslog.LOG_LOCAL6)): "syslog.LOG_LOCAL6",
236+
strconv.Itoa(int(syslog.LOG_LOCAL7)): "syslog.LOG_LOCAL7",
237+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Code generated by usestdlibvars, DO NOT EDIT.
2+
3+
package {{ .PackageName }}
4+
5+
import "log/syslog"
6+
7+
var (
8+
{{- range $key, $value := .Mapping }}
9+
_ = {{ $key }}
10+
{{- end }}
11+
)
12+
13+
var (
14+
{{- range $key, $value := .Mapping }}
15+
_, _ = syslog.New({{ $key }}, "") // want `"{{ quoteMeta $key }}" can be replaced by {{ quoteMeta $value }}`
16+
{{- end }}
17+
)
18+
19+
var (
20+
{{- range $key, $value := .Mapping }}
21+
_, _ = syslog.Dial("", "", {{ $key }}, "") // want `"{{ quoteMeta $key }}" can be replaced by {{ quoteMeta $value }}`
22+
{{- end }}
23+
)
24+
25+
var (
26+
{{- range $key, $value := .Mapping }}
27+
_, _ = syslog.NewLogger({{ $key }}, 0) // want `"{{ quoteMeta $key }}" can be replaced by {{ quoteMeta $value }}`
28+
{{- end }}
29+
)

pkg/analyzer/testdata/src/a/syslog/priority.go

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

0 commit comments

Comments
 (0)