Skip to content

Support: Debug Adapter Protocol #157

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

Merged
merged 27 commits into from
Sep 25, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
192f131
Sample debug adapter reciever
david-driscoll Jul 19, 2019
a0dcf03
Added output handling of Debug Adapter Protocol serialization
david-driscoll Jul 20, 2019
e8801d0
Removed some comments
david-driscoll Jul 20, 2019
7ce175f
fixed failing tests
david-driscoll Jul 20, 2019
62b7cb7
Use interlocked increment
david-driscoll Jul 20, 2019
d89cb20
wip with models, requests and events
david-driscoll Jul 20, 2019
0fc3939
Added DAP models, requests and events
david-driscoll Jul 20, 2019
7286c74
Fixed casing on property names
david-driscoll Jul 20, 2019
3abbb23
Updated namespaces
david-driscoll Jul 21, 2019
460b55d
Updated events to go the correct direction (from the adapter to the c…
david-driscoll Sep 4, 2019
9d3c7cd
remove extra Reciever
TylerLeonhardt Sep 4, 2019
376a411
fix initializeresponse payload
TylerLeonhardt Sep 5, 2019
0291179
WORKAROUND: set success to true to allow messaging to work for now
TylerLeonhardt Sep 5, 2019
d7d1e8d
Merge pull request #167 from TylerLeonhardt/misc-dap-fixes
david-driscoll Sep 9, 2019
cf67cdf
Merge pull request #166 from TylerLeonhardt/patch-1
david-driscoll Sep 9, 2019
4908f44
JsonRpcServer.Dispose() works now
TylerLeonhardt Sep 11, 2019
4605713
additional changes for disposable
TylerLeonhardt Sep 11, 2019
712779f
switch null to new JObject so it can still be parsed into the right type
TylerLeonhardt Sep 14, 2019
18f046b
Merge pull request #168 from TylerLeonhardt/jsonrpcserver-now-disposable
david-driscoll Sep 14, 2019
81b7a1c
Merge pull request #169 from TylerLeonhardt/patch-1
david-driscoll Sep 14, 2019
00a71e2
Merge remote-tracking branch 'origin/master' into dap
david-driscoll Sep 23, 2019
ad627ee
fix up WriteJson for DAP error handling
TylerLeonhardt Sep 24, 2019
d3c0ae2
Merge pull request #172 from TylerLeonhardt/add-errorhandling-to-dap
david-driscoll Sep 24, 2019
a5e210a
Write request id when serializing
bjorkstromm Sep 24, 2019
c7adb13
Fix tests
TylerLeonhardt Sep 24, 2019
44bb20a
Merge pull request #174 from TylerLeonhardt/fix-tests
david-driscoll Sep 25, 2019
8872c70
bump
david-driscoll Sep 25, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 31 additions & 1 deletion LSP.sln
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29025.244
MinimumVisualStudioVersion = 10.0.40219.1
Expand Down Expand Up @@ -50,6 +50,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
cake.config = cake.config
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dap.Protocol", "src\Dap.Protocol\Dap.Protocol.csproj", "{F2C9D555-118E-442B-A953-9A7B58A53F33}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dap.Server", "src\Dap.Server\Dap.Server.csproj", "{E1A9123B-A236-4240-8C82-A61BD85C3BF4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -156,6 +160,30 @@ Global
{E540868F-438E-4F7F-BBB7-010D6CB18A57}.Release|x64.Build.0 = Release|Any CPU
{E540868F-438E-4F7F-BBB7-010D6CB18A57}.Release|x86.ActiveCfg = Release|Any CPU
{E540868F-438E-4F7F-BBB7-010D6CB18A57}.Release|x86.Build.0 = Release|Any CPU
{F2C9D555-118E-442B-A953-9A7B58A53F33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F2C9D555-118E-442B-A953-9A7B58A53F33}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F2C9D555-118E-442B-A953-9A7B58A53F33}.Debug|x64.ActiveCfg = Debug|Any CPU
{F2C9D555-118E-442B-A953-9A7B58A53F33}.Debug|x64.Build.0 = Debug|Any CPU
{F2C9D555-118E-442B-A953-9A7B58A53F33}.Debug|x86.ActiveCfg = Debug|Any CPU
{F2C9D555-118E-442B-A953-9A7B58A53F33}.Debug|x86.Build.0 = Debug|Any CPU
{F2C9D555-118E-442B-A953-9A7B58A53F33}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F2C9D555-118E-442B-A953-9A7B58A53F33}.Release|Any CPU.Build.0 = Release|Any CPU
{F2C9D555-118E-442B-A953-9A7B58A53F33}.Release|x64.ActiveCfg = Release|Any CPU
{F2C9D555-118E-442B-A953-9A7B58A53F33}.Release|x64.Build.0 = Release|Any CPU
{F2C9D555-118E-442B-A953-9A7B58A53F33}.Release|x86.ActiveCfg = Release|Any CPU
{F2C9D555-118E-442B-A953-9A7B58A53F33}.Release|x86.Build.0 = Release|Any CPU
{E1A9123B-A236-4240-8C82-A61BD85C3BF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E1A9123B-A236-4240-8C82-A61BD85C3BF4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E1A9123B-A236-4240-8C82-A61BD85C3BF4}.Debug|x64.ActiveCfg = Debug|Any CPU
{E1A9123B-A236-4240-8C82-A61BD85C3BF4}.Debug|x64.Build.0 = Debug|Any CPU
{E1A9123B-A236-4240-8C82-A61BD85C3BF4}.Debug|x86.ActiveCfg = Debug|Any CPU
{E1A9123B-A236-4240-8C82-A61BD85C3BF4}.Debug|x86.Build.0 = Debug|Any CPU
{E1A9123B-A236-4240-8C82-A61BD85C3BF4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E1A9123B-A236-4240-8C82-A61BD85C3BF4}.Release|Any CPU.Build.0 = Release|Any CPU
{E1A9123B-A236-4240-8C82-A61BD85C3BF4}.Release|x64.ActiveCfg = Release|Any CPU
{E1A9123B-A236-4240-8C82-A61BD85C3BF4}.Release|x64.Build.0 = Release|Any CPU
{E1A9123B-A236-4240-8C82-A61BD85C3BF4}.Release|x86.ActiveCfg = Release|Any CPU
{E1A9123B-A236-4240-8C82-A61BD85C3BF4}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -169,6 +197,8 @@ Global
{97437BE1-2EC3-4F6B-AC75-C3E099040A07} = {2F323ED5-EBF8-45E1-B9D3-C014561B3DDA}
{92B331E9-5225-428D-AE82-37F5F46156A3} = {D764E024-3D3F-4112-B932-2DB722A1BACC}
{E540868F-438E-4F7F-BBB7-010D6CB18A57} = {D764E024-3D3F-4112-B932-2DB722A1BACC}
{F2C9D555-118E-442B-A953-9A7B58A53F33} = {D764E024-3D3F-4112-B932-2DB722A1BACC}
{E1A9123B-A236-4240-8C82-A61BD85C3BF4} = {D764E024-3D3F-4112-B932-2DB722A1BACC}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D38DD0EC-D095-4BCD-B8AF-2D788AF3B9AE}
Expand Down
21 changes: 21 additions & 0 deletions src/Dap.Protocol/Dap.Protocol.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netstandard2.0</TargetFrameworks>
<PlatformTarget>AnyCPU</PlatformTarget>
<AssemblyName>OmniSharp.Extensions.DebugAdapter</AssemblyName>
<RootNamespace>OmniSharp.Extensions.DebugAdapter.Protocol</RootNamespace>
<PackageDescription>Debug Adapter Protocol models, classes, interfaces and helper methods</PackageDescription>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\JsonRpc\JsonRpc.csproj" />
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
<_Parameter1>OmniSharp.Extensions.LanguageServer, PublicKey=0024000004800000940000000602000000240000525341310004000001000100391db875e68eb4bfef49ce14313b9e13f2cd3cc89eb273bbe6c11a55044c7d4f566cf092e1c77ef9e7c75b1496ae7f95d925938f5a01793dd8d9f99ae0a7595779b71b971287d7d7b5960d052078d14f5ce1a85ea5c9fb2f59ac735ff7bc215cab469b7c3486006860bad6f4c3b5204ea2f28dd4e1d05e2cca462cfd593b9f9f</_Parameter1>
</AssemblyAttribute>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
<_Parameter1>OmniSharp.Extensions.LanguageClient, PublicKey=0024000004800000940000000602000000240000525341310004000001000100391db875e68eb4bfef49ce14313b9e13f2cd3cc89eb273bbe6c11a55044c7d4f566cf092e1c77ef9e7c75b1496ae7f95d925938f5a01793dd8d9f99ae0a7595779b71b971287d7d7b5960d052078d14f5ce1a85ea5c9fb2f59ac735ff7bc215cab469b7c3486006860bad6f4c3b5204ea2f28dd4e1d05e2cca462cfd593b9f9f</_Parameter1>
</AssemblyAttribute>
</ItemGroup>

