bool TryFormat(IEditorFormattingService formattingService, char typedChar, int position, bool formatOnReturn, CancellationToken cancellationToken)
        {
            var document = DocumentContext.AnalysisDocument;
            IList <TextChange> changes;

            if (formatOnReturn)
            {
                if (!formattingService.SupportsFormatOnReturn)
                {
                    return(false);
                }
                changes = formattingService.GetFormattingChangesOnReturnAsync(document, position, cancellationToken).WaitAndGetResult(cancellationToken);
            }
            else
            {
                if (!formattingService.SupportsFormattingOnTypedCharacter(document, typedChar))
                {
                    return(false);
                }
                changes = formattingService.GetFormattingChangesAsync(document, typedChar, position, cancellationToken).WaitAndGetResult(cancellationToken);
            }

            if (changes == null || changes.Count == 0)
            {
                return(false);
            }

            Editor.ApplyTextChanges(changes);
            return(true);
        }
Exemple #2
0
        bool TryFormat(IEditorFormattingService formattingService, char typedChar, int position, bool formatOnReturn, CancellationToken cancellationToken)
        {
            var document = DocumentContext.AnalysisDocument;
            IEnumerable <TextChange> changes;

            if (formatOnReturn)
            {
                if (!formattingService.SupportsFormatOnReturn)
                {
                    return(false);
                }
                changes = formattingService.GetFormattingChangesOnReturnAsync(document, position, cancellationToken).WaitAndGetResult(cancellationToken);
            }
            else
            {
                if (!formattingService.SupportsFormattingOnTypedCharacter(document, typedChar))
                {
                    return(false);
                }
                changes = formattingService.GetFormattingChangesAsync(document, typedChar, position, cancellationToken).WaitAndGetResult(cancellationToken);
                var line = Editor.GetLineByOffset(position);
                if (typedChar == '#')
                {
                    changes = changes.Where(c => c.Span.Start >= line.Offset);
                }
            }

            if (changes == null)
            {
                return(false);
            }
            Editor.ApplyTextChanges(changes);
            return(true);
        }