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

Fix RenameFiles workspace operations #1079

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
106 changes: 67 additions & 39 deletions src/Protocol/Features/FileOperationsFeature.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace Models
///
/// @since 3.16.0
/// </summary>
public abstract record FileOperationParams<T>
public abstract record FileOperationsParams<T>
where T : FileOperationItem
{
/// <summary>
Expand All @@ -40,33 +40,33 @@ public abstract record FileOperationItem
public Uri Uri { get; init; } = null!;
}

/// <inheritdoc cref="FileOperationParams{T}" />
/// <inheritdoc cref="FileOperationsParams{T}" />
[Parallel]
[Method(WorkspaceNames.DidCreateFiles, Direction.ClientToServer)]
[GenerateHandler("OmniSharp.Extensions.LanguageServer.Protocol.Workspace")]
[GenerateHandlerMethods]
[GenerateRequestMethods(typeof(IWorkspaceLanguageClient), typeof(ILanguageClient))]
[RegistrationOptions(typeof(DidCreateFileRegistrationOptions))]
[RegistrationOptions(typeof(DidCreateFilesRegistrationOptions))]
[Capability(typeof(FileOperationsWorkspaceClientCapabilities))]
public partial record DidCreateFileParams : FileOperationParams<FileCreate>, IRequest
public partial record DidCreateFilesParams : FileOperationsParams<FileCreate>, IRequest
{
public static implicit operator WillCreateFileParams(DidCreateFileParams @params)
public static implicit operator WillCreateFilesParams(DidCreateFilesParams @params)
{
return new() { Files = @params.Files };
}
}

/// <inheritdoc cref="FileOperationParams{T}" />
/// <inheritdoc cref="FileOperationsParams{T}" />
[Parallel]
[Method(WorkspaceNames.WillCreateFiles, Direction.ClientToServer)]
[GenerateHandler("OmniSharp.Extensions.LanguageServer.Protocol.Workspace")]
[GenerateHandlerMethods]
[GenerateRequestMethods(typeof(IWorkspaceLanguageClient), typeof(ILanguageClient))]
[RegistrationOptions(typeof(WillCreateFileRegistrationOptions))]
[RegistrationOptions(typeof(WillCreateFilesRegistrationOptions))]
[Capability(typeof(FileOperationsWorkspaceClientCapabilities))]
public partial record WillCreateFileParams : FileOperationParams<FileCreate>, IRequest<WorkspaceEdit?>
public partial record WillCreateFilesParams : FileOperationsParams<FileCreate>, IRequest<WorkspaceEdit?>
{
public static implicit operator DidCreateFileParams(WillCreateFileParams @params)
public static implicit operator DidCreateFilesParams(WillCreateFilesParams @params)
{
return new() { Files = @params.Files };
}
Expand All @@ -75,68 +75,96 @@ public partial record WillCreateFileParams : FileOperationParams<FileCreate>, IR
/// <inheritdoc cref="FileOperationItem" />
public partial record FileCreate : FileOperationItem;

/// <inheritdoc cref="FileOperationParams{T}" />
/// <inheritdoc cref="FileOperationsParams{T}" />
[Parallel]
[Method(WorkspaceNames.DidRenameFiles, Direction.ClientToServer)]
[GenerateHandler("OmniSharp.Extensions.LanguageServer.Protocol.Workspace")]
[GenerateHandlerMethods]
[GenerateRequestMethods(typeof(IWorkspaceLanguageClient), typeof(ILanguageClient))]
[RegistrationOptions(typeof(DidRenameFileRegistrationOptions))]
[RegistrationOptions(typeof(DidRenameFilesRegistrationOptions))]
[Capability(typeof(FileOperationsWorkspaceClientCapabilities))]
public partial record DidRenameFileParams : FileOperationParams<FileRename>, IRequest
public partial record DidRenameFilesParams : RenameFilesOperationParams, IRequest
{
public static implicit operator WillRenameFileParams(DidRenameFileParams @params)
public static implicit operator WillRenameFilesParams(DidRenameFilesParams @params)
{
return new() { Files = @params.Files };
}
}

/// <inheritdoc cref="FileOperationParams{T}" />
/// <inheritdoc cref="FileOperationsParams{T}" />
[Parallel]
[Method(WorkspaceNames.WillRenameFiles, Direction.ClientToServer)]
[GenerateHandler("OmniSharp.Extensions.LanguageServer.Protocol.Workspace")]
[GenerateHandlerMethods]
[GenerateRequestMethods(typeof(IWorkspaceLanguageClient), typeof(ILanguageClient))]
[RegistrationOptions(typeof(WillRenameFileRegistrationOptions))]
[RegistrationOptions(typeof(WillRenameFilesRegistrationOptions))]
[Capability(typeof(FileOperationsWorkspaceClientCapabilities))]
public partial record WillRenameFileParams : FileOperationParams<FileRename>, IRequest<WorkspaceEdit?>
public partial record WillRenameFilesParams : RenameFilesOperationParams, IRequest<WorkspaceEdit?>
{
public static implicit operator DidRenameFileParams(WillRenameFileParams @params)
public static implicit operator DidRenameFilesParams(WillRenameFilesParams @params)
{
return new() { Files = @params.Files };
}
}

/// <inheritdoc cref="FileOperationItem" />
public partial record FileRename : FileOperationItem;
/// <summary>
/// The parameters sent in notifications/requests for user-initiated renames
/// of files.
///
/// @since 3.16.0
/// </summary>
public abstract record RenameFilesOperationParams
{
/// <summary>
/// An array of all files/folders renamed in this operation.
/// When a folder is renamed, only the folder will be included, and not its children.
/// </summary>
public Container<FileRename> Files { get; init; } = null!;
}

/// <summary>
/// Represents information on a file/folder rename.
/// </summary>
public partial record FileRename
{
/// <summary>
/// A file:// URI for the original location of the file/folder being renamed.
/// </summary>
public Uri OldUri { get; init; } = null!;

/// <summary>
/// A file:// URI for the new location of the file/folder being renamed.
/// </summary>
public Uri NewUri { get; init; } = null!;
}

/// <inheritdoc cref="FileOperationParams{T}" />
/// <inheritdoc cref="FileOperationsParams{T}" />
[Parallel]
[Method(WorkspaceNames.DidDeleteFiles, Direction.ClientToServer)]
[GenerateHandler("OmniSharp.Extensions.LanguageServer.Protocol.Workspace")]
[GenerateHandlerMethods]
[GenerateRequestMethods(typeof(IWorkspaceLanguageClient), typeof(ILanguageClient))]
[RegistrationOptions(typeof(DidDeleteFileRegistrationOptions))]
[RegistrationOptions(typeof(DidDeleteFilesRegistrationOptions))]
[Capability(typeof(FileOperationsWorkspaceClientCapabilities))]
public partial record DidDeleteFileParams : FileOperationParams<FileDelete>, IRequest
public partial record DidDeleteFilesParams : FileOperationsParams<FileDelete>, IRequest
{
public static implicit operator WillDeleteFileParams(DidDeleteFileParams @params)
public static implicit operator WillDeleteFilesParams(DidDeleteFilesParams @params)
{
return new() { Files = @params.Files };
}
}

/// <inheritdoc cref="FileOperationParams{T}" />
/// <inheritdoc cref="FileOperationsParams{T}" />
[Parallel]
[Method(WorkspaceNames.WillDeleteFiles, Direction.ClientToServer)]
[GenerateHandler("OmniSharp.Extensions.LanguageServer.Protocol.Workspace")]
[GenerateHandlerMethods]
[GenerateRequestMethods(typeof(IWorkspaceLanguageClient), typeof(ILanguageClient))]
[RegistrationOptions(typeof(WillDeleteFileRegistrationOptions))]
[RegistrationOptions(typeof(WillDeleteFilesRegistrationOptions))]
[Capability(typeof(FileOperationsWorkspaceClientCapabilities))]
public partial record WillDeleteFileParams : FileOperationParams<FileDelete>, IRequest<WorkspaceEdit?>
public partial record WillDeleteFilesParams : FileOperationsParams<FileDelete>, IRequest<WorkspaceEdit?>
{
public static implicit operator DidDeleteFileParams(WillDeleteFileParams @params)
public static implicit operator DidDeleteFilesParams(WillDeleteFilesParams @params)
{
return new() { Files = @params.Files };
}
Expand All @@ -151,7 +179,7 @@ public partial record FileDelete : FileOperationItem;
nameof(FileOperationsWorkspaceServerCapabilities.WillCreate)
)]
[RegistrationName(WorkspaceNames.WillCreateFiles)]
public partial class WillCreateFileRegistrationOptions : IFileOperationRegistrationOptions
public partial class WillCreateFilesRegistrationOptions : IFileOperationRegistrationOptions
{
/// <summary>
/// The actual filters.
Expand All @@ -165,7 +193,7 @@ public partial class WillCreateFileRegistrationOptions : IFileOperationRegistrat
nameof(FileOperationsWorkspaceServerCapabilities.DidCreate)
)]
[RegistrationName(WorkspaceNames.DidCreateFiles)]
public partial class DidCreateFileRegistrationOptions : IFileOperationRegistrationOptions
public partial class DidCreateFilesRegistrationOptions : IFileOperationRegistrationOptions
{
/// <summary>
/// The actual filters.
Expand All @@ -179,7 +207,7 @@ public partial class DidCreateFileRegistrationOptions : IFileOperationRegistrati
nameof(FileOperationsWorkspaceServerCapabilities.WillRename)
)]
[RegistrationName(WorkspaceNames.WillRenameFiles)]
public partial class WillRenameFileRegistrationOptions : IFileOperationRegistrationOptions
public partial class WillRenameFilesRegistrationOptions : IFileOperationRegistrationOptions
{
/// <summary>
/// The actual filters.
Expand All @@ -193,7 +221,7 @@ public partial class WillRenameFileRegistrationOptions : IFileOperationRegistrat
nameof(FileOperationsWorkspaceServerCapabilities.DidRename)
)]
[RegistrationName(WorkspaceNames.DidRenameFiles)]
public partial class DidRenameFileRegistrationOptions : IFileOperationRegistrationOptions
public partial class DidRenameFilesRegistrationOptions : IFileOperationRegistrationOptions
{
/// <summary>
/// The actual filters.
Expand All @@ -207,7 +235,7 @@ public partial class DidRenameFileRegistrationOptions : IFileOperationRegistrati
nameof(FileOperationsWorkspaceServerCapabilities.WillDelete)
)]
[RegistrationName(WorkspaceNames.WillDeleteFiles)]
public partial class WillDeleteFileRegistrationOptions : IFileOperationRegistrationOptions
public partial class WillDeleteFilesRegistrationOptions : IFileOperationRegistrationOptions
{
/// <summary>
/// The actual filters.
Expand All @@ -221,7 +249,7 @@ public partial class WillDeleteFileRegistrationOptions : IFileOperationRegistrat
nameof(FileOperationsWorkspaceServerCapabilities.DidDelete)
)]
[RegistrationName(WorkspaceNames.DidDeleteFiles)]
public partial class DidDeleteFileRegistrationOptions : IFileOperationRegistrationOptions
public partial class DidDeleteFilesRegistrationOptions : IFileOperationRegistrationOptions
{
/// <summary>
/// The actual filters.
Expand Down Expand Up @@ -335,37 +363,37 @@ public class FileOperationsWorkspaceServerCapabilities
/// The client has support for sending didCreateFiles notifications.
/// </summary>
[Optional]
public DidCreateFileRegistrationOptions.StaticOptions? DidCreate { get; set; }
public DidCreateFilesRegistrationOptions.StaticOptions? DidCreate { get; set; }

/// <summary>
/// The client has support for sending willCreateFiles requests.
/// </summary>
[Optional]
public WillCreateFileRegistrationOptions.StaticOptions? WillCreate { get; set; }
public WillCreateFilesRegistrationOptions.StaticOptions? WillCreate { get; set; }

/// <summary>
/// The client has support for sending didRenameFiles notifications.
/// </summary>
[Optional]
public DidRenameFileRegistrationOptions.StaticOptions? DidRename { get; set; }
public DidRenameFilesRegistrationOptions.StaticOptions? DidRename { get; set; }

/// <summary>
/// The client has support for sending willRenameFiles requests.
/// </summary>
[Optional]
public WillRenameFileRegistrationOptions.StaticOptions? WillRename { get; set; }
public WillRenameFilesRegistrationOptions.StaticOptions? WillRename { get; set; }

/// <summary>
/// The client has support for sending didDeleteFiles notifications.
/// </summary>
[Optional]
public DidDeleteFileRegistrationOptions.StaticOptions? DidDelete { get; set; }
public DidDeleteFilesRegistrationOptions.StaticOptions? DidDelete { get; set; }

/// <summary>
/// The client has support for sending willDeleteFiles requests.
/// </summary>
[Optional]
public WillDeleteFileRegistrationOptions.StaticOptions? WillDelete { get; set; }
public WillDeleteFilesRegistrationOptions.StaticOptions? WillDelete { get; set; }
}
}

Expand Down