</Project>
20 changes: 20 additions & 0 deletions src/Dap.Protocol/Events/BreakpointEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using OmniSharp.Extensions.DebugAdapter.Protocol.Models;
using OmniSharp.Extensions.Embedded.MediatR;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
public class BreakpointEvent : IRequest
{
/// <summary>
/// The reason for the event.
/// Values: 'changed', 'new', 'removed', etc.
/// </summary>
public string Reason { get; set; }

/// <summary>
/// The 'id' attribute is used to find the target breakpoint and the other attributes are used as the new values.
/// </summary>
public Breakpoint Breakpoint { get; set; }
}

}
17 changes: 17 additions & 0 deletions src/Dap.Protocol/Events/BreakpointExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using OmniSharp.Extensions.DebugAdapter.Protocol.Requests;
using OmniSharp.Extensions.Embedded.MediatR;
using OmniSharp.Extensions.JsonRpc;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
public static class BreakpointExtensions
{
public static void SendBreakpoint(this IDebugClient mediator, BreakpointEvent @event)
{
mediator.SendNotification(EventNames.Breakpoint, @event);
}
}
}
15 changes: 15 additions & 0 deletions src/Dap.Protocol/Events/CapabilitiesEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using OmniSharp.Extensions.DebugAdapter.Protocol.Models;
using OmniSharp.Extensions.Embedded.MediatR;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
public class CapabilitiesEvent : IRequest
{

/// <summary>
/// The set of updated capabilities.
/// </summary>
public Capabilities Capabilities { get; set; }
}

}
17 changes: 17 additions & 0 deletions src/Dap.Protocol/Events/CapabilitiesExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using OmniSharp.Extensions.DebugAdapter.Protocol.Requests;
using OmniSharp.Extensions.Embedded.MediatR;
using OmniSharp.Extensions.JsonRpc;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
public static class CapabilitiesExtensions
{
public static void SendCapabilities(this IDebugClient mediator, CapabilitiesEvent @event)
{
mediator.SendNotification(EventNames.Capabilities, @event);
}
}
}
18 changes: 18 additions & 0 deletions src/Dap.Protocol/Events/ContinuedEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using OmniSharp.Extensions.DebugAdapter.Protocol.Serialization;
using OmniSharp.Extensions.Embedded.MediatR;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
public class ContinuedEvent : IRequest
{
/// <summary>
/// The thread which was continued.
/// </summary>
public long ThreadId { get; set; }

/// <summary>
/// If 'allThreadsContinued' is true, a debug adapter can announce that all threads have continued.
/// </summary>
[Optional] public bool? AllThreadsContinued { get; set; }
}
}
17 changes: 17 additions & 0 deletions src/Dap.Protocol/Events/ContinuedExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using OmniSharp.Extensions.DebugAdapter.Protocol.Requests;
using OmniSharp.Extensions.Embedded.MediatR;
using OmniSharp.Extensions.JsonRpc;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
public static class ContinuedExtensions
{
public static void SendContinued(this IDebugClient mediator, ContinuedEvent @event)
{
mediator.SendNotification(EventNames.Continued, @event);
}
}
}
23 changes: 23 additions & 0 deletions src/Dap.Protocol/Events/EventNames.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
public static class EventNames
{
public const string Initialized = "initialized";
public const string Stopped = "stopped";
public const string Continued = "continued";
public const string Exited = "exited";
public const string Terminated = "terminated";
public const string Thread = "thread";
public const string Output = "output";
public const string Breakpoint = "breakpoint";
public const string Module = "module";
public const string LoadedSource = "loadedSource";
public const string Process = "process";
public const string Capabilities = "capabilities";
}
}
13 changes: 13 additions & 0 deletions src/Dap.Protocol/Events/ExitedEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using OmniSharp.Extensions.Embedded.MediatR;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
public class ExitedEvent : IRequest
{

/// <summary>
/// The exit code returned from the debuggee.
/// </summary>
public long ExitCode { get; set; }
}
}
17 changes: 17 additions & 0 deletions src/Dap.Protocol/Events/ExitedExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using OmniSharp.Extensions.DebugAdapter.Protocol.Requests;
using OmniSharp.Extensions.Embedded.MediatR;
using OmniSharp.Extensions.JsonRpc;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
public static class ExitedExtensions
{
public static void SendExited(this IDebugClient mediator, ExitedEvent @event)
{
mediator.SendNotification(EventNames.Exited, @event);
}
}
}
8 changes: 8 additions & 0 deletions src/Dap.Protocol/Events/InitializedEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using OmniSharp.Extensions.Embedded.MediatR;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
public class InitializedEvent : IRequest
{
}
}
17 changes: 17 additions & 0 deletions src/Dap.Protocol/Events/InitializedExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using OmniSharp.Extensions.DebugAdapter.Protocol.Requests;
using OmniSharp.Extensions.Embedded.MediatR;
using OmniSharp.Extensions.JsonRpc;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
public static class InitializedExtensions
{
public static void SendInitialized(this IDebugClient mediator, InitializedEvent @event)
{
mediator.SendNotification(EventNames.Initialized, @event);
}
}
}
20 changes: 20 additions & 0 deletions src/Dap.Protocol/Events/LoadedSourceEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using OmniSharp.Extensions.DebugAdapter.Protocol.Models;
using OmniSharp.Extensions.Embedded.MediatR;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
public class LoadedSourceEvent : IRequest
{

/// <summary>
/// The reason for the event.
/// </summary>
public LoadedSourceReason Reason { get; set; }

/// <summary>
/// The new, changed, or removed source.
/// </summary>
public Source Source { get; set; }
}

}
17 changes: 17 additions & 0 deletions src/Dap.Protocol/Events/LoadedSourceExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using OmniSharp.Extensions.DebugAdapter.Protocol.Requests;
using OmniSharp.Extensions.Embedded.MediatR;
using OmniSharp.Extensions.JsonRpc;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
public static class LoadedSourceExtensions
{
public static void SendLoadedSource(this IDebugClient mediator, LoadedSourceEvent @event)
{
mediator.SendNotification(EventNames.LoadedSource, @event);
}
}
}
11 changes: 11 additions & 0 deletions src/Dap.Protocol/Events/LoadedSourceReason.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
[JsonConverter(typeof(StringEnumConverter))]
public enum LoadedSourceReason
{
New, Changed, Removed
}
}
20 changes: 20 additions & 0 deletions src/Dap.Protocol/Events/ModuleEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using OmniSharp.Extensions.DebugAdapter.Protocol.Models;
using OmniSharp.Extensions.Embedded.MediatR;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
public class ModuleEvent : IRequest
{

/// <summary>
/// The reason for the event.
/// </summary>
public ModuleEventReason Reason { get; set; }

/// <summary>
/// The new, changed, or removed module. In case of 'removed' only the module id is used.
/// </summary>
public Module Module { get; set; }
}

}
12 changes: 12 additions & 0 deletions src/Dap.Protocol/Events/ModuleEventReason.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
[JsonConverter(typeof(StringEnumConverter))]
public enum ModuleEventReason
{
New, Changed, Removed
}

}
17 changes: 17 additions & 0 deletions src/Dap.Protocol/Events/ModuleExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using OmniSharp.Extensions.DebugAdapter.Protocol.Requests;
using OmniSharp.Extensions.Embedded.MediatR;
using OmniSharp.Extensions.JsonRpc;

namespace OmniSharp.Extensions.DebugAdapter.Protocol.Events
{
public static class ModuleExtensions
{
public static void SendModule(this IDebugClient mediator, ModuleEvent @event)
{
mediator.SendNotification(EventNames.Module, @event);
}
}
}
Loading