Example #1
0
        public async Task <TextEditContainer?> Handle(DocumentFormattingParams request, CancellationToken cancellationToken)
        {
            if (!_optionsMonitor.CurrentValue.EnableFormatting)
            {
                return(null);
            }

            var document = await _projectSnapshotManagerDispatcher.RunOnDispatcherThreadAsync(() =>
            {
                _documentResolver.TryResolveDocument(request.TextDocument.Uri.GetAbsoluteOrUNCPath(), out var documentSnapshot);

                return(documentSnapshot);
            }, cancellationToken).ConfigureAwait(false);

            if (document is null || cancellationToken.IsCancellationRequested)
            {
                return(null);
            }

            var codeDocument = await document.GetGeneratedOutputAsync();

            if (codeDocument.IsUnsupported())
            {
                return(null);
            }

            var span  = TextSpan.FromBounds(0, codeDocument.Source.Length);
            var range = span.AsRange(codeDocument.GetSourceText());
            var edits = await _razorFormattingService.FormatAsync(request.TextDocument.Uri, document, range, request.Options, cancellationToken);

            var editContainer = new TextEditContainer(edits);

            return(editContainer);
        }
Example #2
0
        public async Task <TextEditContainer> Handle(DocumentFormattingParams request, CancellationToken cancellationToken)
        {
            if (!_optionsMonitor.CurrentValue.EnableFormatting)
            {
                return(null);
            }

            var document = await Task.Factory.StartNew(() =>
            {
                _documentResolver.TryResolveDocument(request.TextDocument.Uri.GetAbsoluteOrUNCPath(), out var documentSnapshot);

                return(documentSnapshot);
            }, cancellationToken, TaskCreationOptions.None, _foregroundDispatcher.ForegroundScheduler);

            if (document is null || cancellationToken.IsCancellationRequested)
            {
                return(null);
            }

            var codeDocument = await document.GetGeneratedOutputAsync();

            if (codeDocument.IsUnsupported())
            {
                return(null);
            }

            var span  = TextSpan.FromBounds(0, codeDocument.Source.Length);
            var range = span.AsRange(codeDocument.GetSourceText());
            var edits = await _razorFormattingService.FormatAsync(request.TextDocument.Uri, document, range, request.Options, cancellationToken);

            var editContainer = new TextEditContainer(edits);

            return(editContainer);
        }
        public async Task CanSendFormattingRequest()
        {
            Skip.If(
                TestsFixture.RunningInConstainedLanguageMode && TestsFixture.IsWindowsPowerShell,
                "Windows PowerShell doesn't trust PSScriptAnalyzer by default so it won't load.");

            string scriptPath = NewTestFile(@"
gci | % {
Get-Process
}

");

            TextEditContainer textEdits = await LanguageClient.SendRequest <TextEditContainer>(
                "textDocument/formatting",
                new DocumentFormattingParams
            {
                TextDocument = new TextDocumentIdentifier
                {
                    Uri = new Uri(scriptPath)
                },
                Options = new FormattingOptions
                {
                    TabSize      = 4,
                    InsertSpaces = false
                }
            });

            TextEdit textEdit = Assert.Single(textEdits);

            // If we have a tab, formatting ran.
            Assert.Contains("\t", textEdit.NewText);
        }
Example #4
0
        public async Task CanSendFormattingRequest()
        {
            string scriptPath = NewTestFile(@"
gci | % {
Get-Process
}

");

            TextEditContainer textEdits = await LanguageClient.SendRequest <TextEditContainer>(
                "textDocument/formatting",
                new DocumentFormattingParams
            {
                TextDocument = new TextDocumentIdentifier
                {
                    Uri = new Uri(scriptPath)
                },
                Options = new FormattingOptions
                {
                    TabSize      = 4,
                    InsertSpaces = false
                }
            });

            TextEdit textEdit = Assert.Single(textEdits);

            // If we have a tab, formatting ran.
            Assert.Contains("\t", textEdit.NewText);
        }
        public async Task <TextEditContainer> Handle(DocumentOnTypeFormattingParams request, CancellationToken cancellationToken)
        {
            var document = await Task.Factory.StartNew(() =>
            {
                _documentResolver.TryResolveDocument(request.TextDocument.Uri.GetAbsoluteOrUNCPath(), out var documentSnapshot);

                return(documentSnapshot);
            }, cancellationToken, TaskCreationOptions.None, _foregroundDispatcher.ForegroundScheduler);

            if (document is null || cancellationToken.IsCancellationRequested)
            {
                return(null);
            }

            var codeDocument = await document.GetGeneratedOutputAsync();

            if (codeDocument.IsUnsupported())
            {
                return(null);
            }

            var edits = await _razorFormattingService.FormatOnTypeAsync(request.TextDocument.Uri, codeDocument, request.Position, request.Character, request.Options);

            var editContainer = new TextEditContainer(edits);

            return(editContainer);
        }
Example #6
0
        public async Task CanSendRangeFormattingRequestAsync()
        {
            Skip.If(
                PsesStdioProcess.RunningInConstainedLanguageMode && PsesStdioProcess.IsWindowsPowerShell,
                "Windows PowerShell doesn't trust PSScriptAnalyzer by default so it won't load.");

            string scriptPath = NewTestFile(@"
gci | % {
Get-Process
}

");

            TextEditContainer textEdits = await PsesLanguageClient
                                          .SendRequest <DocumentRangeFormattingParams>(
                "textDocument/formatting",
                new DocumentRangeFormattingParams
            {
                Range = new Range
                {
                    Start = new Position
                    {
                        Line      = 2,
                        Character = 0
                    },
                    End = new Position
                    {
                        Line      = 3,
                        Character = 0
                    }
                },
                TextDocument = new TextDocumentIdentifier
                {
                    Uri = new Uri(scriptPath)
                },
                Options = new FormattingOptions
                {
                    TabSize      = 4,
                    InsertSpaces = false
                }
            })
                                          .Returning <TextEditContainer>(CancellationToken.None).ConfigureAwait(false);

            TextEdit textEdit = Assert.Single(textEdits);

            // If we have a tab, formatting ran.
            Assert.Contains("\t", textEdit.NewText);
        }
Example #7
0
 public static CompletionItem WithAdditionalEdits(this CompletionItem item, TextEditContainer editContainer)
 {
     item.AdditionalTextEdits = editContainer;
     return(item);
 }
Example #8
0
 public CompletionItemBuilder WithAdditionalEdits(TextEditContainer editContainer)
 {
     this.additionalTextEdits = editContainer;
     return(this);
 }