Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
        }