Skip to content

Commit 5f30746

Browse files
bergmeisterChristoph Bergmeisterrjmholt
authored
Improve performance of UseConsistentIndentation -> 35% speedup for formatter (#1458)
* only go back as much as needed * refactor into function * simplify * Apply suggestions from code review Co-Authored-By: Robert Holt <rjmholt@gmail.com> Co-authored-by: Christoph Bergmeister <christoph.bergmeister@bjss.com> Co-authored-by: Robert Holt <rjmholt@gmail.com>
1 parent 1f63688 commit 5f30746

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

Rules/UseConsistentIndentation.cs

+18-4
Original file line numberDiff line numberDiff line change
@@ -219,10 +219,7 @@ public override IEnumerable<DiagnosticRecord> AnalyzeScript(Ast ast, string file
219219
}
220220
}
221221

222-
var lineHasPipelineBeforeToken = tokens.Any(oneToken =>
223-
oneToken.Kind == TokenKind.Pipe &&
224-
oneToken.Extent.StartLineNumber == token.Extent.StartLineNumber &&
225-
oneToken.Extent.StartColumnNumber < token.Extent.StartColumnNumber);
222+
bool lineHasPipelineBeforeToken = LineHasPipelineBeforeToken(tokens, tokenIndex, token);
226223

227224
AddViolation(token, tempIndentationLevel, diagnosticRecords, ref onNewLine, lineHasPipelineBeforeToken);
228225
}
@@ -257,6 +254,23 @@ public override IEnumerable<DiagnosticRecord> AnalyzeScript(Ast ast, string file
257254
return diagnosticRecords;
258255
}
259256

257+
private static bool LineHasPipelineBeforeToken(Token[] tokens, int tokenIndex, Token token)
258+
{
259+
int searchIndex = tokenIndex;
260+
int searchLine = token.Extent.StartLineNumber;
261+
do
262+
{
263+
searchLine = tokens[searchIndex].Extent.StartLineNumber;
264+
int searchcolumn = tokens[searchIndex].Extent.StartColumnNumber;
265+
if (tokens[searchIndex].Kind == TokenKind.Pipe && searchcolumn < token.Extent.StartColumnNumber)
266+
{
267+
return true;
268+
}
269+
searchIndex--;
270+
} while (searchLine == token.Extent.StartLineNumber && searchIndex >= 0);
271+
return false;
272+
}
273+
260274
private static CommandBaseAst LastPipeOnFirstLineWithPipeUsage(PipelineAst pipelineAst)
261275
{
262276
CommandBaseAst lastPipeOnFirstLineWithPipeUsage = pipelineAst.PipelineElements[0];

0 commit comments

Comments
 (0)