-
Notifications
You must be signed in to change notification settings - Fork 39
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ashmind/SharpLab#1289] Fix support for Microsoft.CodeAnalysis 4.9
- Loading branch information
Showing
18 changed files
with
2,737 additions
and
93 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
using System.Collections.Immutable; | ||
using System.Composition; | ||
using Microsoft.CodeAnalysis.CodeActions; | ||
using MirrorSharp.Internal.Roslyn.Internals; | ||
|
||
namespace MirrorSharp.Internal.Roslyn47 { | ||
[Shared] | ||
[Export(typeof(ICodeActionInternals))] | ||
internal class CodeActionInternals : ICodeActionInternals { | ||
public bool IsInlinable(CodeAction action) { | ||
Argument.NotNull(nameof(action), action); | ||
return action.IsInlinable; | ||
} | ||
|
||
public Roslyn.Internals.CodeActionPriority GetPriority(CodeAction action) { | ||
Argument.NotNull(nameof(action), action); | ||
return (Roslyn.Internals.CodeActionPriority)(int)action.Priority; | ||
} | ||
|
||
public ImmutableArray<CodeAction> GetNestedCodeActions(CodeAction action) { | ||
Argument.NotNull(nameof(action), action); | ||
return action.NestedCodeActions; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
<PropertyGroup> | ||
<TargetFramework>netstandard2.0</TargetFramework> | ||
<AssemblyName>MirrorSharp.Internal.Roslyn49</AssemblyName> | ||
<RootNamespace>MirrorSharp.Internal.Roslyn49</RootNamespace> | ||
<IsPackable>false</IsPackable> | ||
</PropertyGroup> | ||
|
||
<PropertyGroup> | ||
<InternalsAssemblyNames>Microsoft.CodeAnalysis.Features;Microsoft.CodeAnalysis.Workspaces</InternalsAssemblyNames> | ||
</PropertyGroup> | ||
|
||
<PropertyGroup> | ||
<RestoreAdditionalProjectSources> | ||
https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json; | ||
https://pkgs.dev.azure.com/azure-public/vside/_packaging/vs-impl/nuget/v3/index.json | ||
</RestoreAdditionalProjectSources> | ||
</PropertyGroup> | ||
|
||
<ItemGroup> | ||
<PackageReference Include="IgnoresAccessChecksToGenerator" Version="0.5.0" PrivateAssets="All" /> | ||
<PackageReference Include="Microsoft.CodeAnalysis" Version="4.9.0-1.23513.1" PrivateAssets="All" /> | ||
<PackageReference Include="Microsoft.CodeAnalysis.Features" Version="4.9.0-1.23513.1" PrivateAssets="All" /> | ||
<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="4.9.0-1.23513.1" PrivateAssets="All" /> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<ProjectReference Include="..\Internal.RoslynInternals\Internal.RoslynInternals.csproj" /> | ||
</ItemGroup> | ||
</Project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Collections.Immutable; | ||
using System.Composition; | ||
using System.Threading; | ||
using System.Threading.Tasks; | ||
using Microsoft.CodeAnalysis; | ||
using Microsoft.CodeAnalysis.CodeActions; | ||
using Microsoft.CodeAnalysis.Diagnostics; | ||
using Microsoft.CodeAnalysis.Options; | ||
using Microsoft.CodeAnalysis.Text; | ||
|
||
namespace MirrorSharp.Internal.Roslyn47 { | ||
[Shared] | ||
[Export(typeof(IDiagnosticAnalyzerService))] | ||
internal class MirrorSharpDiagnosticAnalyzerService : IDiagnosticAnalyzerService { | ||
DiagnosticAnalyzerInfoCache IDiagnosticAnalyzerService.AnalyzerInfoCache { get; } = new(); | ||
IGlobalOptionService IDiagnosticAnalyzerService.GlobalOptions => throw new NotSupportedException(); | ||
Task IDiagnosticAnalyzerService.ForceAnalyzeProjectAsync(Project project, CancellationToken cancellationToken) => throw new NotSupportedException(); | ||
Task<ImmutableArray<DiagnosticData>> IDiagnosticAnalyzerService.GetCachedDiagnosticsAsync(Workspace workspace, ProjectId? projectId, DocumentId? documentId, bool includeSuppressedDiagnostics, bool includeLocalDocumentDiagnostics, bool includeNonLocalDocumentDiagnostics, CancellationToken cancellationToken) => throw new NotSupportedException(); | ||
Task<ImmutableArray<DiagnosticData>> IDiagnosticAnalyzerService.GetDiagnosticsAsync(Solution solution, ProjectId? projectId, DocumentId? documentId, bool includeSuppressedDiagnostics, bool includeNonLocalDocumentDiagnostics, CancellationToken cancellationToken) => throw new NotSupportedException(); | ||
Task<ImmutableArray<DiagnosticData>> IDiagnosticAnalyzerService.GetDiagnosticsForIdsAsync(Solution solution, ProjectId? projectId, DocumentId? documentId, ImmutableHashSet<string>? diagnosticIds, Func<DiagnosticAnalyzer, bool>? shouldIncludeAnalyzer, bool includeSuppressedDiagnostics, bool includeLocalDocumentDiagnostics, bool includeNonLocalDocumentDiagnostics, CancellationToken cancellationToken) => throw new NotSupportedException(); | ||
Task<ImmutableArray<DiagnosticData>> IDiagnosticAnalyzerService.GetDiagnosticsForSpanAsync(TextDocument document, TextSpan? range, Func<string, bool>? shouldIncludeDiagnostic, bool includeCompilerDiagnostics, bool includeSuppressedDiagnostics, ICodeActionRequestPriorityProvider priorityProvider, Func<string, IDisposable?>? addOperationScope, DiagnosticKind diagnosticKind, bool isExplicit, CancellationToken cancellationToken) => throw new NotSupportedException(); | ||
Task<ImmutableArray<DiagnosticData>> IDiagnosticAnalyzerService.GetProjectDiagnosticsForIdsAsync(Solution solution, ProjectId? projectId, ImmutableHashSet<string>? diagnosticIds, Func<DiagnosticAnalyzer, bool>? shouldIncludeAnalyzer, bool includeSuppressedDiagnostics, bool includeNonLocalDocumentDiagnostics, CancellationToken cancellationToken) => throw new NotSupportedException(); | ||
Task<ImmutableArray<DiagnosticData>> IDiagnosticAnalyzerService.GetSpecificCachedDiagnosticsAsync(Workspace workspace, object id, bool includeSuppressedDiagnostics, bool includeNonLocalDocumentDiagnostics, CancellationToken cancellationToken) => throw new NotSupportedException(); | ||
void IDiagnosticAnalyzerService.Reanalyze(Workspace workspace, IEnumerable<ProjectId>? projectIds, IEnumerable<DocumentId>? documentIds, bool highPriority) => throw new NotSupportedException(); | ||
Task<(ImmutableArray<DiagnosticData> diagnostics, bool upToDate)> IDiagnosticAnalyzerService.TryGetDiagnosticsForSpanAsync(TextDocument document, TextSpan range, Func<string, bool>? shouldIncludeDiagnostic, bool includeSuppressedDiagnostics, ICodeActionRequestPriorityProvider priorityProvider, DiagnosticKind diagnosticKind, bool isExplicit, CancellationToken cancellationToken) => throw new NotSupportedException(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
#nullable enable |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
using System.Linq; | ||
using System.Threading; | ||
using System.Threading.Tasks; | ||
using Microsoft.CodeAnalysis; | ||
using Microsoft.CodeAnalysis.SignatureHelp; | ||
using MirrorSharp.Internal.Roslyn.Internals; | ||
using SignatureHelpTriggerReason = Microsoft.CodeAnalysis.SignatureHelp.SignatureHelpTriggerReason; | ||
|
||
namespace MirrorSharp.Internal.Roslyn47 { | ||
internal class SignatureHelpProviderWrapper : ISignatureHelpProviderWrapper { | ||
private readonly ISignatureHelpProvider _provider; | ||
|
||
public SignatureHelpProviderWrapper(ISignatureHelpProvider provider) { | ||
_provider = provider; | ||
} | ||
|
||
public async Task<SignatureHelpItemsData?> GetItemsAsync(Document document, int position, SignatureHelpTriggerInfoData triggerInfo, SignatureHelpOptionsData options, CancellationToken cancellationToken) { | ||
// This is quite complicated to implement correctly and is still shifting around. | ||
// For now we will only allow default options. There is no way to check if user | ||
// intended something different, but that can be implemented later. | ||
var mappedOptions = SignatureHelpOptions.Default; | ||
var mappedTriggerInfo = new SignatureHelpTriggerInfo( | ||
(SignatureHelpTriggerReason)(int)triggerInfo.TriggerReason, | ||
triggerInfo.TriggerCharacter | ||
); | ||
|
||
var items = await _provider.GetItemsAsync( | ||
document, position, | ||
mappedTriggerInfo, | ||
mappedOptions, cancellationToken | ||
).ConfigureAwait(false); | ||
|
||
if (items == null) | ||
return null; | ||
|
||
return new SignatureHelpItemsData( | ||
items.Items.Select(i => new SignatureHelpItemData( | ||
i.DocumentationFactory, | ||
prefixDisplayParts: i.PrefixDisplayParts, | ||
separatorDisplayParts: i.SeparatorDisplayParts, | ||
suffixDisplayParts: i.SuffixDisplayParts, | ||
parameters: i.Parameters.Select(p => new SignatureHelpParameterData( | ||
p.Name, | ||
p.DocumentationFactory, | ||
displayParts: p.DisplayParts, | ||
prefixDisplayParts: p.PrefixDisplayParts, | ||
suffixDisplayParts: p.SuffixDisplayParts | ||
)), | ||
i.Parameters.Length | ||
)), | ||
applicableSpan: items.ApplicableSpan, | ||
argumentIndex: items.ArgumentIndex, | ||
argumentCount: items.ArgumentCount, | ||
selectedItemIndex: items.SelectedItemIndex | ||
); | ||
} | ||
|
||
public bool IsRetriggerCharacter(char ch) => _provider.IsRetriggerCharacter(ch); | ||
public bool IsTriggerCharacter(char ch) => _provider.IsTriggerCharacter(ch); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Composition; | ||
using System.Linq; | ||
using Microsoft.CodeAnalysis.Host.Mef; | ||
using Microsoft.CodeAnalysis.Shared.Utilities; | ||
using Microsoft.CodeAnalysis.SignatureHelp; | ||
using MirrorSharp.Internal.Roslyn.Internals; | ||
|
||
namespace MirrorSharp.Internal.Roslyn47 { | ||
[Export(typeof(ISignatureHelpProviderWrapperResolver))] | ||
internal class SignatureHelpProviderWrapperResolver : ISignatureHelpProviderWrapperResolver { | ||
private readonly IList<Lazy<ISignatureHelpProvider, OrderableLanguageMetadata>> _allProviders; | ||
|
||
[ImportingConstructor] | ||
public SignatureHelpProviderWrapperResolver( | ||
[ImportMany] IEnumerable<Lazy<ISignatureHelpProvider, OrderableLanguageMetadata>> allProviders | ||
) { | ||
_allProviders = ExtensionOrderer.Order(allProviders); | ||
} | ||
|
||
public IEnumerable<ISignatureHelpProviderWrapper> GetAllSlow(string languageName) { | ||
if (languageName == null) | ||
throw new ArgumentNullException(nameof(languageName)); | ||
|
||
return _allProviders | ||
.Where(l => l.Metadata.Language == languageName) | ||
.Select(l => new SignatureHelpProviderWrapper(l.Value)); | ||
} | ||
} | ||
} |
Oops, something went wrong.