Language Server Protocol in C#
As part of this release we had 76 issues closed.
Serializer
renamed to LSPSerializer
The 3.16 specification defines the SemanticLegend in such a way that the client produces a list of supported tokens and the server must return the tokens it supports and the index order it will use.
Today we get the registration options at registration of a handler, but this is typically before we have started communicating with the server.
This change adds a new interface IRegistrationOptions<TOptions, TCapability>
and all interfaces have been updated to implement this interface if they have both a client capability and a server registration option.
The abstract base classes by the above change now have a new method that must be implemented.
protected internal abstract TRegistrationOptions CreateRegistrationOptions(TCapability capability);
The base handler then caches the resulting value so this method is only ever called once.
Existing implementations of GetRegistrationOptions
can be replaced with CreateRegistrationOptions
.
All the abstract handler base classes have been renamed to have a Suffix of "Base" if there was not one there before.
The fix for this is simply to make sure the Base
suffix has been applied.
This is not a breaking change, the goal was to make sure that namespaces did not change, if there is a miss let me know.
Any classes related to the Request, Response, Capability and Registration Options have been moved into a XyzFeature.cs
file. This will help reduce the number of overall files in the repo, as well as hopefully with discoverabiliy. More importantly this make it easier to create new features, as all the components for a given feature will be in the same file.
The IDidXyzTextDocument handlers have been updated to have specific named options, and a master options class TextDocumentSyncRegistrationOptions
has been added. You provide the TextDocumentSyncRegistrationOptions
and all the other named options can be implicitly created from it.
Source Generation has been refactored to be a little more flexible and better organized (it's not prefect but better).
Some documentation has been added to document the attributes and their usage. These should available to consumers to also use themselves, please let me know of any bugs you might encounter with them.
HandlerIdentity
is now an interface named IHandlerIdentity
HandlerIdentity is not automatically implemented via source generators (you can implement it yourself if you want to)
This type is used to ensure proper routing of CodeAction, CodeLens and other requests. Changing it an interface was required to support classes and records at the same time.
Most model classes have been moved to record
classes and init
only properties. This allows use of the with
operator.
Records are supported in netstandard2.0 using a shim class very similar to null reference types.
Microsoft.Extensions.Configuration.Binder and Microsoft.Extensions.Options.ConfigurationExtensions have been added to make integration between configuration and options a little easier.
CompletionItem
has been updated as the per the spec, to be a union of TextEdit
and InsertRangeEdit
.
The spec added deeper definition for integer, unsigned integer and decimal
uinteger
- Defines an unsigned integer number in the range of 0 to 2^31 - 1. Due to this constraint it's easier for us to just keep using int instead of causing some headache by using uint.
long
is now gone, replaced with int
. Also a few places where precentage was allowed had been double
but they have been changed to uint
so they have been changed to int
accordingly
Types with breaking changes:
FoldingRange
BooleanNumberString
IWorkDoneObserver
WorkDoneProgressBegin
WorkDoneProgressReport
member
has been renamed method
as per the spec.
Request objects with the prefix "Set", "Attach", "Launch" or "Read" will no longer be prefixed with "Send" or "Request".
router.change affects the following:
SetVariableArguments
- from router.SendSetVariable(...)
to router.SetVariable()
AttachRequestArguments
- from router.RequestAttach(...)
to router.Attach()
LaunchRequestArguments
- from router.RequestAttach(...)
to router.Launch()
ReadMemoryArguments
- from router.SendReadMemory(...)
to router.ReadMemory()
SetBreakpointsArguments
- from router.SendSetBreakpoints(...)
to router.SetBreakpoints()
SetDataBreakpointsArguments
- from router.SendSetDataBreakpoints(...)
to router.SetDataBreakpoints()
SetExceptionBreakpointsArguments
- from router.SendSetExceptionBreakpoints(...)
to router.SetExceptionBreakpoints()
SetExpressionArguments
- from router.SendSetExpression(...)
to router.SetExpression()
SetFunctionBreakpointsArguments
- from router.SendSetFunctionBreakpoints(...)
to router.SetFunctionBreakpoints()
SetInstructionBreakpointsArguments
- from router.SendSetInstructionBreakpoints(...)
to router.SetInstructionBreakpoints()
SetTraceParams
- from router.SendSetTrace(...)
to router.SetTrace()
The property TelemetryEvent.Data
has been renamed to ExtensionData
and the type has been changed as well.
#479 added support for return types from execute command, as a part of that change the name of the helper base classes has changed from ExecuteCommandHandlerBase<>
to ExecuteTypedCommandHandlerBase<>
. A new set of classes named ExecuteTypedResponseCommandHandlerBase<>
have also been added.
breaking changes
feature
enhancements
bugs
chores
mysterious
dependenciess
As part of this release we had 76 issues closed.
Serializer
renamed to LSPSerializer
The 3.16 specification defines the SemanticLegend in such a way that the client produces a list of supported tokens and the server must return the tokens it supports and the index order it will use.
Today we get the registration options at registration of a handler, but this is typically before we have started communicating with the server.
This change adds a new interface IRegistrationOptions<TOptions, TCapability>
and all interfaces have been updated to implement this interface if they have both a client capability and a server registration option.
The abstract base classes by the above change now have a new method that must be implemented.
protected internal abstract TRegistrationOptions CreateRegistrationOptions(TCapability capability);
The base handler then caches the resulting value so this method is only ever called once.
Existing implementations of GetRegistrationOptions
can be replaced with CreateRegistrationOptions
.
All the abstract handler base classes have been renamed to have a Suffix of "Base" if there was not one there before.
The fix for this is simply to make sure the Base
suffix has been applied.
This is not a breaking change, the goal was to make sure that namespaces did not change, if there is a miss let me know.
Any classes related to the Request, Response, Capability and Registration Options have been moved into a XyzFeature.cs
file. This will help reduce the number of overall files in the repo, as well as hopefully with discoverabiliy. More importantly this make it easier to create new features, as all the components for a given feature will be in the same file.
The IDidXyzTextDocument handlers have been updated to have specific named options, and a master options class TextDocumentSyncRegistrationOptions
has been added. You provide the TextDocumentSyncRegistrationOptions
and all the other named options can be implicitly created from it.
Source Generation has been refactored to be a little more flexible and better organized (it's not prefect but better).
Some documentation has been added to document the attributes and their usage. These should available to consumers to also use themselves, please let me know of any bugs you might encounter with them.
HandlerIdentity
is now an interface named IHandlerIdentity
HandlerIdentity is not automatically implemented via source generators (you can implement it yourself if you want to)
This type is used to ensure proper routing of CodeAction, CodeLens and other requests. Changing it an interface was required to support classes and records at the same time.
Most model classes have been moved to record
classes and init
only properties. This allows use of the with
operator.
Records are supported in netstandard2.0 using a shim class very similar to null reference types.
Microsoft.Extensions.Configuration.Binder and Microsoft.Extensions.Options.ConfigurationExtensions have been added to make integration between configuration and options a little easier.
CompletionItem
has been updated as the per the spec, to be a union of TextEdit
and InsertRangeEdit
.
The spec added deeper definition for integer, unsigned integer and decimal
uinteger
- Defines an unsigned integer number in the range of 0 to 2^31 - 1. Due to this constraint it's easier for us to just keep using int instead of causing some headache by using uint.
long
is now gone, replaced with int
. Also a few places where precentage was allowed had been double
but they have been changed to uint
so they have been changed to int
accordingly
Types with breaking changes:
FoldingRange
BooleanNumberString
IWorkDoneObserver
WorkDoneProgressBegin
WorkDoneProgressReport
member
has been renamed method
as per the spec.
Request objects with the prefix "Set", "Attach", "Launch" or "Read" will no longer be prefixed with "Send" or "Request".
router.change affects the following:
SetVariableArguments
- from router.SendSetVariable(...)
to router.SetVariable()
AttachRequestArguments
- from router.RequestAttach(...)
to router.Attach()
LaunchRequestArguments
- from router.RequestAttach(...)
to router.Launch()
ReadMemoryArguments
- from router.SendReadMemory(...)
to router.ReadMemory()
SetBreakpointsArguments
- from router.SendSetBreakpoints(...)
to router.SetBreakpoints()
SetDataBreakpointsArguments
- from router.SendSetDataBreakpoints(...)
to router.SetDataBreakpoints()
SetExceptionBreakpointsArguments
- from router.SendSetExceptionBreakpoints(...)
to router.SetExceptionBreakpoints()
SetExpressionArguments
- from router.SendSetExpression(...)
to router.SetExpression()
SetFunctionBreakpointsArguments
- from router.SendSetFunctionBreakpoints(...)
to router.SetFunctionBreakpoints()
SetInstructionBreakpointsArguments
- from router.SendSetInstructionBreakpoints(...)
to router.SetInstructionBreakpoints()
SetTraceParams
- from router.SendSetTrace(...)
to router.SetTrace()
The property TelemetryEvent.Data
has been renamed to ExtensionData
and the type has been changed as well.
#479 added support for return types from execute command, as a part of that change the name of the helper base classes has changed from ExecuteCommandHandlerBase<>
to ExecuteTypedCommandHandlerBase<>
. A new set of classes named ExecuteTypedResponseCommandHandlerBase<>
have also been added.
breaking changes
feature
enhancements
bugs
chores
mysterious
dependenciess
As part of this release we had 62 issues closed.
Serializer
renamed to LSPSerializer
The 3.16 specification defines the SemanticLegend in such a way that the client produces a list of supported tokens and the server must return the tokens it supports and the index order it will use.
Today we get the registration options at registration of a handler, but this is typically before we have started communicating with the server.
This change adds a new interface IRegistrationOptions<TOptions, TCapability>
and all interfaces have been updated to implement this interface if they have both a client capability and a server registration option.
The abstract base classes by the above change now have a new method that must be implemented.
protected internal abstract TRegistrationOptions CreateRegistrationOptions(TCapability capability);
The base handler then caches the resulting value so this method is only ever called once.
Existing implementations of GetRegistrationOptions
can be replaced with CreateRegistrationOptions
.
All the abstract handler base classes have been renamed to have a Suffix of "Base" if there was not one there before.
The fix for this is simply to make sure the Base
suffix has been applied.
This is not a breaking change, the goal was to make sure that namespaces did not change, if there is a miss let me know.
Any classes related to the Request, Response, Capability and Registration Options have been moved into a XyzFeature.cs
file. This will help reduce the number of overall files in the repo, as well as hopefully with discoverabiliy. More importantly this make it easier to create new features, as all the components for a given feature will be in the same file.
The IDidXyzTextDocument handlers have been updated to have specific named options, and a master options class TextDocumentSyncRegistrationOptions
has been added. You provide the TextDocumentSyncRegistrationOptions
and all the other named options can be implicitly created from it.
Source Generation has been refactored to be a little more flexible and better organized (it's not prefect but better).
Some documentation has been added to document the attributes and their usage. These should available to consumers to also use themselves, please let me know of any bugs you might encounter with them.
HandlerIdentity
is now an interface named IHandlerIdentity
HandlerIdentity is not automatically implemented via source generators (you can implement it yourself if you want to)
This type is used to ensure proper routing of CodeAction, CodeLens and other requests. Changing it an interface was required to support classes and records at the same time.
Most model classes have been moved to record
classes and init
only properties. This allows use of the with
operator.
Records are supported in netstandard2.0 using a shim class very similar to null reference types.
Microsoft.Extensions.Configuration.Binder and Microsoft.Extensions.Options.ConfigurationExtensions have been added to make integration between configuration and options a little easier.
CompletionItem
has been updated as the per the spec, to be a union of TextEdit
and InsertRangeEdit
.
The spec added deeper definition for integer, unsigned integer and decimal
uinteger
- Defines an unsigned integer number in the range of 0 to 2^31 - 1. Due to this constraint it's easier for us to just keep using int instead of causing some headache by using uint.
long
is now gone, replaced with int
. Also a few places where precentage was allowed had been double
but they have been changed to uint
so they have been changed to int
accordingly
Types with breaking changes:
FoldingRange
BooleanNumberString
IWorkDoneObserver
WorkDoneProgressBegin
WorkDoneProgressReport
member
has been renamed method
as per the spec.
Request objects with the prefix "Set", "Attach", "Launch" or "Read" will no longer be prefixed with "Send" or "Request".
router.change affects the following:
SetVariableArguments
- from router.SendSetVariable(...)
to router.SetVariable()
AttachRequestArguments
- from router.RequestAttach(...)
to router.Attach()
LaunchRequestArguments
- from router.RequestAttach(...)
to router.Launch()
ReadMemoryArguments
- from router.SendReadMemory(...)
to router.ReadMemory()
SetBreakpointsArguments
- from router.SendSetBreakpoints(...)
to router.SetBreakpoints()
SetDataBreakpointsArguments
- from router.SendSetDataBreakpoints(...)
to router.SetDataBreakpoints()
SetExceptionBreakpointsArguments
- from router.SendSetExceptionBreakpoints(...)
to router.SetExceptionBreakpoints()
SetExpressionArguments
- from router.SendSetExpression(...)
to router.SetExpression()
SetFunctionBreakpointsArguments
- from router.SendSetFunctionBreakpoints(...)
to router.SetFunctionBreakpoints()
SetInstructionBreakpointsArguments
- from router.SendSetInstructionBreakpoints(...)
to router.SetInstructionBreakpoints()
SetTraceParams
- from router.SendSetTrace(...)
to router.SetTrace()
The property TelemetryEvent.Data
has been renamed to ExtensionData
and the type has been changed as well.
#479 added support for return types from execute command, as a part of that change the name of the helper base classes has changed from ExecuteCommandHandlerBase<>
to ExecuteTypedCommandHandlerBase<>
. A new set of classes named ExecuteTypedResponseCommandHandlerBase<>
have also been added.
breaking changes
feature
enhancements
bugs
chores
mysterious
dependenciess
As part of this release we had 42 issues closed.
Serializer
renamed to LSPSerializer
The 3.16 specification defines the SemanticLegend in such a way that the client produces a list of supported tokens and the server must return the tokens it supports and the index order it will use.
Today we get the registration options at registration of a handler, but this is typically before we have started communicating with the server.
This change adds a new interface IRegistrationOptions<TOptions, TCapability>
and all interfaces have been updated to implement this interface if they have both a client capability and a server registration option.
The abstract base classes by the above change now have a new method that must be implemented.
protected internal abstract TRegistrationOptions CreateRegistrationOptions(TCapability capability);
The base handler then caches the resulting value so this method is only ever called once.
Existing implementations of GetRegistrationOptions
can be replaced with CreateRegistrationOptions
.
All the abstract handler base classes have been renamed to have a Suffix of "Base" if there was not one there before.
The fix for this is simply to make sure the Base
suffix has been applied.
This is not a breaking change, the goal was to make sure that namespaces did not change, if there is a miss let me know.
Any classes related to the Request, Response, Capability and Registration Options have been moved into a XyzFeature.cs
file. This will help reduce the number of overall files in the repo, as well as hopefully with discoverabiliy. More importantly this make it easier to create new features, as all the components for a given feature will be in the same file.
The IDidXyzTextDocument handlers have been updated to have specific named options, and a master options class TextDocumentSyncRegistrationOptions
has been added. You provide the TextDocumentSyncRegistrationOptions
and all the other named options can be implicitly created from it.
Source Generation has been refactored to be a little more flexible and better organized (it's not prefect but better).
Some documentation has been added to document the attributes and their usage. These should available to consumers to also use themselves, please let me know of any bugs you might encounter with them.
HandlerIdentity
is now an interface named IHandlerIdentity
HandlerIdentity is not automatically implemented via source generators (you can implement it yourself if you want to)
This type is used to ensure proper routing of CodeAction, CodeLens and other requests. Changing it an interface was required to support classes and records at the same time.
Most model classes have been moved to record
classes and init
only properties. This allows use of the with
operator.
Records are supported in netstandard2.0 using a shim class very similar to null reference types.
Microsoft.Extensions.Configuration.Binder and Microsoft.Extensions.Options.ConfigurationExtensions have been added to make integration between configuration and options a little easier.
CompletionItem
has been updated as the per the spec, to be a union of TextEdit
and InsertRangeEdit
.
The spec added deeper definition for integer, unsigned integer and decimal
uinteger
- Defines an unsigned integer number in the range of 0 to 2^31 - 1. Due to this constraint it's easier for us to just keep using int instead of causing some headache by using uint.
long
is now gone, replaced with int
. Also a few places where precentage was allowed had been double
but they have been changed to uint
so they have been changed to int
accordingly
Types with breaking changes:
FoldingRange
BooleanNumberString
IWorkDoneObserver
WorkDoneProgressBegin
WorkDoneProgressReport
member
has been renamed method
as per the spec.
Request objects with the prefix "Set", "Attach", "Launch" or "Read" will no longer be prefixed with "Send" or "Request".
router.change affects the following:
SetVariableArguments
- from router.SendSetVariable(...)
to router.SetVariable()
AttachRequestArguments
- from router.RequestAttach(...)
to router.Attach()
LaunchRequestArguments
- from router.RequestAttach(...)
to router.Launch()
ReadMemoryArguments
- from router.SendReadMemory(...)
to router.ReadMemory()
SetBreakpointsArguments
- from router.SendSetBreakpoints(...)
to router.SetBreakpoints()
SetDataBreakpointsArguments
- from router.SendSetDataBreakpoints(...)
to router.SetDataBreakpoints()
SetExceptionBreakpointsArguments
- from router.SendSetExceptionBreakpoints(...)
to router.SetExceptionBreakpoints()
SetExpressionArguments
- from router.SendSetExpression(...)
to router.SetExpression()
SetFunctionBreakpointsArguments
- from router.SendSetFunctionBreakpoints(...)
to router.SetFunctionBreakpoints()
SetInstructionBreakpointsArguments
- from router.SendSetInstructionBreakpoints(...)
to router.SetInstructionBreakpoints()
SetTraceParams
- from router.SendSetTrace(...)
to router.SetTrace()
The property TelemetryEvent.Data
has been renamed to ExtensionData
and the type has been changed as well.
#479 added support for return types from execute command, as a part of that change the name of the helper base classes has changed from ExecuteCommandHandlerBase<>
to ExecuteTypedCommandHandlerBase<>
. A new set of classes named ExecuteTypedResponseCommandHandlerBase<>
have also been added.
breaking changes
feature
enhancements
bugs
chores
dependenciess
As part of this release we had 41 issues closed.
Serializer
renamed to LSPSerializer
The 3.16 specification defines the SemanticLegend in such a way that the client produces a list of supported tokens and the server must return the tokens it supports and the index order it will use.
Today we get the registration options at registration of a handler, but this is typically before we have started communicating with the server.
This change adds a new interface IRegistrationOptions<TOptions, TCapability>
and all interfaces have been updated to implement this interface if they have both a client capability and a server registration option.
The abstract base classes by the above change now have a new method that must be implemented.
protected internal abstract TRegistrationOptions CreateRegistrationOptions(TCapability capability);
The base handler then caches the resulting value so this method is only ever called once.
Existing implementations of GetRegistrationOptions
can be replaced with CreateRegistrationOptions
.
All the abstract handler base classes have been renamed to have a Suffix of "Base" if there was not one there before.
The fix for this is simply to make sure the Base
suffix has been applied.
This is not a breaking change, the goal was to make sure that namespaces did not change, if there is a miss let me know.
Any classes related to the Request, Response, Capability and Registration Options have been moved into a XyzFeature.cs
file. This will help reduce the number of overall files in the repo, as well as hopefully with discoverabiliy. More importantly this make it easier to create new features, as all the components for a given feature will be in the same file.
The IDidXyzTextDocument handlers have been updated to have specific named options, and a master options class TextDocumentSyncRegistrationOptions
has been added. You provide the TextDocumentSyncRegistrationOptions
and all the other named options can be implicitly created from it.
Source Generation has been refactored to be a little more flexible and better organized (it's not prefect but better).
Some documentation has been added to document the attributes and their usage. These should available to consumers to also use themselves, please let me know of any bugs you might encounter with them.
HandlerIdentity
is now an interface named IHandlerIdentity
HandlerIdentity is not automatically implemented via source generators (you can implement it yourself if you want to)
This type is used to ensure proper routing of CodeAction, CodeLens and other requests. Changing it an interface was required to support classes and records at the same time.
Most model classes have been moved to record
classes and init
only properties. This allows use of the with
operator.
Records are supported in netstandard2.0 using a shim class very similar to null reference types.
Microsoft.Extensions.Configuration.Binder and Microsoft.Extensions.Options.ConfigurationExtensions have been added to make integration between configuration and options a little easier.
CompletionItem
has been updated as the per the spec, to be a union of TextEdit
and InsertRangeEdit
.
The spec added deeper definition for integer, unsigned integer and decimal
uinteger
- Defines an unsigned integer number in the range of 0 to 2^31 - 1. Due to this constraint it's easier for us to just keep using int instead of causing some headache by using uint.
long
is now gone, replaced with int
. Also a few places where precentage was allowed had been double
but they have been changed to uint
so they have been changed to int
accordingly
Types with breaking changes:
FoldingRange
BooleanNumberString
IWorkDoneObserver
WorkDoneProgressBegin
WorkDoneProgressReport
member
has been renamed method
as per the spec.
Request objects with the prefix "Set", "Attach", "Launch" or "Read" will no longer be prefixed with "Send" or "Request".
router.change affects the following:
SetVariableArguments
- from router.SendSetVariable(...)
to router.SetVariable()
AttachRequestArguments
- from router.RequestAttach(...)
to router.Attach()
LaunchRequestArguments
- from router.RequestAttach(...)
to router.Launch()
ReadMemoryArguments
- from router.SendReadMemory(...)
to router.ReadMemory()
SetBreakpointsArguments
- from router.SendSetBreakpoints(...)
to router.SetBreakpoints()
SetDataBreakpointsArguments
- from router.SendSetDataBreakpoints(...)
to router.SetDataBreakpoints()
SetExceptionBreakpointsArguments
- from router.SendSetExceptionBreakpoints(...)
to router.SetExceptionBreakpoints()
SetExpressionArguments
- from router.SendSetExpression(...)
to router.SetExpression()
SetFunctionBreakpointsArguments
- from router.SendSetFunctionBreakpoints(...)
to router.SetFunctionBreakpoints()
SetInstructionBreakpointsArguments
- from router.SendSetInstructionBreakpoints(...)
to router.SetInstructionBreakpoints()
SetTraceParams
- from router.SendSetTrace(...)
to router.SetTrace()
The property TelemetryEvent.Data
has been renamed to ExtensionData
and the type has been changed as well.
#479 added support for return types from execute command, as a part of that change the name of the helper base classes has changed from ExecuteCommandHandlerBase<>
to ExecuteTypedCommandHandlerBase<>
. A new set of classes named ExecuteTypedResponseCommandHandlerBase<>
have also been added.
breaking changes
feature
enhancements
bugs
chores
dependenciess
As part of this release we had 30 issues closed.
Serializer
renamed to LSPSerializer
The 3.16 specification defines the SemanticLegend in such a way that the client produces a list of supported tokens and the server must return the tokens it supports and the index order it will use.
Today we get the registration options at registration of a handler, but this is typically before we have started communicating with the server.
This change adds a new interface IRegistrationOptions<TOptions, TCapability>
and all interfaces have been updated to implement this interface if they have both a client capability and a server registration option.
The abstract base classes by the above change now have a new method that must be implemented.
protected internal abstract TRegistrationOptions CreateRegistrationOptions(TCapability capability);
The base handler then caches the resulting value so this method is only ever called once.
Existing implementations of GetRegistrationOptions
can be replaced with CreateRegistrationOptions
.
All the abstract handler base classes have been renamed to have a Suffix of "Base" if there was not one there before.
The fix for this is simply to make sure the Base
suffix has been applied.
This is not a breaking change, the goal was to make sure that namespaces did not change, if there is a miss let me know.
Any classes related to the Request, Response, Capability and Registration Options have been moved into a XyzFeature.cs
file. This will help reduce the number of overall files in the repo, as well as hopefully with discoverabiliy. More importantly this make it easier to create new features, as all the components for a given feature will be in the same file.
The IDidXyzTextDocument handlers have been updated to have specific named options, and a master options class TextDocumentSyncRegistrationOptions
has been added. You provide the TextDocumentSyncRegistrationOptions
and all the other named options can be implicitly created from it.
Source Generation has been refactored to be a little more flexible and better organized (it's not prefect but better).
Some documentation has been added to document the attributes and their usage. These should available to consumers to also use themselves, please let me know of any bugs you might encounter with them.
HandlerIdentity
is now an interface named IHandlerIdentity
HandlerIdentity is not automatically implemented via source generators (you can implement it yourself if you want to)
This type is used to ensure proper routing of CodeAction, CodeLens and other requests. Changing it an interface was required to support classes and records at the same time.
Most model classes have been moved to record
classes and init
only properties. This allows use of the with
operator.
Records are supported in netstandard2.0 using a shim class very similar to null reference types.
Microsoft.Extensions.Configuration.Binder and Microsoft.Extensions.Options.ConfigurationExtensions have been added to make integration between configuration and options a little easier.
CompletionItem
has been updated as the per the spec, to be a union of TextEdit
and InsertRangeEdit
.
The spec added deeper definition for integer, unsigned integer and decimal
uinteger
- Defines an unsigned integer number in the range of 0 to 2^31 - 1. Due to this constraint it's easier for us to just keep using int instead of causing some headache by using uint.
long
is now gone, replaced with int
. Also a few places where precentage was allowed had been double
but they have been changed to uint
so they have been changed to int
accordingly
Types with breaking changes:
FoldingRange
BooleanNumberString
IWorkDoneObserver
WorkDoneProgressBegin
WorkDoneProgressReport
member
has been renamed method
as per the spec.
Request objects with the prefix "Set", "Attach", "Launch" or "Read" will no longer be prefixed with "Send" or "Request".
router.change affects the following:
SetVariableArguments
- from router.SendSetVariable(...)
to router.SetVariable()
AttachRequestArguments
- from router.RequestAttach(...)
to router.Attach()
LaunchRequestArguments
- from router.RequestAttach(...)
to router.Launch()
ReadMemoryArguments
- from router.SendReadMemory(...)
to router.ReadMemory()
SetBreakpointsArguments
- from router.SendSetBreakpoints(...)
to router.SetBreakpoints()
SetDataBreakpointsArguments
- from router.SendSetDataBreakpoints(...)
to router.SetDataBreakpoints()
SetExceptionBreakpointsArguments
- from router.SendSetExceptionBreakpoints(...)
to router.SetExceptionBreakpoints()
SetExpressionArguments
- from router.SendSetExpression(...)
to router.SetExpression()
SetFunctionBreakpointsArguments
- from router.SendSetFunctionBreakpoints(...)
to router.SetFunctionBreakpoints()
SetInstructionBreakpointsArguments
- from router.SendSetInstructionBreakpoints(...)
to router.SetInstructionBreakpoints()
SetTraceParams
- from router.SendSetTrace(...)
to router.SetTrace()
The property TelemetryEvent.Data
has been renamed to ExtensionData
and the type has been changed as well.
breaking changes
feature
enhancements
bugs
chores
dependenciess
As part of this release we had 17 issues closed.
Serializer
renamed to LSPSerializer
The 3.16 specification defines the SemanticLegend in such a way that the client produces a list of supported tokens and the server must return the tokens it supports and the index order it will use.
Today we get the registration options at registration of a handler, but this is typically before we have started communicating with the server.
This change adds a new interface IRegistrationOptions<TOptions, TCapability>
and all interfaces have been updated to implement this interface if they have both a client capability and a server registration option.
The abstract base classes by the above change now have a new method that must be implemented.
protected internal abstract TRegistrationOptions CreateRegistrationOptions(TCapability capability);
The base handler then caches the resulting value so this method is only ever called once.
Existing implementations of GetRegistrationOptions
can be replaced with CreateRegistrationOptions
.
All the abstract handler base classes have been renamed to have a Suffix of "Base" if there was not one there before.
The fix for this is simply to make sure the Base
suffix has been applied.
This is not a breaking change, the goal was to make sure that namespaces did not change, if there is a miss let me know.
Any classes related to the Request, Response, Capability and Registration Options have been moved into a XyzFeature.cs
file. This will help reduce the number of overall files in the repo, as well as hopefully with discoverabiliy. More importantly this make it easier to create new features, as all the components for a given feature will be in the same file.
The IDidXyzTextDocument handlers have been updated to have specific named options, and a master options class TextDocumentSyncRegistrationOptions
has been added. You provide the TextDocumentSyncRegistrationOptions
and all the other named options can be implicitly created from it.
Source Generation has been refactored to be a little more flexible and better organized (it's not prefect but better).
Some documentation has been added to document the attributes and their usage. These should available to consumers to also use themselves, please let me know of any bugs you might encounter with them.
HandlerIdentity
is now an interface named IHandlerIdentity
HandlerIdentity is not automatically implemented via source generators (you can implement it yourself if you want to)
This type is used to ensure proper routing of CodeAction, CodeLens and other requests. Changing it an interface was required to support classes and records at the same time.
Most model classes have been moved to record
classes and init
only properties. This allows use of the with
operator.
Records are supported in netstandard2.0 using a shim class very similar to null reference types.
Microsoft.Extensions.Configuration.Binder and Microsoft.Extensions.Options.ConfigurationExtensions have been added to make integration between configuration and options a little easier.
CompletionItem
has been updated as the per the spec, to be a union of TextEdit
and InsertRangeEdit
.
The spec added deeper definition for integer, unsigned integer and decimal
uinteger
- Defines an unsigned integer number in the range of 0 to 2^31 - 1. Due to this constraint it's easier for us to just keep using int instead of causing some headache by using uint.
long
is now gone, replaced with int
. Also a few places where precentage was allowed had been double
but they have been changed to uint
so they have been changed to int
accordingly
Types with breaking changes:
FoldingRange
BooleanNumberString
IWorkDoneObserver
WorkDoneProgressBegin
WorkDoneProgressReport
member
has been renamed method
as per the spec.
Request objects with the prefix "Set", "Attach", "Launch" or "Read" will no longer be prefixed with "Send" or "Request".
router.change affects the following:
SetVariableArguments
- from router.SendSetVariable(...)
to router.SetVariable()
AttachRequestArguments
- from router.RequestAttach(...)
to router.Attach()
LaunchRequestArguments
- from router.RequestAttach(...)
to router.Launch()
ReadMemoryArguments
- from router.SendReadMemory(...)
to router.ReadMemory()
SetBreakpointsArguments
- from router.SendSetBreakpoints(...)
to router.SetBreakpoints()
SetDataBreakpointsArguments
- from router.SendSetDataBreakpoints(...)
to router.SetDataBreakpoints()
SetExceptionBreakpointsArguments
- from router.SendSetExceptionBreakpoints(...)
to router.SetExceptionBreakpoints()
SetExpressionArguments
- from router.SendSetExpression(...)
to router.SetExpression()
SetFunctionBreakpointsArguments
- from router.SendSetFunctionBreakpoints(...)
to router.SetFunctionBreakpoints()
SetInstructionBreakpointsArguments
- from router.SendSetInstructionBreakpoints(...)
to router.SetInstructionBreakpoints()
SetTraceParams
- from router.SendSetTrace(...)
to router.SetTrace()
breaking changes
enhancements
bug
dependenciess
As part of this release we had 7 commits which resulted in 7 issues being closed.
feature
enhancement
bugs
chore
dependencies
As part of this release we had 6 commits which resulted in 5 issues being closed.
This is a minor patch release that fixes a small issue with Debug Adapter Serialization not working properly out of the box, as well as continued work to update the proposal types to by in sync for the next spec version.
enhancement
chore
mysterious
dependenciess