1
0
mirror of https://github.com/mgechev/revive.git synced 2025-03-17 20:57:58 +02:00
This commit is contained in:
mgechev 2017-11-19 17:35:56 -08:00
parent 5d652029ae
commit af459bbef6
2 changed files with 15 additions and 18 deletions

View File

@ -31,7 +31,7 @@ func (r *LintElseRule) Name() string {
}
type lintElse struct {
r rule.Rule
r *LintElseRule
}
func (f lintElse) Visit(n ast.Node) ast.Visitor {
@ -55,11 +55,10 @@ func (f lintElse) Visit(n ast.Node) ast.Visitor {
}
lastStmt := node.Body.List[len(node.Body.List)-1]
if _, ok := lastStmt.(*ast.ReturnStmt); ok {
f.r.AddFailures(rule.Failure{
Failure: failure,
Type: rule.FailureTypeWarning,
Position: f.r.Position(node.Else.Pos(), node.Else.End()),
})
f.r.AddFailureAtNode(rule.Failure{
Failure: failure,
Type: rule.FailureTypeWarning,
}, node.Else, f.r.File)
return f
}
}

View File

@ -1,6 +1,7 @@
package rule
import (
"go/ast"
"go/token"
"github.com/mgechev/revive/file"
@ -58,7 +59,6 @@ type Rule interface {
Apply(*file.File, Arguments) []Failure
AddFailures(...Failure)
Failures() []Failure
Position(token.Pos, token.Pos) FailurePosition
}
// AbstractRule defines an abstract rule.
@ -67,27 +67,25 @@ type AbstractRule struct {
File *file.File
}
// Apply must be overridden by the successor struct.
func (r *AbstractRule) Apply(file *file.File, args Arguments) {
panic("Apply not implemented")
}
// AddFailures adds rule failures.
func (r *AbstractRule) AddFailures(failures ...Failure) {
r.failures = append(r.failures, failures...)
}
// AddFailureAtNode adds rule failure at specific node.
func (r *AbstractRule) AddFailureAtNode(failure Failure, t ast.Node, file *file.File) {
failure.Position = toFailurePosition(t.Pos(), t.End(), file)
r.AddFailures(failure)
}
// Failures returns the rule failures.
func (r *AbstractRule) Failures() []Failure {
return r.failures
}
// Position returns position by given start and end token.Pos.
func (r *AbstractRule) Position(start token.Pos, end token.Pos) FailurePosition {
s := r.File.ToPosition(start)
e := r.File.ToPosition(end)
func toFailurePosition(start token.Pos, end token.Pos, file *file.File) FailurePosition {
return FailurePosition{
Start: s,
End: e,
Start: file.ToPosition(start),
End: file.ToPosition(end),
}
}