Skip to content

Commit

Permalink
Merge pull request #54440 from dotnet/merges/main-to-main-vs-deps
Browse files Browse the repository at this point in the history
Merge main to main-vs-deps
  • Loading branch information
msftbot[bot] committed Jun 28, 2021
2 parents 03a07d1 + f5146e2 commit cb4a5a5
Show file tree
Hide file tree
Showing 5 changed files with 128 additions and 34 deletions.
22 changes: 21 additions & 1 deletion src/Features/Lsif/Generator/Generator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,34 @@ namespace Microsoft.CodeAnalysis.LanguageServerIndexFormat.Generator
{
internal sealed class Generator
{
// LSIF generator capabilities. See https://github.com/microsoft/lsif-node/blob/main/protocol/src/protocol.ts#L925 for details.
private const bool HoverProvider = true;
private const bool DeclarationProvider = false;
private const bool DefinitionProvider = true;
private const bool ReferencesProvider = true;
private const bool TypeDefinitionProvider = false;
private const bool DocumentSymbolProvider = false;
private const bool FoldingRangeProvider = true;
private const bool DiagnosticProvider = false;

private readonly ILsifJsonWriter _lsifJsonWriter;
private readonly IdFactory _idFactory = new IdFactory();

public Generator(ILsifJsonWriter lsifJsonWriter)
private Generator(ILsifJsonWriter lsifJsonWriter)
{
_lsifJsonWriter = lsifJsonWriter;
}

public static Generator CreateAndWriteCapabilitiesVertex(ILsifJsonWriter lsifJsonWriter)
{
var generator = new Generator(lsifJsonWriter);
var capabilitiesVertex = new Capabilities(generator._idFactory,
HoverProvider, DeclarationProvider, DefinitionProvider, ReferencesProvider,
TypeDefinitionProvider, DocumentSymbolProvider, FoldingRangeProvider, DiagnosticProvider);
generator._lsifJsonWriter.Write(capabilitiesVertex);
return generator;
}

public void GenerateForCompilation(Compilation compilation, string projectPath, HostLanguageServices languageServices, OptionSet options)
{
var projectVertex = new Graph.LsifProject(kind: GetLanguageKind(compilation.Language), new Uri(projectPath), _idFactory);
Expand Down
60 changes: 60 additions & 0 deletions src/Features/Lsif/Generator/Graph/Capabilities.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using Newtonsoft.Json;

namespace Microsoft.CodeAnalysis.LanguageServerIndexFormat.Generator.Graph
{
/// <summary>
/// Represents a single Capabilities vertex for serialization. See https://github.com/microsoft/lsif-node/blob/main/protocol/src/protocol.ts#L973 for further details.
/// </summary>
internal sealed class Capabilities : Vertex
{
[JsonProperty("hoverProvider")]
public bool HoverProvider { get; }

[JsonProperty("declarationProvider")]
public bool DeclarationProvider { get; }

[JsonProperty("definitionProvider")]
public bool DefinitionProvider { get; }

[JsonProperty("referencesProvider")]
public bool ReferencesProvider { get; }

[JsonProperty("typeDefinitionProvider")]
public bool TypeDefinitionProvider { get; }

[JsonProperty("documentSymbolProvider")]
public bool DocumentSymbolProvider { get; }

[JsonProperty("foldingRangeProvider")]
public bool FoldingRangeProvider { get; }

[JsonProperty("diagnosticProvider")]
public bool DiagnosticProvider { get; }

public Capabilities(
IdFactory idFactory,
bool hoverProvider,
bool declarationProvider,
bool definitionProvider,
bool referencesProvider,
bool typeDefinitionProvider,
bool documentSymbolProvider,
bool foldingRangeProvider,
bool diagnosticProvider)
: base(label: "capabilities", idFactory)
{
HoverProvider = hoverProvider;
DeclarationProvider = declarationProvider;
DefinitionProvider = definitionProvider;
ReferencesProvider = referencesProvider;
TypeDefinitionProvider = typeDefinitionProvider;
DocumentSymbolProvider = documentSymbolProvider;
FoldingRangeProvider = foldingRangeProvider;
DiagnosticProvider = diagnosticProvider;
}
}
}
4 changes: 2 additions & 2 deletions src/Features/Lsif/Generator/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ private static async Task GenerateWithMSBuildLocatedAsync(
var solution = await openAsync(msbuildWorkspace);

await logFile.WriteLineAsync($"Load completed in {solutionLoadStopwatch.Elapsed.ToDisplayString()}.");
var lsifGenerator = new Generator(lsifWriter);
var lsifGenerator = Generator.CreateAndWriteCapabilitiesVertex(lsifWriter);

var totalTimeInGenerationAndCompilationFetchStopwatch = Stopwatch.StartNew();
var totalTimeInGenerationPhase = TimeSpan.Zero;
Expand Down Expand Up @@ -173,7 +173,7 @@ private static async Task GenerateFromCompilerInvocationAsync(FileInfo compilerI
await logFile.WriteLineAsync($"Load of the project completed in {compilerInvocationLoadStopwatch.Elapsed.ToDisplayString()}.");

var generationStopwatch = Stopwatch.StartNew();
var lsifGenerator = new Generator(lsifWriter);
var lsifGenerator = Generator.CreateAndWriteCapabilitiesVertex(lsifWriter);

lsifGenerator.GenerateForCompilation(compilerInvocation.Compilation, compilerInvocation.ProjectFilePath, compilerInvocation.LanguageServices, compilerInvocation.Options);
await logFile.WriteLineAsync($"Generation for {compilerInvocation.ProjectFilePath} completed in {generationStopwatch.Elapsed.ToDisplayString()}.");
Expand Down
72 changes: 43 additions & 29 deletions src/Features/Lsif/GeneratorTest/OutputFormatTests.vb
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,17 @@ Namespace Microsoft.CodeAnalysis.LanguageServerIndexFormat.Generator.UnitTests
</Workspace>), jsonWriter)

AssertEx.EqualOrDiff(
"{""kind"":""csharp"",""resource"":""file:///Z:/TestProject.csproj"",""id"":1,""type"":""vertex"",""label"":""project""}
{""kind"":""begin"",""scope"":""project"",""data"":1,""id"":2,""type"":""vertex"",""label"":""$event""}
{""uri"":""file:///Z:/A.cs"",""languageId"":""csharp"",""id"":3,""type"":""vertex"",""label"":""document""}
{""kind"":""begin"",""scope"":""document"",""data"":3,""id"":4,""type"":""vertex"",""label"":""$event""}
{""outV"":3,""inVs"":[],""id"":5,""type"":""edge"",""label"":""contains""}
{""result"":[],""id"":6,""type"":""vertex"",""label"":""foldingRangeResult""}
{""outV"":3,""inVs"":[6],""id"":7,""type"":""edge"",""label"":""textDocument/foldingRange""}
{""kind"":""end"",""scope"":""document"",""data"":3,""id"":8,""type"":""vertex"",""label"":""$event""}
{""outV"":1,""inVs"":[3],""id"":9,""type"":""edge"",""label"":""contains""}
{""kind"":""end"",""scope"":""project"",""data"":1,""id"":10,""type"":""vertex"",""label"":""$event""}
"{""hoverProvider"":true,""declarationProvider"":false,""definitionProvider"":true,""referencesProvider"":true,""typeDefinitionProvider"":false,""documentSymbolProvider"":false,""foldingRangeProvider"":true,""diagnosticProvider"":false,""id"":1,""type"":""vertex"",""label"":""capabilities""}
{""kind"":""csharp"",""resource"":""file:///Z:/TestProject.csproj"",""id"":2,""type"":""vertex"",""label"":""project""}
{""kind"":""begin"",""scope"":""project"",""data"":2,""id"":3,""type"":""vertex"",""label"":""$event""}
{""uri"":""file:///Z:/A.cs"",""languageId"":""csharp"",""id"":4,""type"":""vertex"",""label"":""document""}
{""kind"":""begin"",""scope"":""document"",""data"":4,""id"":5,""type"":""vertex"",""label"":""$event""}
{""outV"":4,""inVs"":[],""id"":6,""type"":""edge"",""label"":""contains""}
{""result"":[],""id"":7,""type"":""vertex"",""label"":""foldingRangeResult""}
{""outV"":4,""inVs"":[7],""id"":8,""type"":""edge"",""label"":""textDocument/foldingRange""}
{""kind"":""end"",""scope"":""document"",""data"":4,""id"":9,""type"":""vertex"",""label"":""$event""}
{""outV"":2,""inVs"":[4],""id"":10,""type"":""edge"",""label"":""contains""}
{""kind"":""end"",""scope"":""project"",""data"":2,""id"":11,""type"":""vertex"",""label"":""$event""}
", stringWriter.ToString())
End Function

Expand All @@ -54,80 +55,93 @@ Namespace Microsoft.CodeAnalysis.LanguageServerIndexFormat.Generator.UnitTests

AssertEx.EqualOrDiff(
"[
{
""hoverProvider"": true,
""declarationProvider"": false,
""definitionProvider"": true,
""referencesProvider"": true,
""typeDefinitionProvider"": false,
""documentSymbolProvider"": false,
""foldingRangeProvider"": true,
""diagnosticProvider"": false,
""id"": 1,
""type"": ""vertex"",
""label"": ""capabilities""
},
{
""kind"": ""csharp"",
""resource"": ""file:///Z:/TestProject.csproj"",
""id"": 1,
""id"": 2,
""type"": ""vertex"",
""label"": ""project""
},
{
""kind"": ""begin"",
""scope"": ""project"",
""data"": 1,
""id"": 2,
""data"": 2,
""id"": 3,
""type"": ""vertex"",
""label"": ""$event""
},
{
""uri"": ""file:///Z:/A.cs"",
""languageId"": ""csharp"",
""id"": 3,
""id"": 4,
""type"": ""vertex"",
""label"": ""document""
},
{
""kind"": ""begin"",
""scope"": ""document"",
""data"": 3,
""id"": 4,
""data"": 4,
""id"": 5,
""type"": ""vertex"",
""label"": ""$event""
},
{
""outV"": 3,
""outV"": 4,
""inVs"": [],
""id"": 5,
""id"": 6,
""type"": ""edge"",
""label"": ""contains""
},
{
""result"": [],
""id"": 6,
""id"": 7,
""type"": ""vertex"",
""label"": ""foldingRangeResult""
},
{
""outV"": 3,
""outV"": 4,
""inVs"": [
6
7
],
""id"": 7,
""id"": 8,
""type"": ""edge"",
""label"": ""textDocument/foldingRange""
},
{
""kind"": ""end"",
""scope"": ""document"",
""data"": 3,
""id"": 8,
""data"": 4,
""id"": 9,
""type"": ""vertex"",
""label"": ""$event""
},
{
""outV"": 1,
""outV"": 2,
""inVs"": [
3
4
],
""id"": 9,
""id"": 10,
""type"": ""edge"",
""label"": ""contains""
},
{
""kind"": ""end"",
""scope"": ""project"",
""data"": 1,
""id"": 10,
""data"": 2,
""id"": 11,
""type"": ""vertex"",
""label"": ""$event""
}
Expand Down
4 changes: 2 additions & 2 deletions src/Features/Lsif/GeneratorTest/Utilities/TestLsifOutput.vb
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,15 @@ Namespace Microsoft.CodeAnalysis.LanguageServerIndexFormat.Generator.UnitTests.U
End Function

Public Shared Async Function GenerateForWorkspaceAsync(workspace As TestWorkspace, jsonWriter As ILsifJsonWriter) As Task
Dim generator = New Generator(jsonWriter)
Dim lsifGenerator = Generator.CreateAndWriteCapabilitiesVertex(jsonWriter)

For Each project In workspace.CurrentSolution.Projects
Dim compilation = Await project.GetCompilationAsync()

' Assert we don't have any errors to prevent any typos in the tests
Assert.Empty(compilation.GetDiagnostics().Where(Function(d) d.Severity = DiagnosticSeverity.Error))

generator.GenerateForCompilation(compilation, project.FilePath, project.LanguageServices, project.Solution.Options)
lsifGenerator.GenerateForCompilation(compilation, project.FilePath, project.LanguageServices, project.Solution.Options)
Next
End Function

Expand Down

0 comments on commit cb4a5a5

Please sign in to comment.