Skip to content

Commit 0216091

Browse files
author
Kapil Borle
committed
Handle request to get script region for formatting
1 parent 9fa2268 commit 0216091

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ protected override void Initialize()
125125
this.SetRequestHandler(SetPSSARulesRequest.Type, this.HandleSetPSSARulesRequest);
126126

127127
this.SetRequestHandler(ScriptFileMarkersRequest.Type, this.HandleScriptFileMarkersRequest);
128+
this.SetRequestHandler(ScriptRegionRequest.Type, this.HandleGetFormatScriptRegionRequest);
128129

129130
this.SetRequestHandler(GetPSHostProcessesRequest.Type, this.HandleGetPSHostProcessesRequest);
130131

@@ -235,6 +236,48 @@ await RunScriptDiagnostics(
235236
await sendresult;
236237
}
237238

239+
private async Task HandleGetFormatScriptRegionRequest(
240+
ScriptRegionRequestParams requestParams,
241+
RequestContext<ScriptRegionRequestResult> requestContext)
242+
{
243+
var scriptFile = this.editorSession.Workspace.GetFile(requestParams.fileUri);
244+
var lineNumber = requestParams.line;
245+
var columnNumber = requestParams.column;
246+
ScriptRegion scriptRegion = null;
247+
248+
switch (requestParams.character)
249+
{
250+
case "\n":
251+
// find the smallest statement ast that occupies
252+
// the element before \n or \r\n and return the extent.
253+
--lineNumber; // vscode sends the next line when pressed enter
254+
var line = scriptFile.GetLine(lineNumber);
255+
if (!String.IsNullOrEmpty(line))
256+
{
257+
scriptRegion = this.editorSession.LanguageService.GetSmallestStatementAstRegion(
258+
scriptFile,
259+
lineNumber,
260+
line.Length);
261+
}
262+
break;
263+
264+
case "}":
265+
scriptRegion = this.editorSession.LanguageService.GetSmallestStatementAstRegion(
266+
scriptFile,
267+
lineNumber,
268+
columnNumber);
269+
break;
270+
271+
default:
272+
break;
273+
}
274+
275+
await requestContext.SendResult(new ScriptRegionRequestResult
276+
{
277+
scriptRegion = scriptRegion
278+
});
279+
}
280+
238281
private async Task HandleScriptFileMarkersRequest(
239282
ScriptFileMarkerRequestParams requestParams,
240283
RequestContext<ScriptFileMarkerRequestResultParams> requestContext)

0 commit comments

Comments
 (0)