public void Initialize( ChainedFormattingRules formattingRules, SyntaxToken startToken, SyntaxToken endToken, CancellationToken cancellationToken) { var rootNode = this.TreeData.Root; if (_tokenStream.IsFormattingWholeDocument) { // if we are trying to format whole document, there is no reason to get initial context. just set // initial indentation. var data = new RootIndentationData(rootNode); _indentationTree.AddIntervalInPlace(data); _indentationMap.Add(data.TextSpan); return; } var initialContextFinder = new InitialContextFinder(_tokenStream, formattingRules, rootNode); var results = initialContextFinder.Do(startToken, endToken); if (results.indentOperations != null) { var indentationOperations = results.indentOperations; var initialOperation = indentationOperations[0]; var baseIndentationFinder = new BottomUpBaseIndentationFinder( formattingRules, this.OptionSet.GetOption(FormattingOptions.TabSize, _language), this.OptionSet.GetOption(FormattingOptions.IndentationSize, _language), _tokenStream); var initialIndentation = baseIndentationFinder.GetIndentationOfCurrentPosition( rootNode, initialOperation, t => _tokenStream.GetCurrentColumn(t), cancellationToken); var data = new SimpleIndentationData(initialOperation.TextSpan, initialIndentation); _indentationTree.AddIntervalInPlace(data); _indentationMap.Add(data.TextSpan); // hold onto initial operations _initialIndentBlockOperations = indentationOperations; } results.suppressOperations?.Do(o => this.AddInitialSuppressOperation(o)); }
public void Initialize( ChainedFormattingRules formattingRules, SyntaxToken startToken, SyntaxToken endToken, CancellationToken cancellationToken) { var rootNode = this.TreeData.Root; if (_tokenStream.IsFormattingWholeDocument) { // if we are trying to format whole document, there is no reason to get initial context. just set // initial indentation. var data = new RootIndentationData(rootNode); _indentationTree.AddIntervalInPlace(data); _indentationMap.Add(data.TextSpan); return; } var initialContextFinder = new InitialContextFinder(_tokenStream, formattingRules, rootNode, endToken); var results = initialContextFinder.Do(startToken, endToken); if (results.indentOperations != null) { var indentationOperations = results.indentOperations; var initialOperation = indentationOperations[0]; var baseIndentationFinder = new BottomUpBaseIndentationFinder( formattingRules, this.OptionSet.GetOption(FormattingOptions.TabSize, _language), this.OptionSet.GetOption(FormattingOptions.IndentationSize, _language), _tokenStream, endToken); var initialIndentation = baseIndentationFinder.GetIndentationOfCurrentPosition( rootNode, initialOperation, t => _tokenStream.GetCurrentColumn(t), cancellationToken); var data = new SimpleIndentationData(initialOperation.TextSpan, initialIndentation); _indentationTree.AddIntervalInPlace(data); _indentationMap.Add(data.TextSpan); // hold onto initial operations _initialIndentBlockOperations = indentationOperations; } results.suppressOperations?.Do(o => this.AddInitialSuppressOperation(o)); }