@@ -80,93 +80,97 @@ var NoDuplicateTypeConstituentsRule = rule.Rule{
8080 ctx .ReportNode (constituentNode , message )
8181 return
8282 }
83- kind := ast .KindUnionType
84- if unionOrIntersection == unionOrIntersection_Intersection {
85- kind = ast .KindIntersectionType
86- }
87-
88- parent := unwindedParentType (constituentNode , kind )
89- s := scanner .GetScannerForSourceFile (ctx .SourceFile , parent .Pos ())
90- foundBefore := false
91- prevStart := 0
92- bracketBeforeTokens := []core.TextRange {}
9383
94- for {
95- if s .TokenStart () >= constituentNode .Pos () {
96- break
84+ ctx .ReportNodeWithFixes (constituentNode , message , func () []rule.RuleFix {
85+ kind := ast .KindUnionType
86+ if unionOrIntersection == unionOrIntersection_Intersection {
87+ kind = ast .KindIntersectionType
9788 }
98- if s .Token () == ast .KindAmpersandToken || s .Token () == ast .KindBarToken {
99- foundBefore = true
100- prevStart = s .TokenStart ()
101- bracketBeforeTokens = bracketBeforeTokens [:0 ]
102- } else if s .Token () == ast .KindOpenParenToken {
103- bracketBeforeTokens = append (bracketBeforeTokens , s .TokenRange ())
89+
90+ parent := unwindedParentType (constituentNode , kind )
91+ s := scanner .GetScannerForSourceFile (ctx .SourceFile , parent .Pos ())
92+ foundBefore := false
93+ prevStart := 0
94+ bracketBeforeTokens := []core.TextRange {}
95+
96+ for {
97+ if s .TokenStart () >= constituentNode .Pos () {
98+ break
99+ }
100+ if s .Token () == ast .KindAmpersandToken || s .Token () == ast .KindBarToken {
101+ foundBefore = true
102+ prevStart = s .TokenStart ()
103+ bracketBeforeTokens = bracketBeforeTokens [:0 ]
104+ } else if s .Token () == ast .KindOpenParenToken {
105+ bracketBeforeTokens = append (bracketBeforeTokens , s .TokenRange ())
106+ }
107+ s .Scan ()
104108 }
105- s .Scan ()
106- }
107- fixes := []rule.RuleFix {
108- rule .RuleFixRemoveRange (utils .TrimNodeTextRange (ctx .SourceFile , constituentNode )),
109- }
110- if foundBefore {
111- fixes = append (fixes , rule .RuleFixRemoveRange (core .NewTextRange (prevStart , prevStart + 1 )))
112- for _ , before := range bracketBeforeTokens {
113- fixes = append (fixes , rule .RuleFixRemoveRange (before ))
109+ fixes := []rule.RuleFix {
110+ rule .RuleFixRemoveRange (utils .TrimNodeTextRange (ctx .SourceFile , constituentNode )),
114111 }
115- s .ResetPos (constituentNode .End ())
116- for range bracketBeforeTokens {
117- s .Scan ()
118- if s .Token () != ast .KindCloseParenToken {
119- panic (fmt .Sprintf ("expected next scanned token to be ')', got '%v'" , s .Token ()))
112+ if foundBefore {
113+ fixes = append (fixes , rule .RuleFixRemoveRange (core .NewTextRange (prevStart , prevStart + 1 )))
114+ for _ , before := range bracketBeforeTokens {
115+ fixes = append (fixes , rule .RuleFixRemoveRange (before ))
120116 }
121- fixes = append (fixes , rule .RuleFixRemoveRange (s .TokenRange ()))
122- }
123- } else {
124- s .ResetPos (constituentNode .End ())
117+ s .ResetPos (constituentNode .End ())
118+ for range bracketBeforeTokens {
119+ s .Scan ()
120+ if s .Token () != ast .KindCloseParenToken {
121+ panic (fmt .Sprintf ("expected next scanned token to be ')', got '%v'" , s .Token ()))
122+ }
123+ fixes = append (fixes , rule .RuleFixRemoveRange (s .TokenRange ()))
124+ }
125+ } else {
126+ s .ResetPos (constituentNode .End ())
125127
126- closingParensCount := 0
127- for {
128- s .Scan ()
128+ closingParensCount := 0
129+ for {
130+ s .Scan ()
129131
130- if s .TokenStart () >= parent .End () {
131- panic ("couldn't find '&' or '|' token" )
132- }
132+ if s .TokenStart () >= parent .End () {
133+ panic ("couldn't find '&' or '|' token" )
134+ }
133135
134- if s .Token () == ast .KindAmpersandToken || s .Token () == ast .KindBarToken {
136+ if s .Token () == ast .KindAmpersandToken || s .Token () == ast .KindBarToken {
137+ fixes = append (fixes , rule .RuleFixRemoveRange (s .TokenRange ()))
138+ break
139+ }
140+ if s .Token () != ast .KindCloseParenToken {
141+ panic (fmt .Sprintf ("expected next scanned token to be ')', got '%v'" , s .Token ()))
142+ }
143+ closingParensCount ++
135144 fixes = append (fixes , rule .RuleFixRemoveRange (s .TokenRange ()))
136- break
137145 }
138- if s .Token () != ast .KindCloseParenToken {
139- panic (fmt .Sprintf ("expected next scanned token to be ')', got '%v'" , s .Token ()))
140- }
141- closingParensCount ++
142- fixes = append (fixes , rule .RuleFixRemoveRange (s .TokenRange ()))
143- }
144146
145- openingParens := make ([]core.TextRange , 0 , closingParensCount )
146- s .ResetPos (parent .Pos ())
147- for range closingParensCount {
148- s .Scan ()
149- if s .Token () == ast .KindOpenParenToken {
150- if len (openingParens ) < closingParensCount {
151- openingParens = append (openingParens , s .TokenRange ())
147+ openingParens := make ([]core.TextRange , 0 , closingParensCount )
148+ s .ResetPos (parent .Pos ())
149+ for range closingParensCount {
150+ s .Scan ()
151+ if s .Token () == ast .KindOpenParenToken {
152+ if len (openingParens ) < closingParensCount {
153+ openingParens = append (openingParens , s .TokenRange ())
154+ }
155+ } else {
156+ openingParens = openingParens [:0 ]
152157 }
153- } else {
154- openingParens = openingParens [:0 ]
155- }
156158
157- if s .TokenStart () == constituentNode .Pos () {
158- if len (openingParens ) != closingParensCount {
159- panic (fmt .Sprintf ("expected to find %v opening parens, found only %v" , closingParensCount , len (openingParens )))
159+ if s .TokenStart () == constituentNode .Pos () {
160+ if len (openingParens ) != closingParensCount {
161+ panic (fmt .Sprintf ("expected to find %v opening parens, found only %v" , closingParensCount , len (openingParens )))
162+ }
163+ break
160164 }
161- break
162- }
163165
164- for _ , openingParenRange := range openingParens {
165- fixes = append (fixes , rule .RuleFixRemoveRange (openingParenRange ))
166+ for _ , openingParenRange := range openingParens {
167+ fixes = append (fixes , rule .RuleFixRemoveRange (openingParenRange ))
168+ }
166169 }
167170 }
168- }
169- ctx .ReportNodeWithFixes (constituentNode , message , func () []rule.RuleFix { return fixes })
171+
172+ return fixes
173+ })
170174 }
171175
172176 var checkDuplicateRecursively func (
0 commit comments