Граф коммитов

15470 Коммитов

Автор SHA1 Сообщение Дата
David Wengier 9b339ba27c
Cohost formatting (#10822)
Fixes https://github.com/dotnet/razor/issues/10743
Part of https://github.com/dotnet/razor/issues/9519

Brings formatting to cohosting. Relatively simple because of previous
PRs. Have left sharing full test coverage of the formatting engine for
later
2024-09-05 14:28:23 +10:00
David Wengier b7cd05e453 Remove unused parameter 2024-09-05 13:15:10 +10:00
David Wengier d87ad016dd Move initialization logic 2024-09-05 13:09:33 +10:00
David Wengier a795f32f17 Merge remote-tracking branch 'upstream/main' into CohostFormatting
# Conflicts:
#	src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Formatting/RazorFormattingService.cs
2024-09-05 12:20:13 +10:00
David Wengier 7d8be8e167 Most PR feedback 2024-09-05 12:12:55 +10:00
David Wengier fbf8c8ef4d
Remove some things from `IProjectSnapshot` for cohostings benefit (#10831)
Chris found these to be problematic in his branch where he enabled the
source generator, but fortunately they're simply unnecessary in
cohosting.
2024-09-05 10:16:54 +10:00
David Wengier 42cc39e4a9 PR Feedback 2024-09-05 08:34:32 +10:00
David Wengier 6718dbcb40
[main] Update dependencies from dotnet/source-build-reference-packages (#10562)
This pull request updates the following dependencies

[marker]: <> (Begin:011df26a-fbd1-45b0-94b9-08db3601dcca)
## From https://github.com/dotnet/source-build-reference-packages
- **Subscription**: 011df26a-fbd1-45b0-94b9-08db3601dcca
- **Build**: 20240828.1
- **Date Produced**: August 28, 2024 4:47:08 PM UTC
- **Commit**: 6bcf90f99d13da86c5e9753a6f34b6484673d0a0
- **Branch**: refs/heads/main

[DependencyUpdate]: <> (Begin)

- **Updates**:
-
**Microsoft.SourceBuild.Intermediate.source-build-reference-packages**:
[from 10.0.0-alpha.1.24421.1 to 10.0.0-alpha.1.24428.1][10]

[10]:
bdd698774d...6bcf90f99d

[DependencyUpdate]: <> (End)


[marker]: <> (End:011df26a-fbd1-45b0-94b9-08db3601dcca)
2024-09-05 07:59:52 +10:00
Jordi Ramos 148d71a9a3
Fix LF line-ending auto format bug (#10802)
* Implemented a line normalization function that prevents the language server from sending /r to LF line ending docs

* check if indentation location has been processed

* added LF line ending document to all previous razor formatting test cases

* skipping some LF line ending formatting tests. Created an issue to track the progress
2024-09-04 14:43:47 -07:00
David Wengier 460ae5b1a4
Merge branch 'main' into darc-main-a925341a-a0ef-49f7-bc6e-6525c5d13555 2024-09-05 07:29:55 +10:00
dotnet-maestro[bot] de7eddc0e9
Update dependencies from https://github.com/dotnet/arcade build 20240903.1 (#10835)
Microsoft.SourceBuild.Intermediate.arcade , Microsoft.DotNet.Arcade.Sdk
 From Version 9.0.0-beta.24429.5 -> To Version 9.0.0-beta.24453.1

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
2024-09-04 12:33:30 -07:00
Dustin Campbell 90b1855f86
Change RazorSyntaxTree.Diagnostics from an IReadOnlyList<RazorDiagnostic> to an ImmutableArray<RazorDiagnostic> (#10797)
This pull request represents several changes with the ultimate goal of
exposing `RazorSyntaxTree.Diagnostics` as an
`ImmutableArray<RazorDiagnostic>` rather than an
`IReadOnlyList<RazorDiagnostic>`:

- Clean up `RazorSyntaxTree` and get rid of `DefaultRazorSyntaxTree`.
- Add `(Drain)ToImmutableOrdered*` methods to `PooledArrayBuilder<T>`.
Note that this change also includes a refactoring to the various unit
tests for ordering to share test data that I've isolated to a single
commit.
- Clean up and improve `ErrorSink` to no longer greedily create a new
`List<T>` before any errors are encountered.
- Clean up `ParserContext` and make it used pooled collections.
- Use pooled collections when computing and caching the result of
`RazorSyntaxTree.Diagnostics`.
2024-09-04 08:41:16 -07:00
dotnet-maestro[bot] 4ec65fb914
[main] Update dependencies from dotnet/arcade (#10816)
* Update dependencies from https://github.com/dotnet/arcade build 20240829.3

Microsoft.SourceBuild.Intermediate.arcade , Microsoft.DotNet.Arcade.Sdk
 From Version 9.0.0-beta.24426.3 -> To Version 9.0.0-beta.24429.3

* Update dependencies from https://github.com/dotnet/arcade build 20240829.5

Microsoft.SourceBuild.Intermediate.arcade , Microsoft.DotNet.Arcade.Sdk
 From Version 9.0.0-beta.24429.3 -> To Version 9.0.0-beta.24429.5

* Failed to perform coherency update for one or more dependencies.

---------

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
2024-09-03 23:00:10 -07:00
David Wengier 7107165cd4 Remove GetRelatedDocuments from IProjectSnapshot
This is only called from the LSP server, and shouldn't be called from cohosting, so now it can't be!
2024-09-04 13:58:57 +10:00
David Wengier 074043b516 Remove IsImportDocument
Was only used in one place, and that place could never have any result except false due to a FileKind check above
2024-09-04 13:35:33 +10:00
David Wengier 915c4c34e4
Remap Html uris in cohost Go To Def (#10826)
Fixes https://github.com/dotnet/razor/issues/10823
2024-09-04 11:31:59 +10:00
David Wengier 467ff246de PR feedback 2024-09-04 11:04:31 +10:00
Dustin Campbell 277663c9a5
Clarify [EventHandler] tag helper discovery logic and avoid exception (#10828)
This fixes an issue that @tmat pointed out to me over email. In a recent
change (#10720), I added a call to `Assumed.Unreachable()` when
`[EventHandler]` tag helper discovery encounters an attribute with
invalid constructor attributes. However, throwing an exception during
tag helper discovery is usually the wrong approach. Normally, if Roslyn
symbols aren't in the proper shape during tag helper discovery, Razor
will simply not produce a tag helper. (We _do_ support diagnostics for
tag helpers, but those are usually reserved for warnings and errors that
are related to a tag helper's data that would make it unusable, such as
a name containing whitespace.)

It turns out that the "unreachable" condition wasn't actually all that
unreachable and @tmat was hitting it while working on hot reload tests.
So, I've changed the code to make the success conditions clearer, i.e.,
the attribute data must match one of the two constructor calls. And, I
changed the logic to simply skip `[EventHandler]` attributes that don't
meet the success conditions.
2024-09-03 15:43:31 -07:00
Dustin Campbell 5c0677ad27 Ensure PooledArrayBuilder<T> resets capacity of builder after drain
It is perfectly legal for a PooledArrayBuilder<T> to be drained via one of the DrainToImmutable* methods and then continue adding items to the builder. However, if the inner ImmutableArray<T>.Builder's capacity was set to 0 during the drain, its capacity will not be reset to any specified value when adding new items. This change fixes that.
2024-09-03 14:46:52 -07:00
Dustin Campbell abc48b312c Test that the DrainToImmutableOrdered* methods actually drain 2024-09-03 13:30:01 -07:00
Dustin Campbell 277c780a68 Clarify [EventHandler] tag helper discovery logic and avoid exception 2024-09-03 10:53:32 -07:00
David Wengier f867a03926 Remap Html uris if we get them 2024-09-03 16:57:46 +10:00
David Wengier 1e82de71fe Add failing test, and add verification to existing tests 2024-09-03 16:54:11 +10:00
David Wengier 8bddfe9971
Skip flaky test (#10821) 2024-09-03 06:01:01 +10:00
dotnet-maestro[bot] 4a9669226e Update dependencies from https://github.com/dotnet/source-build-reference-packages build 20240828.1
Microsoft.SourceBuild.Intermediate.source-build-reference-packages
 From Version 10.0.0-alpha.1.24421.1 -> To Version 10.0.0-alpha.1.24428.1
2024-09-02 12:51:26 +00:00
David Wengier 55c51a3a9d
Apply suggestions from code review 2024-09-02 15:34:32 +10:00
David Wengier a336b7fe2b Create basic tests
These don't test the full capabilities of the formatting engine, just that it runs in cohosting
2024-09-02 15:06:09 +10:00
David Wengier 6c3b12be1e Turn off the old endpoints 2024-09-02 15:05:36 +10:00
David Wengier 2cbbdf5690 Create cohosting endpoints 2024-09-02 15:05:10 +10:00
David Wengier 90c7b476a5 Move WebTools calling code to a shared layer 2024-09-02 15:04:49 +10:00
David Wengier 2a266248b3 Fix a bug from a previous PR 2024-09-02 15:03:10 +10:00
David Wengier 3da875b6fe Create remote formatting service that delegates to the Razor formatting service 2024-09-02 15:02:42 +10:00
David Wengier cb0ae1321e Move trigger characters and logic to the formatting service
So it can be shared
2024-09-02 15:01:37 +10:00
David Wengier 18c310725a
Skip flaky test 2024-09-02 08:15:44 +10:00
David Barbet f01a5a8f30
Update PublishData after VS snap (#10817)
### Summary of the changes

-

Fixes:
2024-08-30 16:45:31 -07:00
David Barbet 3ca44979cc
Update PublishData.json 2024-08-30 15:34:59 -07:00
David Barbet 4d4e9ab735
Update PublishData after VS snap 2024-08-30 15:19:30 -07:00
David Wengier a657d5cf79
Bump WebTools and remove legacy CLaSP package (#10815)
Fixes https://github.com/dotnet/razor/issues/10160
2024-08-31 08:18:23 +10:00
David Wengier 8dc0e5a518 Bump WebTools and remove legacy CLaSP package 2024-08-30 14:55:54 +10:00
David Wengier 21c7674ac4
Re-architect formatting to prepare for cohosting (and for fun!) (#10778)
I nerd sniped myself thinking about how to get formatting into
cohosting, given the limitations Alex ran into doing the relayering for
auto insert, and this is the result. I was going to go further and port
the actual formatting endpoint to cohosting, but that would have ran
into the same issue that Alex did with auto insert, so I figured I'd
wait for that to merge, and put this up in the meantime.

This unblocks the formatting, code action and completion end points from
being ported.
Part of https://github.com/dotnet/razor/issues/10743
Part of https://github.com/dotnet/razor/issues/9519

I **strongly** recommend reviewing commit-at-a-time, as I did this
deliberately in an order, and in order to (hopefully) make reviewing
easier. Though granted, there are a lot of commits.
2024-08-30 10:33:50 +10:00
David Wengier ee83a6b9bb Fixes after merge 2024-08-30 07:38:43 +10:00
David Wengier d0e2a57b29 Merge remote-tracking branch 'upstream/main' into FormattingLayering
# Conflicts:
#	src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/LanguageServer/RazorCSharpFormattingBenchmark.cs
#	src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/AutoInsert/OnAutoInsertEndpoint.cs
#	src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Formatting/HtmlFormatter.cs
#	src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/InlineCompletion/InlineCompletionEndPoint.cs
#	src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Formatting/FormattingContext.cs
#	src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Formatting/IRazorFormattingService.cs
#	src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Formatting/Passes/CSharpFormattingPass.cs
#	src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Formatting/Passes/FormattingContentValidationPass.cs
#	src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Formatting/Passes/FormattingDiagnosticValidationPass.cs
#	src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Formatting/Passes/HtmlFormattingPassBase.cs
#	src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Formatting/RazorFormattingService.cs
#	src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Formatting/RemoteCSharpOnTypeFormattingPass.cs
#	src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Formatting/RemoteRazorFormattingPass.cs
#	src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/AutoInsert/RazorOnAutoInsertProviderTestBase.cs
#	src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Completion/Delegation/DelegatedCompletionItemResolverTest.NetFx.cs
#	src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting_NetFx/FormattingLanguageServerTestBase.cs
#	src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting_NetFx/FormattingTestBase.cs
#	src/Razor/test/Microsoft.AspNetCore.Razor.LanguageServer.Test/Formatting_NetFx/TestRazorFormattingService.cs
2024-08-30 06:56:47 +10:00
David Wengier e1f6fbaad7
Fix setting breakpoints with self versioned documents (#10811)
Fixes an issue found in app building. Thanks @phil-allen-msft!

Also fixes https://github.com/dotnet/razor/issues/9161

To make reviewing easier:
* First commit is entirely mechanical cleanup, renames, etc. and can be
skipped.
* Second commit is the fix.
* Third commit is tests.
* Fourth commit is updating more tests because these days when you ask
VS to build things it doesn't build all of it and I need to get into the
habit of doing a command line build before pushing

Because of the type and file renames, looking at the PR as a whole is
inadvised.
2024-08-30 06:33:07 +10:00
Alex Gavrilov 12f5194184
Cohosting OnAutoInsert endpoint (#10776)
* Factoring out AutoInsertService

* Switch non-cohost endpoint to use new AutoInsertService

* Adding Remote and OOB AutoInsertService classes and OnAutoInsertProviders

* Add common code for capabilities

* Add cohost OnAutoInsert endpoint

* Parameter rename

* Update src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/AutoInsert/AutoClosingTagOnAutoInsertProvider.cs

Co-authored-by: David Wengier <david.wengier@microsoft.com>

* Update src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/AutoInsert/IAutoInsertService.cs

Co-authored-by: David Wengier <david.wengier@microsoft.com>

* Update src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/AutoInsert/InsertTextEdit.cs

Co-authored-by: David Wengier <david.wengier@microsoft.com>

* Fixup after rebase

* More post-build cleanup

* Move common HTML and C# auto-insert trigger chars per CR suggestion

* More cleanup after rebase

* Add IOnAutoInsertTiggerCharacterProvider per CR suggestion

* Removing trigger characters property from RemoteAutoInsertService per CR suggestion

* Switch to using RemoteResponse

* Fixup bad resolve after rebase, and extra whitespace in RazorLangaugeServer

* Complete capabilities check in CohostingOnAutoInsertEndpoing registration

* Change input position type to serializable :LinePosition

* Fixing RemoteInsertTextEdit to use properly annotated (for serialization) types only

* Support for delegating auto-insert to C#

* Fixup after rebase

* Fixup AutoClosingTagOnAutoInsertProviderTest tests

* Fixinfg up CloseTextTagOnAutoInsertProviderTest tests

* Fixing up OnAutoInsertEndpointTest (which also tests the new AutoInsertService)

* Fixing duplicate OnAutoInsert handler registration (bad merge after rebate)

* Fixes to MEF composition issue and capabilities check
- IDocumentMappingService was not needed (and not available via MEF), so removed that
- TextDocument does not implmement VSInternalTextDocumentClientCapabilities

* Fixing incorrect export type

* Minor cleanup per CR suggestions

* Switching parameters to RazorCodeDocument and removing async in a lot of places per CR suggestion

* Fixing build - removing unneeded using

* Fix RemoteAutoInsertService logic to follow existing code (always prefer our own AutoInsertService first)

* Check allowed trigger characters before delegating to other languages/servers

* Plumbing through actual option values we need and using them

* Fixup After Rebase

* Consuming RazorFormattingService in remote OnAutoInsert service

* Fixing exception in RemoteProjectSnapshot.Configuration

Moving GetFormatterCodeDocumentAsync() into IDocumentSnapshot (and implementations of that) to allow eaiser differentiation of behavior in remote (cohosting) case where we don't need to check the flag on Project.Configuration.

Also AddUsingStatementsIfNeeded *always* gets called, even in cases when they are not actually needed, so we can't Debug.Fail there.

* Switch to PreferHtmlInAttributeValuesDocumentPositionInfoStrategy as the original code does

That allows the code insert double-quotes by delegating to HTML language server after attribute name and equals.

* Cleanup usings

* More usings cleanup

* PR feedback - minor cleanup and removal of InsertTextEdit type in favor of VSInternalDocumentOnAutoInsertResponseItem

* PR feedback - removing MEF usage from RemoteAdhocWorkspaceFactory, minor cleanup

* PR feedback

* Type and method renames, minor cleanup per PR feedback

* Renaming interface methods, removing unnecessary usage of FrozenSet

* Use ImmutableArray to store providers

* Switching to bool and out on IAutoInsertService and implementation

* Cleaned up document position info calculation per PR feedback

* Minor cleanup in RemoteAutoInsertService

* Cleanup trigger character calculation in CohostOnAutoInsertEndpoint

* Formatting changes, VsLspFactory usage

* Revert to MEF DI in RemoteAdhocWorkspaceFactory/RemoteRazorFormattingService

* Removing Rolsyn to VS LSP extension methods

* Switch to raw strings in tests and minor whitespace cleanup

* Rename per PR feedback suggestion to better indicate the purpose

* Cleanup formatting code document acquisition per PR feedback

Creating IFormattingCodeDocumentProvider service with seprate LSP and Remote implementations to provide code document appropriate for formatting.

* Removing redundant assert as compiler is already doing the check

* Unnecessary assignment cleanup

* Misc PR feedback cleanup

* Made GetGeneratedOutputAsync an extension method per PR feedback

* Remaining MEF parameter attrivute formatting changes

* Last of the PR feedback.

* Fixing most unit test failures.

Extension methods can't be used for Mock setups, so since I made GetGeneratedOutputAsync() with no parameter an extension method, I had to switch unit tests to use GeGeneratedOutputAsync(It.Any<bool>())

* Fixing last 4 unit test failures

We still had non-parameter GetGeneratedOutputAsycnc in DocumentSnapshot (even though it wasn't in IDocumentSnapshot) which was getting called internally. That was both messy (since there is now no-parameter extension method on IDocumentSnapshot) and was causing issues in tests

---------

Co-authored-by: David Wengier <david.wengier@microsoft.com>
2024-08-29 11:27:56 -07:00
David Wengier 1f45c70f4f
Write out JS comments when there would be 4 or more consecutive tildes in generated Html (#10805)
Fixes https://dev.azure.com/devdiv/DevDiv/_workitems/edit/2222322

Our use of tildes as replacement characters for C# in Html documents has
never been great, and has caused issues with JS/TS and Html tooling in
the past, but it seems there are scenarios where
large/complicated/specifically formed Razor documents can actually crash
the JS compiler. Seems it has a perf issue where lots of unary negation
(ie, `~`) causes stack size issues.

This PR mitigates the issue by encoding any stretch of C# characters
that are 4 characters or longer as a JS comment (`/*~~~*/`) so that the
compiler will ignore some of the more problematic chunks of Razor files.
There is one case where we couldn't do that, but any pressure relief
should help even if it's not 100%.
2024-08-29 17:43:54 +10:00
David Wengier ebe3878544 Update existing tests 2024-08-29 13:31:43 +10:00
David Wengier 744e9e3242 Fix integration tests to validate the change 2024-08-29 12:27:03 +10:00
David Wengier a05f9e64c0 Pass virtual document version through, and validate 2024-08-29 12:26:14 +10:00
David Wengier b650ceebd7 Cleanup and rename files to bring them to modern standards
Purely mechanical changes here - using primary constructors, interfaces over abstract classes, etc.
2024-08-29 12:25:44 +10:00
dotnet bot 562be1a220
Merge release/dev17.12 to main (#10809)
This is an automatically generated pull request from release/dev17.12
into main.


Once all conflicts are resolved and all the tests pass, you are free to
merge the pull request. 🐯

## Troubleshooting conflicts

### Identify authors of changes which introduced merge conflicts
Scroll to the bottom, then for each file containing conflicts copy its
path into the following searches:
- https://github.com/dotnet/razor/find/release/dev17.12
- https://github.com/dotnet/razor/find/main

Usually the most recent change to a file between the two branches is
considered to have introduced the conflicts, but sometimes it will be
necessary to look for the conflicting lines and check the blame in each
branch. Generally the author whose change introduced the conflicts
should pull down this PR, fix the conflicts locally, then push up a
commit resolving the conflicts.

### Resolve merge conflicts using your local repo
Sometimes merge conflicts may be present on GitHub but merging locally
will work without conflicts. This is due to differences between the
merge algorithm used in local git versus the one used by GitHub.
``` bash
git fetch --all
git checkout -t upstream/merges/release/dev17.12-to-main
git reset --hard upstream/main
git merge upstream/release/dev17.12
# Fix merge conflicts
git commit
git push upstream merges/release/dev17.12-to-main --force
```
2024-08-28 14:07:55 -07:00