Skip to content

Commit da46ea5

Browse files
committed
Merge branch 'topic/alire' into 'master'
Improve Alire support on fresh checkouts of crates See merge request eng/ide/ada_language_server!1957
2 parents 0b7fb1d + 3f02254 commit da46ea5

File tree

8 files changed

+285
-189
lines changed

8 files changed

+285
-189
lines changed

.vscode/tasks.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,15 @@
3232
"args": ["GPRBUILD_CARGS=-cargs:ada -gnatef"],
3333
"problemMatcher": ["$ada"],
3434
"group": "build",
35-
"label": "ada: Build current project"
35+
"label": "ada: Build current project",
36+
"presentation": {
37+
"echo": true,
38+
"reveal": "silent",
39+
"focus": false,
40+
"panel": "shared",
41+
"showReuseMessage": true,
42+
"clear": false
43+
}
3644
}
3745
]
3846
}

source/ada/lsp-ada_client_capabilities.adb

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ with VSS.Strings.Conversions;
2727
with LSP.Ada_Configurations;
2828
with LSP.Constants;
2929
with LSP.Enumerations;
30-
with LSP.GPR_Files;
3130
with LSP.Structures.Unwrap;
3231

3332
with LSP.Structures.LSPAny_Vectors;
@@ -209,8 +208,6 @@ package body LSP.Ada_Client_Capabilities is
209208

210209
Self.Parse_Experimental;
211210

212-
LSP.GPR_Files.Set_Environment (Client_Capability (Self));
213-
214211
end Initialize;
215212

216213
------------------------

source/ada/lsp-ada_handlers-project_loading.adb

Lines changed: 90 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -59,23 +59,24 @@ package body LSP.Ada_Handlers.Project_Loading is
5959
LSP.GNATCOLL_Tracers.Create ("ALS.PROJECT", GNATCOLL.Traces.On);
6060

6161
Runtime_Indexing : constant GNATCOLL.Traces.Trace_Handle :=
62-
GNATCOLL.Traces.Create ("ALS.RUNTIME_INDEXING",
63-
GNATCOLL.Traces.On);
62+
GNATCOLL.Traces.Create ("ALS.RUNTIME_INDEXING", GNATCOLL.Traces.On);
6463
-- Trace to enable/disable runtime indexing. Useful for the testsuite.
6564

6665
type GPR2_Reporter is new GPR2.Reporter.Object with record
6766
Log : GPR2.Log.Object;
6867
end record;
6968

70-
overriding procedure Internal_Report
71-
(Self : in out GPR2_Reporter;
72-
Msg : GPR2.Message.Object);
69+
overriding
70+
procedure Internal_Report
71+
(Self : in out GPR2_Reporter; Msg : GPR2.Message.Object);
7372

74-
overriding function Verbosity
73+
overriding
74+
function Verbosity
7575
(Self : GPR2_Reporter) return GPR2.Reporter.Verbosity_Level
7676
is (GPR2.Reporter.Regular);
7777

78-
LF : VSS.Characters.Virtual_Character renames VSS.Characters.Latin.Line_Feed;
78+
LF : VSS.Characters.Virtual_Character
79+
renames VSS.Characters.Latin.Line_Feed;
7980

8081
procedure Load_Project
8182
(Self : in out Message_Handler'Class;
@@ -106,8 +107,7 @@ package body LSP.Ada_Handlers.Project_Loading is
106107
(Self : in out Message_Handler'Class);
107108
-- Fill Self.Project_Predefined_Sources with loaded project tree runtime
108109

109-
procedure Enqueue_Indexing_Job
110-
(Self : in out Message_Handler'Class);
110+
procedure Enqueue_Indexing_Job (Self : in out Message_Handler'Class);
111111
-- Enqueue the indexing job, which indexes all the project's sources.
112112
-- This also indexes immediately any already opened document, creating
113113
-- the handler's fallback context before for that purpose.
@@ -152,22 +152,34 @@ package body LSP.Ada_Handlers.Project_Loading is
152152

153153
elsif Is_Alire_Crate then
154154
Tracer.Trace ("Workspace is an Alire crate");
155-
Tracer.Trace ("Determining project from 'alr show' output");
156155

157-
LSP.Alire.Determine_Alire_Project
158-
(Root => Self.Client.Root_Directory.Display_Full_Name,
159-
Error => Alire_Error,
160-
Project => Project_File);
156+
Tracer.Trace ("Performing minimal Alire sync");
157+
LSP.Alire.Conservative_Alire_Sync
158+
(Self.Client.Root_Directory.Display_Full_Name, Alire_Error);
161159

162160
if not Alire_Error.Is_Empty then
163161
Tracer.Trace_Text ("Encountered errors: " & Alire_Error);
164162
Self.Project_Status.Set_Alire_Messages ([Alire_Error]);
165163
else
166-
-- Report how we found the project
167-
Self.Project_Status.Set_Project_Type
168-
(LSP.Ada_Project_Loading.Alire_Project);
169-
Self.Project_Status.Set_Alire_Messages ([]);
164+
Tracer.Trace ("Determining project from 'alr show' output");
165+
166+
LSP.Alire.Determine_Alire_Project
167+
(Root => Self.Client.Root_Directory.Display_Full_Name,
168+
Error => Alire_Error,
169+
Project => Project_File);
170+
171+
if not Alire_Error.Is_Empty then
172+
Tracer.Trace_Text ("Encountered errors: " & Alire_Error);
173+
Self.Project_Status.Set_Alire_Messages ([Alire_Error]);
174+
else
175+
-- Report how we found the project
176+
Self.Project_Status.Set_Project_Type
177+
(LSP.Ada_Project_Loading.Alire_Project);
178+
Self.Project_Status.Set_Alire_Messages ([]);
179+
end if;
180+
170181
end if;
182+
171183
end if;
172184

173185
-- If still haven't found a project, try to find a unique project at the root
@@ -216,8 +228,7 @@ package body LSP.Ada_Handlers.Project_Loading is
216228
then
217229
VSS.Strings.Virtual_String'
218230
("utf-8") -- Alire projects tend to prefer utf-8
219-
else
220-
"iso-8859-1");
231+
else "iso-8859-1");
221232

222233
begin
223234
-- We have an Alire crate and we did not encounter any issue
@@ -249,7 +260,8 @@ package body LSP.Ada_Handlers.Project_Loading is
249260
VSS.Strings.Conversions.To_Virtual_String
250261
(URIs.Conversions.To_File
251262
(VSS.Strings.Conversions.To_UTF_8_String
252-
(GPR_Configuration_File), True));
263+
(GPR_Configuration_File),
264+
True));
253265
end if;
254266

255267
Load_Project
@@ -288,9 +300,9 @@ package body LSP.Ada_Handlers.Project_Loading is
288300
-- Internal_Report --
289301
---------------------
290302

291-
overriding procedure Internal_Report
292-
(Self : in out GPR2_Reporter;
293-
Msg : GPR2.Message.Object) is
303+
overriding
304+
procedure Internal_Report
305+
(Self : in out GPR2_Reporter; Msg : GPR2.Message.Object) is
294306
begin
295307
Self.Log.Append (Msg);
296308
end Internal_Report;
@@ -309,12 +321,11 @@ package body LSP.Ada_Handlers.Project_Loading is
309321

310322
C : constant Context_Access := new Context (Self.Tracer);
311323

312-
Reader : LSP.Ada_Handlers.File_Readers.LSP_File_Reader
313-
(Self'Unchecked_Access);
324+
Reader :
325+
LSP.Ada_Handlers.File_Readers.LSP_File_Reader (Self'Unchecked_Access);
314326
Root : GNATCOLL.VFS.Virtual_File;
315327
begin
316-
Tracer.Trace
317-
("Loading the implicit project because " & Status'Image);
328+
Tracer.Trace ("Loading the implicit project because " & Status'Image);
318329

319330
LSP.Ada_Project_Loading.Set_Project_Type
320331
(Self.Project_Status, LSP.Ada_Project_Loading.Implicit_Project);
@@ -388,12 +399,12 @@ package body LSP.Ada_Handlers.Project_Loading is
388399
use type VSS.Strings.Virtual_String;
389400
use type GNATCOLL.VFS.Virtual_File;
390401

391-
Project_File : GNATCOLL.VFS.Virtual_File :=
402+
Project_File : GNATCOLL.VFS.Virtual_File :=
392403
LSP.Utils.To_Virtual_File (Project_Path);
393404

394405
GPR_Config_File : GNATCOLL.VFS.Virtual_File;
395406

396-
Root : GNATCOLL.VFS.Virtual_File;
407+
Root : GNATCOLL.VFS.Virtual_File;
397408

398409
procedure Create_Context_For_Non_Aggregate
399410
(View : GPR2.Project.View.Object;
@@ -416,11 +427,12 @@ package body LSP.Ada_Handlers.Project_Loading is
416427
use LSP.Ada_Context_Sets;
417428
use LSP.Ada_Contexts;
418429

419-
C : constant Context_Access :=
430+
C : constant Context_Access :=
420431
new LSP.Ada_Contexts.Context (Self.Tracer);
421432

422-
Reader : LSP.Ada_Handlers.File_Readers.LSP_File_Reader
423-
(Self'Unchecked_Access);
433+
Reader :
434+
LSP.Ada_Handlers.File_Readers.LSP_File_Reader
435+
(Self'Unchecked_Access);
424436

425437
Default_Config : Libadalang.Preprocessing.File_Config;
426438
File_Configs : Libadalang.Preprocessing.File_Config_Maps.Map;
@@ -473,8 +485,9 @@ package body LSP.Ada_Handlers.Project_Loading is
473485
Tree => Self.Project_Tree,
474486
Charset => VSS.Strings.Conversions.To_UTF_8_String (Charset));
475487

476-
Tracer.Trace ("Prepend Context Id: "
477-
& VSS.Strings.Conversions.To_UTF_8_String (C.Id));
488+
Tracer.Trace
489+
("Prepend Context Id: "
490+
& VSS.Strings.Conversions.To_UTF_8_String (C.Id));
478491
Self.Contexts.Prepend (C);
479492
end Create_Context_For_Non_Aggregate;
480493

@@ -484,15 +497,16 @@ package body LSP.Ada_Handlers.Project_Loading is
484497

485498
procedure Log_GPR2_Diagnostics is
486499
Log : constant GPR2.Log.Object'Class :=
487-
GPR2_Reporter (Self.Project_Tree.Reporter.Element.all).Log;
500+
GPR2_Reporter (Self.Project_Tree.Reporter.Element.all).Log;
488501
begin
489502
Tracer.Increase_Indent;
490503
if Log.Is_Empty then
491504
Tracer.Trace ("No GPR2 messages");
492505
else
493506
for Msg of Log loop
494507
declare
495-
Message : constant String := Msg.Format (Full_Path_Name => True);
508+
Message : constant String :=
509+
Msg.Format (Full_Path_Name => True);
496510
begin
497511
Tracer.Trace (Message);
498512
end;
@@ -544,11 +558,12 @@ package body LSP.Ada_Handlers.Project_Loading is
544558
end if;
545559

546560
-- Set Valid Status for now, it can be overwritten in case of errors
547-
Self.Project_Status.Set_Load_Status (LSP.Ada_Project_Loading.Valid_Project);
561+
Self.Project_Status.Set_Load_Status
562+
(LSP.Ada_Project_Loading.Valid_Project);
548563

549564
declare
550-
Opts : GPR2.Options.Object;
551-
Success : Boolean;
565+
Opts : GPR2.Options.Object;
566+
Success : Boolean;
552567

553568
Reporter : GPR2_Reporter;
554569
-- This reporter object is passed to the GPR2 Load function, but it
@@ -567,18 +582,20 @@ package body LSP.Ada_Handlers.Project_Loading is
567582

568583
Tracer.Trace ("Loading project with GPR2");
569584

570-
Success := Self.Project_Tree.Load
571-
(Opts,
572-
Reporter => Reporter,
573-
With_Runtime => True,
574-
Absent_Dir_Error => GPR2.No_Error,
575-
Environment => Environment);
585+
Success :=
586+
Self.Project_Tree.Load
587+
(Opts,
588+
Reporter => Reporter,
589+
With_Runtime => True,
590+
Absent_Dir_Error => GPR2.No_Error,
591+
Environment => Environment);
576592

577593
Tracer.Trace ("GPR2 messages after load:");
578594
Log_GPR2_Diagnostics;
579595

580596
if not Success then
581-
Self.Project_Status.Set_Load_Status (LSP.Ada_Project_Loading.Invalid_Project);
597+
Self.Project_Status.Set_Load_Status
598+
(LSP.Ada_Project_Loading.Invalid_Project);
582599
end if;
583600

584601
if Success then
@@ -595,7 +612,8 @@ package body LSP.Ada_Handlers.Project_Loading is
595612
exception
596613
when E : others =>
597614
Tracer.Trace_Exception (E);
598-
Self.Project_Status.Set_Load_Status (LSP.Ada_Project_Loading.Invalid_Project);
615+
Self.Project_Status.Set_Load_Status
616+
(LSP.Ada_Project_Loading.Invalid_Project);
599617
end;
600618

601619
if Self.Project_Status.Is_Project_Loaded then
@@ -605,11 +623,11 @@ package body LSP.Ada_Handlers.Project_Loading is
605623
Self.Project_Tree.Root_Project;
606624
begin
607625
-- Only check runtime issues for Ada
608-
Self.Project_Status.Set_Missing_Ada_Runtime (
609-
Value =>
626+
Self.Project_Status.Set_Missing_Ada_Runtime
627+
(Value =>
610628
(not Root.Is_Defined
611629
or else Root.Language_Ids.Contains (GPR2.Ada_Language))
612-
and then not Self.Project_Tree.Has_Runtime_Project);
630+
and then not Self.Project_Tree.Has_Runtime_Project);
613631
end;
614632

615633
Update_Project_Predefined_Sources (Self);
@@ -632,9 +650,10 @@ package body LSP.Ada_Handlers.Project_Loading is
632650
else
633651
declare
634652
Provider : GPR2_Provider_And_Projects :=
635-
(Provider => Create_Project_Unit_Provider
636-
(Tree => Self.Project_Tree,
637-
Project => Self.Project_Tree.Root_Project),
653+
(Provider =>
654+
Create_Project_Unit_Provider
655+
(Tree => Self.Project_Tree,
656+
Project => Self.Project_Tree.Root_Project),
638657
Projects => <>);
639658
begin
640659
Provider.Projects.Append (Self.Project_Tree.Root_Project);
@@ -645,7 +664,8 @@ package body LSP.Ada_Handlers.Project_Loading is
645664
end if;
646665
end if;
647666

648-
Tracer.Trace ("Project status after loading: " & Self.Project_Status'Image);
667+
Tracer.Trace
668+
("Project status after loading: " & Self.Project_Status'Image);
649669

650670
-- We have successfully loaded a real project: monitor the filesystem
651671
-- for any changes on the sources of the project
@@ -660,9 +680,7 @@ package body LSP.Ada_Handlers.Project_Loading is
660680
-- Enqueue_Indexing_Job --
661681
--------------------------
662682

663-
procedure Enqueue_Indexing_Job
664-
(Self : in out Message_Handler'Class)
665-
is
683+
procedure Enqueue_Indexing_Job (Self : in out Message_Handler'Class) is
666684
procedure Create_Fallback_Context (Self : in out Message_Handler'Class);
667685
-- Create a fallback context for the given handler's contexts' set.
668686

@@ -764,13 +782,12 @@ package body LSP.Ada_Handlers.Project_Loading is
764782
-- Reload_Implicit_Project_Dirs --
765783
----------------------------------
766784

767-
procedure Reload_Implicit_Project_Dirs
768-
(Self : in out Message_Handler'Class)
785+
procedure Reload_Implicit_Project_Dirs (Self : in out Message_Handler'Class)
769786
is
770787
Project : GPR2.Project.Tree.View_Builder.Object :=
771-
GPR2.Project.Tree.View_Builder.Create
772-
(Project_Dir => GPR2.Path_Name.Create_Directory ("."),
773-
Name => "default");
788+
GPR2.Project.Tree.View_Builder.Create
789+
(Project_Dir => GPR2.Path_Name.Create_Directory ("."),
790+
Name => "default");
774791
Values : GPR2.Containers.Value_List;
775792
Opts : GPR2.Options.Object;
776793
Success : Boolean;
@@ -785,15 +802,15 @@ package body LSP.Ada_Handlers.Project_Loading is
785802
end loop;
786803

787804
Project.Set_Attribute
788-
(GPR2.Project.Registry.Attribute.Source_Dirs,
789-
Values);
805+
(GPR2.Project.Registry.Attribute.Source_Dirs, Values);
790806

791807
-- First we load the fallback project
792-
Success := Self.Project_Tree.Load_Virtual_View
793-
(Project,
794-
Opts,
795-
With_Runtime => True,
796-
Absent_Dir_Error => GPR2.No_Error);
808+
Success :=
809+
Self.Project_Tree.Load_Virtual_View
810+
(Project,
811+
Opts,
812+
With_Runtime => True,
813+
Absent_Dir_Error => GPR2.No_Error);
797814

798815
if not Success then
799816
for C in Self.Project_Tree.Log_Messages.Iterate loop
@@ -818,7 +835,8 @@ package body LSP.Ada_Handlers.Project_Loading is
818835

819836
procedure Reload_Project (Self : in out Message_Handler'CLass) is
820837
begin
821-
Tracer.Trace ("Reload_Project was called. Releasing current project context.");
838+
Tracer.Trace
839+
("Reload_Project was called. Releasing current project context.");
822840
Release_Contexts_And_Project_Info (Self);
823841
Self.Project_Status := LSP.Ada_Project_Loading.No_Project_Status;
824842
Ensure_Project_Loaded (Self);
@@ -828,8 +846,7 @@ package body LSP.Ada_Handlers.Project_Loading is
828846
-- Reload_Implicit_Project --
829847
-----------------------------
830848

831-
procedure Reload_Implicit_Project
832-
(Self : in out Message_Handler'Class) is
849+
procedure Reload_Implicit_Project (Self : in out Message_Handler'Class) is
833850
begin
834851
Load_Implicit_Project (Self, Self.Project_Status.Get_Load_Status);
835852
end Reload_Implicit_Project;

0 commit comments

Comments
 (0)