@@ -24,9 +24,11 @@ func (Whitespace) Desc() string {
2424}
2525
2626func (w Whitespace ) Run (ctx context.Context , lintCtx * linter.Context ) ([]result.Issue , error ) {
27+ settings := whitespace.Settings {MultiIf : lintCtx .Cfg .LintersSettings .Whitespace .MultiIf }
28+
2729 var issues []whitespace.Message
2830 for _ , file := range lintCtx .ASTCache .GetAllValidFiles () {
29- issues = append (issues , whitespace .Run (file .F , file .Fset )... )
31+ issues = append (issues , whitespace .Run (file .F , file .Fset , settings )... )
3032 }
3133
3234 if len (issues ) == 0 {
@@ -40,33 +42,27 @@ func (w Whitespace) Run(ctx context.Context, lintCtx *linter.Context) ([]result.
4042 Filename : i .Pos .Filename ,
4143 Line : i .Pos .Line ,
4244 },
45+ LineRange : & result.Range {From : i .Pos .Line , To : i .Pos .Line },
4346 Text : i .Message ,
4447 FromLinter : w .Name (),
4548 Replacement : & result.Replacement {},
4649 }
4750
48- // TODO(jirfag): return more information from Whitespace to get rid of string comparisons
49- if i .Message == "unnecessary leading newline" {
50- // cover two lines by the issue: opening bracket "{" (issue.Pos.Line) and following empty line
51- issue .LineRange = & result.Range {From : issue .Pos .Line , To : issue .Pos .Line + 1 }
52-
53- bracketLine , err := lintCtx .LineCache .GetLine (issue .Pos .Filename , issue .Pos .Line )
54- if err != nil {
55- return nil , errors .Wrapf (err , "failed to get line %s:%d" , issue .Pos .Filename , issue .Pos .Line )
56- }
57- issue .Replacement .NewLines = []string {bracketLine }
58- } else {
59- // cover two lines by the issue: closing bracket "}" (issue.Pos.Line) and preceding empty line
60- issue .LineRange = & result.Range {From : issue .Pos .Line - 1 , To : issue .Pos .Line }
61-
62- bracketLine , err := lintCtx .LineCache .GetLine (issue .Pos .Filename , issue .Pos .Line )
63- if err != nil {
64- return nil , errors .Wrapf (err , "failed to get line %s:%d" , issue .Pos .Filename , issue .Pos .Line )
65- }
66- issue .Replacement .NewLines = []string {bracketLine }
51+ bracketLine , err := lintCtx .LineCache .GetLine (issue .Pos .Filename , issue .Pos .Line )
52+ if err != nil {
53+ return nil , errors .Wrapf (err , "failed to get line %s:%d" , issue .Pos .Filename , issue .Pos .Line )
54+ }
6755
68- issue .Pos .Line -- // set in sync with LineRange.From to not break fixer and other code features
56+ switch i .Type {
57+ case whitespace .MessageTypeLeading :
58+ issue .LineRange .To ++ // cover two lines by the issue: opening bracket "{" (issue.Pos.Line) and following empty line
59+ case whitespace .MessageTypeTrailing :
60+ issue .LineRange .From -- // cover two lines by the issue: closing bracket "}" (issue.Pos.Line) and preceding empty line
61+ issue .Pos .Line -- // set in sync with LineRange.From to not break fixer and other code features
62+ case whitespace .MessageTypeAddAfter :
63+ bracketLine += "\n "
6964 }
65+ issue .Replacement .NewLines = []string {bracketLine }
7066
7167 res [k ] = issue
7268 }
0 commit comments