Skip to content

Commit 554e0e5

Browse files
committed
V801-024 Add exception handlers and logs to the refactoring tools
1 parent 3afd80e commit 554e0e5

11 files changed

+403
-225
lines changed

source/ada/lsp-ada_handlers-refactor_add_parameter.adb

Lines changed: 54 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
------------------------------------------------------------------------------
22
-- Language Server Protocol --
33
-- --
4-
-- Copyright (C) 2021, AdaCore --
4+
-- Copyright (C) 2021-2022, AdaCore --
55
-- --
66
-- This is free software; you can redistribute it and/or modify it under --
77
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -15,20 +15,21 @@
1515
-- of the license. --
1616
------------------------------------------------------------------------------
1717

18-
with Ada.Exceptions;
1918
with Ada.Strings.UTF_Encoding;
2019

20+
with Langkit_Support.Slocs;
21+
2122
with Libadalang.Analysis; use Libadalang.Analysis;
2223

24+
with Laltools.Refactor.Subprogram_Signature;
25+
use Laltools.Refactor.Subprogram_Signature;
26+
27+
with LSP.Common;
2328
with LSP.Messages.Client_Requests;
2429
with LSP.Lal_Utils;
2530

2631
with VSS.Strings.Conversions;
2732

28-
with Laltools.Refactor.Subprogram_Signature;
29-
use Laltools.Refactor.Subprogram_Signature;
30-
with Langkit_Support.Slocs;
31-
3233
package body LSP.Ada_Handlers.Refactor_Add_Parameter is
3334

3435
------------------------
@@ -130,55 +131,73 @@ package body LSP.Ada_Handlers.Refactor_Add_Parameter is
130131
Client_Message_Receiver'Class;
131132
Error : in out LSP.Errors.Optional_ResponseError)
132133
is
134+
use Langkit_Support.Slocs;
135+
use Laltools.Refactor;
136+
use LSP.Messages;
137+
use LSP.Types;
138+
use VSS.Strings.Conversions;
139+
133140
Message_Handler : LSP.Ada_Handlers.Message_Handler renames
134141
LSP.Ada_Handlers.Message_Handler (Handler.all);
135-
136142
Context : LSP.Ada_Contexts.Context renames
137143
Message_Handler.Contexts.Get (Self.Context_Id).all;
138144

139-
Apply : LSP.Messages.Client_Requests.Workspace_Apply_Edit_Request;
140-
141-
Workspace_Edits : LSP.Messages.WorkspaceEdit renames Apply.params.edit;
142-
143-
Adder : Parameter_Adder;
144-
Edits : Laltools.Refactor.Refactoring_Edits;
145+
Apply : Client_Requests.Workspace_Apply_Edit_Request;
146+
Workspace_Edits : WorkspaceEdit renames Apply.params.edit;
147+
Label : Optional_Virtual_String renames Apply.params.label;
145148

146149
function Analysis_Units return Analysis_Unit_Array is
147150
(Context.Analysis_Units);
148151
-- Provides the Context Analysis_Unit_Array to the Mode_Changer
149152

