Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use Roslyn project info in cohost endpoints #9805

Merged
merged 9 commits into from
Jan 12, 2024

Conversation

davidwengier
Copy link
Contributor

Part of #9519

This PR is the very first baby step towards using the Roslyn project system in cohosting.

What it does:

  • Creates document and project snapshots from Roslyn document and project snapshots for document color and semantic tokens requests
  • Provides a point for @chsienki and co to put their calls to the source generator to get the generated code (in CohostDocumentSnapshot.GetGeneratedOutput) and host outputs (various places in CohostProjectSnapshot)

What it doesn't do:

  • Anything good for performance. This is blindly discovering tag helpers whenever a project snapshot changes, rather that trying to carry them forward
    • The source generator will do that work
  • Remove any of the old systems, meaning everything is running in parallel with the current Razor project system
    • As can be seen with the hacky method on DocumentVersionContext where the new code just blindly assumes the latest version, because document snapshot generation during typing is still coming from the Razor project system

Very much a stepping stone. Next steps is to work out how to get RazorCustomMessageTarget onto using roslyn types, or remove it, or just skip synchronization if cohosting is turned on.

@davidwengier davidwengier requested a review from a team as a code owner January 11, 2024 04:15
return ImmutableArray<IDocumentSnapshot>.Empty;
}

using var _ = ArrayBuilderPool<IDocumentSnapshot>.GetPooledObject(out var builder);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider using a PooledArrayBuilder if the result will regularly be larger than 4 items.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you mean if it will be less than 4 items? If it's more than 4, doesn't the PooledArrayBuilder just switch to using the ArrayBuilderPool anyway?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Having said that, I just copied this code as is, and it can be improved slightly by specifying a capacity at least

Copy link
Member

@DustinCampbell DustinCampbell Jan 12, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, sorry - I meant "less than 4 items". PooledArrayBuilder can help avoid starvation of the ArrayBuilderPool and is useful when smaller arrays are expected. I'm not 100% sure what GetRelatedDocuments means. Based on the code and the name of the map, I would guess it means, "the documents that use this import"? If so, ArrayBuilderPool is probably the way to go.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, that's my reading too, and I agree. Thanks for confirming

@davidwengier davidwengier merged commit e89aa9a into main Jan 12, 2024
12 checks passed
@davidwengier davidwengier deleted the dev/dawengie/UseRoslynProjectMore branch January 12, 2024 20:07
@ghost ghost added this to the Next milestone Jan 12, 2024
@Cosifne Cosifne modified the milestones: Next, 17.10 P1 Jan 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants