Skip to content

Commit b409867

Browse files
Razmo99JustinGrote
authored andcommitted
initial implentation of prepare rename provider
1 parent 950b3e5 commit b409867

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

src/PowerShellEditorServices/Server/PsesLanguageServer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ public async Task StartAsync()
123123
.WithHandler<ExpandAliasHandler>()
124124
.WithHandler<PsesSemanticTokensHandler>()
125125
.WithHandler<DidChangeWatchedFilesHandler>()
126+
.WithHandler<PrepareRenameSymbolHandler>()
126127
.WithHandler<RenameSymbolHandler>()
127128
// NOTE: The OnInitialize delegate gets run when we first receive the
128129
// _Initialize_ request:
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
using System.Threading;
5+
using System.Threading.Tasks;
6+
using MediatR;
7+
using System.Management.Automation.Language;
8+
using OmniSharp.Extensions.JsonRpc;
9+
using Microsoft.PowerShell.EditorServices.Services.Symbols;
10+
using Microsoft.PowerShell.EditorServices.Services;
11+
using Microsoft.Extensions.Logging;
12+
using Microsoft.PowerShell.EditorServices.Services.TextDocument;
13+
14+
namespace Microsoft.PowerShell.EditorServices.Handlers
15+
{
16+
[Serial, Method("powerShell/PrepareRenameSymbol")]
17+
internal interface IPrepareRenameSymbolHandler : IJsonRpcRequestHandler<PrepareRenameSymbolParams, PrepareRenameSymbolResult> { }
18+
19+
internal class PrepareRenameSymbolParams : IRequest<PrepareRenameSymbolResult>
20+
{
21+
public string FileName { get; set; }
22+
public int Line { get; set; }
23+
public int Column { get; set; }
24+
public string RenameTo { get; set; }
25+
}
26+
internal class PrepareRenameSymbolResult
27+
{
28+
public string Message;
29+
}
30+
31+
internal class PrepareRenameSymbolHandler : IPrepareRenameSymbolHandler
32+
{
33+
private readonly ILogger _logger;
34+
private readonly WorkspaceService _workspaceService;
35+
36+
public PrepareRenameSymbolHandler(ILoggerFactory loggerFactory, WorkspaceService workspaceService)
37+
{
38+
_logger = loggerFactory.CreateLogger<RenameSymbolHandler>();
39+
_workspaceService = workspaceService;
40+
}
41+
public async Task<PrepareRenameSymbolResult> Handle(PrepareRenameSymbolParams request, CancellationToken cancellationToken)
42+
{
43+
if (!_workspaceService.TryGetFile(request.FileName, out ScriptFile scriptFile))
44+
{
45+
_logger.LogDebug("Failed to open file!");
46+
return await Task.FromResult<PrepareRenameSymbolResult>(null).ConfigureAwait(false);
47+
}
48+
return await Task.Run(() =>
49+
{
50+
PrepareRenameSymbolResult result = new();
51+
SymbolReference symbol = scriptFile.References.TryGetSymbolAtPosition(
52+
request.Line + 1,
53+
request.Column + 1);
54+
55+
if (symbol == null) { result.Message="Unable to Find Symbol"; return result; }
56+
57+
Ast token = scriptFile.ScriptAst.Find(ast =>
58+
{
59+
return ast.Extent.StartLineNumber == symbol.NameRegion.StartLineNumber &&
60+
ast.Extent.StartColumnNumber == symbol.NameRegion.StartColumnNumber;
61+
}, true);
62+
63+
64+
65+
result.Message = "Nope cannot do";
66+
67+
return result;
68+
}).ConfigureAwait(false);
69+
}
70+
}
71+
}

0 commit comments

Comments
 (0)