150-
use type Langkit_Support.Slocs.Line_Number;
151-
use type Langkit_Support.Slocs.Column_Number;
153+
Adder : constant Parameter_Adder :=
154+
Create
155+
(Unit => Context.Get_AU
156+
(Context.URI_To_File (Self.Where.uri)),
157+
Location =>
158+
(Langkit_Support.Slocs.Line_Number
159+
(Self.Where.span.first.line) + 1,
160+
Langkit_Support.Slocs.Column_Number
161+
(Self.Where.span.first.character) + 1),
162+
New_Parameter =>
163+
VSS.Strings.Conversions.To_Unbounded_UTF_8_String
164+
(Self.New_Parameter));
165+
Edits : constant Laltools.Refactor.Refactoring_Edits :=
166+
Adder.Refactor (Analysis_Units'Access);
152167

153168
begin
154-
Adder := Create
155-
(Unit => Context.Get_AU
156-
(Context.URI_To_File (Self.Where.uri)),
157-
Location =>
158-
(Langkit_Support.Slocs.Line_Number (Self.Where.span.first.line) + 1,
159-
Langkit_Support.Slocs.Column_Number
160-
(Self.Where.span.first.character) + 1),
161-
New_Parameter =>
162-
VSS.Strings.Conversions.To_Unbounded_UTF_8_String
163-
(Self.New_Parameter));
164-
165-
Edits := Adder.Refactor (Analysis_Units'Access);
166-
167-
Workspace_Edits := LSP.Lal_Utils.To_Workspace_Edit
168-
(Edits.Text_Edits,
169-
Message_Handler.Versioned_Documents,
170-
Message_Handler'Access);
171-
172-
Client.On_Workspace_Apply_Edit_Request (Apply);
169+
if Edits = No_Refactoring_Edits then
170+
Error :=
171+
(Is_Set => True,
172+
Value =>
173+
(code => LSP.Errors.UnknownErrorCode,
174+
message => VSS.Strings.Conversions.To_Virtual_String
175+
("Failed to execute the Add Parameter refactoring."),
176+
data => <>));
177+
178+
else
179+
Workspace_Edits :=
180+
LSP.Lal_Utils.To_Workspace_Edit
181+
(Edits => Edits,
182+
Resource_Operations => Message_Handler.Resource_Operations,
183+
Versioned_Documents => Message_Handler.Versioned_Documents,
184+
Document_Provider => Message_Handler'Access);
185+
Label :=
186+
(Is_Set => True,
187+
Value => To_Virtual_String (Command'External_Tag));
188+
189+
Client.On_Workspace_Apply_Edit_Request (Apply);
190+
end if;
173191

174192
exception
175193
when E : others =>
194+
LSP.Common.Log (Message_Handler.Trace, E);
176195
Error :=
177196
(Is_Set => True,
178197
Value =>
179198
(code => LSP.Errors.UnknownErrorCode,
180199
message => VSS.Strings.Conversions.To_Virtual_String
181-
(Ada.Exceptions.Exception_Information (E)),
200+
("Failed to execute the Add Parameter refactoring."),
182201
data => <>));
183202
end Execute;
184203

source/ada/lsp-ada_handlers-refactor_change_parameter_mode.adb

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
------------------------------------------------------------------------------
22
-- Language Server Protocol --
33
-- --
4-
-- Copyright (C) 2021, AdaCore --
4+
-- Copyright (C) 2021-2022, AdaCore --
55
-- --
66
-- This is free software; you can redistribute it and/or modify it under --
77
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -15,15 +15,14 @@
1515
-- of the license. --
1616
------------------------------------------------------------------------------
1717

18-
with Ada.Exceptions;
19-
2018
with Ada.Strings.UTF_Encoding;
2119

2220
with Libadalang.Analysis; use Libadalang.Analysis;
2321
with Libadalang.Common; use Libadalang.Common;
2422

2523
with Laltools.Common; use Laltools.Common;
2624

25+
with LSP.Common;
2726
with LSP.Messages;
2827
with LSP.Messages.Client_Requests;
2928
with LSP.Lal_Utils;
@@ -248,22 +247,28 @@ package body LSP.Ada_Handlers.Refactor_Change_Parameter_Mode is
248247
Client_Message_Receiver'Class;
249248
Error : in out LSP.Errors.Optional_ResponseError)
250249
is
250+
use Laltools.Refactor;
251+
use LSP.Messages;
252+
use LSP.Types;
253+
use VSS.Strings.Conversions;
254+
251255
Message_Handler : LSP.Ada_Handlers.Message_Handler renames
252256
LSP.Ada_Handlers.Message_Handler (Handler.all);
253-
254257
Context : LSP.Ada_Contexts.Context renames
255258
Message_Handler.Contexts.Get (Self.Context).all;
256259

257260
Document : constant LSP.Ada_Documents.Document_Access :=
258261
Message_Handler.Get_Open_Document (Self.Where.textDocument.uri);
259-
Apply : LSP.Messages.Client_Requests.Workspace_Apply_Edit_Request;
260262

261-
Workspace_Edits : LSP.Messages.WorkspaceEdit renames Apply.params.edit;
263+
Apply : Client_Requests.Workspace_Apply_Edit_Request;
264+
Workspace_Edits : WorkspaceEdit renames Apply.params.edit;
265+
Label : Optional_Virtual_String renames Apply.params.label;
262266

263267
Node : constant Ada_Node :=
264268
Document.Get_Node_At (Context, Self.Where.position);
265269

266-
Target_Subp : Defining_Name := No_Defining_Name;
270+
Target_Subp : constant Defining_Name :=
271+
Resolve_Name_Precisely (Get_Node_As_Name (Node));
267272
Target_Parameters_Indices : constant Parameter_Indices_Range_Type :=
268273
(First => Positive (Self.First_Param_Index),
269274
Last => Positive (Self.Last_Param_Index));
@@ -298,12 +303,6 @@ package body LSP.Ada_Handlers.Refactor_Change_Parameter_Mode is
298303
end Value;
299304

300305
begin
301-
Apply.params.label :=
302-
(Is_Set => True,
303-
Value =>
304-
VSS.Strings.Conversions.To_Virtual_String (Command'External_Tag));
305-
Target_Subp := Resolve_Name_Precisely (Get_Node_As_Name (Node));
306-
307306
if Target_Subp.Is_Null then
308307
Error :=
309308
(Is_Set => True,
@@ -323,22 +322,38 @@ package body LSP.Ada_Handlers.Refactor_Change_Parameter_Mode is
323322

324323
Edits := Changer.Refactor (Analysis_Units'Access);
325324

326-
Workspace_Edits := LSP.Lal_Utils.To_Workspace_Edit
327-
(Edits,
328-
Message_Handler.Resource_Operations,
329-
Message_Handler.Versioned_Documents,
330-
Message_Handler'Access);
325+
if Edits = No_Refactoring_Edits then
326+
Error :=
327+
(Is_Set => True,
328+
Value =>
329+
(code => LSP.Errors.UnknownErrorCode,
330+
message => VSS.Strings.Conversions.To_Virtual_String
331+
("Failed to execute the Change Parameter Mode refactoring."),
332+
data => <>));
333+
334+
else
335+
Workspace_Edits :=
336+
LSP.Lal_Utils.To_Workspace_Edit
337+
(Edits => Edits,
338+
Resource_Operations => Message_Handler.Resource_Operations,
339+
Versioned_Documents => Message_Handler.Versioned_Documents,
340+
Document_Provider => Message_Handler'Access);
341+
Label :=
342+
(Is_Set => True,
343+
Value => To_Virtual_String (Command'External_Tag));
331344

332-
Client.On_Workspace_Apply_Edit_Request (Apply);
345+
Client.On_Workspace_Apply_Edit_Request (Apply);
346+
end if;
333347

334348
exception
335349
when E : others =>
350+
LSP.Common.Log (Message_Handler.Trace, E);
336351
Error :=
337352
(Is_Set => True,
338353
Value =>
339354
(code => LSP.Errors.UnknownErrorCode,
340355
message => VSS.Strings.Conversions.To_Virtual_String
341-
(Ada.Exceptions.Exception_Information (E)),
356+
("Failed to execute the Change Parameter Mode refactoring."),
342357
data => <>));
343358
end Execute;
344359

source/ada/lsp-ada_handlers-refactor_change_parameters_default_value.adb

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@
2121
-- <http://www.gnu.org/licenses/>. --
2222
------------------------------------------------------------------------------
2323

24-
with Ada.Exceptions;
2524
with Ada.Strings.UTF_Encoding;
2625

2726
with Langkit_Support.Slocs; use Langkit_Support.Slocs;
2827

29-
with Libadalang.Analysis; use Libadalang.Analysis;
28+
with Libadalang.Analysis; use Libadalang.Analysis;
3029

3130
with Laltools.Refactor.Subprogram_Signature.Change_Parameters_Default_Value;
3231

32+
with LSP.Common;
3333
with LSP.Messages.Client_Requests;
3434
with LSP.Lal_Utils;
3535

@@ -138,26 +138,29 @@ package body LSP.Ada_Handlers.Refactor_Change_Parameters_Default_Value is
138138
Client_Message_Receiver'Class;
139139
Error : in out LSP.Errors.Optional_ResponseError)
140140
is
141+
use Laltools.Refactor;
141142
use Laltools.Refactor.Subprogram_Signature.
142143
Change_Parameters_Default_Value;
144+
use LSP.Messages;
145+
use LSP.Types;
143146
use VSS.Strings.Conversions;
144147

145148
Message_Handler : LSP.Ada_Handlers.Message_Handler renames
146149
LSP.Ada_Handlers.Message_Handler (Handler.all);
147150
Context : LSP.Ada_Contexts.Context renames
148151
Message_Handler.Contexts.Get (Self.Context).all;
149152

150-
Apply : LSP.Messages.Client_Requests.Workspace_Apply_Edit_Request;
151-
152-
Workspace_Edits : LSP.Messages.WorkspaceEdit renames Apply.params.edit;
153+
Apply : Client_Requests.Workspace_Apply_Edit_Request;
154+
Workspace_Edits : WorkspaceEdit renames Apply.params.edit;
155+
Label : Optional_Virtual_String renames Apply.params.label;
153156

154157
Unit : constant Analysis_Unit :=
155158
Context.LAL_Context.Get_From_File
156159
(Context.URI_To_File (Self.Where.uri));
157160

158161
Parameters_SLOC_Range : constant Source_Location_Range :=
159-
(Line_Number (Self.Where.span.first.line) + 1,
160-
Line_Number (Self.Where.span.last.line) + 1,
162+
(Langkit_Support.Slocs.Line_Number (Self.Where.span.first.line) + 1,
163+
Langkit_Support.Slocs.Line_Number (Self.Where.span.last.line) + 1,
161164
Column_Number (Self.Where.span.first.character) + 1,
162165
Column_Number (Self.Where.span.last.character) + 1);
163166

@@ -169,31 +172,48 @@ package body LSP.Ada_Handlers.Refactor_Change_Parameters_Default_Value is
169172
New_Parameters_Default_Value =>
170173
To_Unbounded_UTF_8_String (Self.New_Parameters_Default_Value));
171174

172-
Edits : Laltools.Refactor.Refactoring_Edits;
173-
174175
function Analysis_Units return Analysis_Unit_Array is
175176
(Context.Analysis_Units);
176177
-- Provides the Context Analysis_Unit_Array to the Pull_Upper
177178

178-
begin
179-
Edits := Changer.Refactor (Analysis_Units'Access);
179+
Edits : constant Laltools.Refactor.Refactoring_Edits :=
180+
Changer.Refactor (Analysis_Units'Access);
180181

181-
Workspace_Edits := LSP.Lal_Utils.To_Workspace_Edit
182-
(Edits => Edits,
183-
Resource_Operations => Message_Handler.Resource_Operations,
184-
Versioned_Documents => Message_Handler.Versioned_Documents,
185-
Document_Provider => Message_Handler'Access);
182+
begin
183+
if Edits = No_Refactoring_Edits then
184+
Error :=
185+
(Is_Set => True,
186+
Value =>
187+
(code => LSP.Errors.UnknownErrorCode,
188+
message => VSS.Strings.Conversions.To_Virtual_String
189+
("Failed to execute the Change Parameter Default Value "
190+
& "refactoring."),
191+
data => <>));
192+
193+
else
194+
Workspace_Edits :=
195+
LSP.Lal_Utils.To_Workspace_Edit
196+
(Edits => Edits,
197+
Resource_Operations => Message_Handler.Resource_Operations,
198+
Versioned_Documents => Message_Handler.Versioned_Documents,
199+
Document_Provider => Message_Handler'Access);
200+
Label :=
201+
(Is_Set => True,
202+
Value => To_Virtual_String (Command'External_Tag));
186203

187-
Client.On_Workspace_Apply_Edit_Request (Apply);
204+
Client.On_Workspace_Apply_Edit_Request (Apply);
205+
end if;
188206

189207
exception
190208
when E : others =>
209+
LSP.Common.Log (Message_Handler.Trace, E);
191210
Error :=
192211
(Is_Set => True,
193212
Value =>
194213
(code => LSP.Errors.UnknownErrorCode,
195214
message => VSS.Strings.Conversions.To_Virtual_String
196-
(Ada.Exceptions.Exception_Information (E)),
215+
("Failed to execute the Change Parameter Default Value "
216+
& "refactoring."),
197217
data => <>));
198218
end Execute;
199219

0 commit comments

Comments
 (0)