Skip to content

Commit e34861e

Browse files
committed
Merge branch 'topic/alr_gpr2_fx/edge' into 'edge'
Pass environment from `alr printenv` to GPR2 See merge request eng/ide/ada_language_server!1187
2 parents f6c8a74 + 2c5f2e7 commit e34861e

File tree

6 files changed

+51
-161
lines changed

6 files changed

+51
-161
lines changed

.gitlab-ci.yml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ build_and_test:
1919
- . ~/.aws_container_credentials
2020
- export PATH=/it/e3/bin:$PATH
2121

22-
# Check whether we're in an MR targeting 'edge' and setup some
23-
# variables if so.
22+
# Check whether we're in an MR targeting 'edge' or commiting to
23+
# `something/edge` branch then setup some variables.
2424
- TARGET_BRANCH="master"
25-
- if [ "x$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" = "xedge" ]; then
25+
- if [[ "x$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" = "xedge" ||
26+
"$CI_COMMIT_BRANCH" =~ .*/edge ]];
27+
then
2628
echo "Targeting the edge branch." ;
2729
REPO_SUFFIX="-edge" ;
2830
BUILD_SPACE_SUFFIX="_edge" ;
@@ -83,7 +85,8 @@ build_and_test:
8385
export GPR_PROJECT_PATH=/it/wave/x86_64-linux/als/src/subprojects/gnatdoc/gnat:$GPR_PROJECT_PATH;
8486
export GPR_PROJECT_PATH=/it/wave/x86_64-linux/als/src/subprojects/VSS/gnat:$GPR_PROJECT_PATH;
8587
cd /it/wave/x86_64-linux/als/src;
86-
lsif-ada gnat/lsp_server.gpr > $CI_PROJECT_DIR/dump.lsif )
88+
lsif-ada gnat/lsp_server.gpr > $CI_PROJECT_DIR/dump.lsif ||
89+
touch $CI_PROJECT_DIR/dump.lsif )
8790

8891
- if [ ! -z ${FAILED+x} ]; then echo "There was at least one testcase failure" && exit 1; fi
8992

source/ada/lsp-ada_handlers-alire.adb

Lines changed: 8 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,14 @@
1616
------------------------------------------------------------------------------
1717

1818
with Ada.Streams;
19-
with Ada.Containers.Hashed_Sets;
2019
with GNAT.OS_Lib;
2120

22-
with GPR2.Path_Name;
23-
with GPR2.Project;
24-
2521
with VSS.Stream_Element_Vectors;
2622
with VSS.Strings.Conversions;
2723
with VSS.Strings.Converters.Decoders;
2824
with VSS.Characters.Latin;
2925
with VSS.Regular_Expressions;
3026

31-
with Spawn.Environments;
3227
with Spawn.Processes;
3328
with Spawn.Processes.Monitor_Loop;
3429
with Spawn.Process_Listeners;
@@ -82,46 +77,14 @@ package body LSP.Ada_Handlers.Alire is
8277
Has_Alire : out Boolean;
8378
Error : out VSS.Strings.Virtual_String;
8479
Project : out VSS.Strings.Virtual_String;
85-
Search_Path : out VSS.String_Vectors.Virtual_String_Vector;
86-
Scenario : in out Scenario_Variable_List)
80+
Environment : in out GPR2.Environment.Object)
8781
is
8882
use type GNAT.OS_Lib.String_Access;
8983
use type Spawn.Process_Exit_Code;
9084
use type Spawn.Process_Exit_Status;
9185
use type Spawn.Process_Status;
9286
use all type VSS.Regular_Expressions.Match_Option;
9387

94-
package Path_Sets is new Ada.Containers.Hashed_Sets
95-
(GPR2.Path_Name.Object,
96-
GPR2.Path_Name.Hash,
97-
GPR2.Path_Name."=",
98-
GPR2.Path_Name."=");
99-
100-
function To_Directory
101-
(Value : VSS.Strings.Virtual_String) return GPR2.Path_Name.Object;
102-
103-
------------------
104-
-- To_Directory --
105-
------------------
106-
107-
function To_Directory
108-
(Value : VSS.Strings.Virtual_String) return GPR2.Path_Name.Object is
109-
begin
110-
if Value.Is_Empty then
111-
return GPR2.Path_Name.Create_Directory (GPR2.Filename_Type (Root));
112-
else
113-
return GPR2.Path_Name.Create_Directory
114-
(GPR2.Filename_Type
115-
(VSS.Strings.Conversions.To_UTF_8_String (Value)),
116-
GPR2.Filename_Type (Root));
117-
end if;
118-
end To_Directory;
119-
120-
Known_Search_Path : Path_Sets.Set;
121-
122-
Env : constant Spawn.Environments.Process_Environment :=
123-
Spawn.Environments.System_Environment;
124-
12588
ALR : GNAT.OS_Lib.String_Access :=
12689
GNAT.OS_Lib.Locate_Exec_On_Path ("alr");
12790

@@ -145,7 +108,6 @@ package body LSP.Ada_Handlers.Alire is
145108
Decoder : VSS.Strings.Converters.Decoders.Virtual_String_Decoder;
146109
begin
147110
Project.Clear;
148-
Search_Path.Clear;
149111
Has_Alire := ALR /= null;
150112

151113
if ALR = null then
@@ -239,67 +201,20 @@ package body LSP.Ada_Handlers.Alire is
239201
end;
240202
end loop;
241203

242-
-- Populate known search path
243-
declare
244-
List : constant GPR2.Path_Name.Set.Object :=
245-
GPR2.Project.Default_Search_Paths (Current_Directory => True);
246-
begin
247-
for Item of List loop
248-
Known_Search_Path.Include (Item);
249-
end loop;
250-
end;
251-
252204
-- Find variables in `alr printenv` output
253205
Lines := List (2).Text.Split_Lines;
254206

255207
for Line of Lines loop
256208
declare
257-
use type VSS.Strings.Virtual_String;
258-
259-
Name : VSS.Strings.Virtual_String;
260-
Value : VSS.Strings.Virtual_String;
261209
Match : constant VSS.Regular_Expressions.Regular_Expression_Match
262210
:= Export_Pattern.Match (Line, Anchored);
263211
begin
264212
if Match.Has_Match then
265-
Name := Match.Captured (1);
266-
Value := Match.Captured (2);
267-
268-
if Name = "PATH"
269-
or else Name = "ALIRE"
270-
or else Name = "LD_LIBRARY_PATH"
271-
or else Name = "DYLD_LIBRARY_PATH"
272-
or else Name.Ends_With ("_PREFIX")
273-
then
274-
275-
null; --- Skip useless variables
276-
elsif Name = "GPR_PROJECT_PATH"
277-
or else Name = "ADA_PROJECT_PATH"
278-
then
279-
280-
declare
281-
List : constant VSS.String_Vectors.Virtual_String_Vector
282-
:= Value.Split (':');
283-
begin
284-
for Item of List loop
285-
declare
286-
Path : constant GPR2.Path_Name.Object :=
287-
To_Directory (Item);
288-
begin
289-
if not Known_Search_Path.Contains (Path) then
290-
Search_Path.Append (Item);
291-
end if;
292-
end;
293-
end loop;
294-
end;
295-
elsif not Env.Contains
296-
(VSS.Strings.Conversions.To_UTF_8_String (Name))
297-
then
298-
299-
-- Don't override already set variables
300-
Scenario.Names.Append (Name);
301-
Scenario.Values.Append (Value);
302-
end if;
213+
Environment.Insert
214+
(Key => VSS.Strings.Conversions.To_UTF_8_String
215+
(Match.Captured (1)),
216+
Value => VSS.Strings.Conversions.To_UTF_8_String
217+
(Match.Captured (2)));
303218
end if;
304219
end;
305220
end loop;
@@ -317,13 +232,12 @@ package body LSP.Ada_Handlers.Alire is
317232
(Root : String;
318233
Has_Alire : out Boolean;
319234
Error : out VSS.Strings.Virtual_String;
320-
Search_Path : out VSS.String_Vectors.Virtual_String_Vector;
321-
Scenario : in out Scenario_Variable_List)
235+
Environment : in out GPR2.Environment.Object)
322236
is
323237
Ignore : VSS.Strings.Virtual_String;
324238
begin
325239
-- TODO: optimization: don't run second alire process
326-
Run_Alire (Root, Has_Alire, Error, Ignore, Search_Path, Scenario);
240+
Run_Alire (Root, Has_Alire, Error, Ignore, Environment);
327241
end Run_Alire;
328242

329243
-------------------

source/ada/lsp-ada_handlers-alire.ads

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@
1717

1818
-- Alire integration routines
1919

20+
with GPR2.Environment;
21+
2022
with VSS.Strings;
21-
with VSS.String_Vectors;
2223

2324
private
2425
package LSP.Ada_Handlers.Alire is
@@ -28,17 +29,15 @@ package LSP.Ada_Handlers.Alire is
2829
Has_Alire : out Boolean;
2930
Error : out VSS.Strings.Virtual_String;
3031
Project : out VSS.Strings.Virtual_String;
31-
Search_Path : out VSS.String_Vectors.Virtual_String_Vector;
32-
Scenario : in out Scenario_Variable_List);
32+
Environment : in out GPR2.Environment.Object);
3333
-- if Root directory contains `alire.toml` file, then run
3434
-- `alr printenv` and fetch the first project from `alire.toml`.
3535

3636
procedure Run_Alire
3737
(Root : String;
3838
Has_Alire : out Boolean;
3939
Error : out VSS.Strings.Virtual_String;
40-
Search_Path : out VSS.String_Vectors.Virtual_String_Vector;
41-
Scenario : in out Scenario_Variable_List);
40+
Environment : in out GPR2.Environment.Object);
4241
-- The same as above, but without fetching the project file
4342

4443
end LSP.Ada_Handlers.Alire;

source/ada/lsp-ada_handlers.adb

Lines changed: 29 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ with GNAT.OS_Lib;
3030
with GNATCOLL.Utils; use GNATCOLL.Utils;
3131

3232
with GPR2.Containers;
33+
with GPR2.Environment;
3334
with GPR2.Log;
3435
with GPR2.Message;
3536
with GPR2.Project.Registry.Attribute;
@@ -315,12 +316,12 @@ package body LSP.Ada_Handlers is
315316
-- Load the implicit project
316317

317318
procedure Load_Project
318-
(Self : access Message_Handler;
319-
Project_File : VSS.Strings.Virtual_String;
320-
Search_Path : VSS.String_Vectors.Virtual_String_Vector;
321-
Scenario : Scenario_Variable_List;
322-
Charset : VSS.Strings.Virtual_String;
323-
Status : Load_Project_Status);
319+
(Self : access Message_Handler;
320+
Project_File : VSS.Strings.Virtual_String;
321+
Scenario : Scenario_Variable_List;
322+
Environment : GPR2.Environment.Object;
323+
Charset : VSS.Strings.Virtual_String;
324+
Status : Load_Project_Status);
324325
-- Attempt to load the given project file, with the scenario provided.
325326
-- This unloads all currently loaded project contexts. This factorizes code
326327
-- between Load_Project_With_Alire and Ensure_Project_Loaded.
@@ -807,8 +808,8 @@ package body LSP.Ada_Handlers is
807808

808809
Self.Load_Project
809810
(Project_File,
810-
VSS.String_Vectors.Empty_Virtual_String_Vector,
811-
No_Scenario_Variable,
811+
Self.Scenario_Variables,
812+
GPR2.Environment.Process_Environment,
812813
"iso-8859-1",
813814
Single_Project_Found);
814815
else
@@ -4853,12 +4854,12 @@ package body LSP.Ada_Handlers is
48534854
------------------
48544855

48554856
procedure Load_Project
4856-
(Self : access Message_Handler;
4857-
Project_File : VSS.Strings.Virtual_String;
4858-
Search_Path : VSS.String_Vectors.Virtual_String_Vector;
4859-
Scenario : Scenario_Variable_List;
4860-
Charset : VSS.Strings.Virtual_String;
4861-
Status : Load_Project_Status)
4857+
(Self : access Message_Handler;
4858+
Project_File : VSS.Strings.Virtual_String;
4859+
Scenario : Scenario_Variable_List;
4860+
Environment : GPR2.Environment.Object;
4861+
Charset : VSS.Strings.Virtual_String;
4862+
Status : Load_Project_Status)
48624863
is
48634864
Errors : LSP.Messages.ShowMessageParams;
48644865
Error_Text : VSS.String_Vectors.Virtual_String_Vector;
@@ -4956,7 +4957,7 @@ package body LSP.Ada_Handlers is
49564957
end Create_Context_For_Non_Aggregate;
49574958

49584959
GPR : Virtual_File := To_Virtual_File (Project_File);
4959-
Default_Environment : Environment;
4960+
Default_Environment : LSP.Ada_Handlers.Environment;
49604961

49614962
Relocate_Build_Tree : constant Virtual_File :=
49624963
To_Virtual_File (Self.Relocate_Build_Tree);
@@ -4997,31 +4998,20 @@ package body LSP.Ada_Handlers is
49974998
end if;
49984999
end if;
49995000

5000-
-- Update scenario variables
5001+
-- Update scenario variables with user provided values
50015002
for J in 1 .. Scenario.Names.Length loop
50025003
Self.Project_Environment.Context.Insert
50035004
(GPR2.Optional_Name_Type
50045005
(VSS.Strings.Conversions.To_UTF_8_String (Scenario.Names (J))),
50055006
VSS.Strings.Conversions.To_UTF_8_String (Scenario.Values (J)));
50065007
end loop;
50075008

5008-
-- Update project search path
5009-
for Item of Search_Path loop
5010-
declare
5011-
Value : constant GPR2.Path_Name.Object :=
5012-
GPR2.Path_Name.Create_Directory
5013-
(GPR2.Filename_Type
5014-
(VSS.Strings.Conversions.To_UTF_8_String (Item)));
5015-
begin
5016-
Self.Project_Tree.Register_Project_Search_Path (Value);
5017-
end;
5018-
end loop;
5019-
50205009
begin
50215010
Self.Project_Tree.Load_Autoconf
5022-
(Filename => GPR2.Path_Name.Create (GPR),
5023-
Context => Self.Project_Environment.Context,
5024-
Build_Path => Self.Project_Environment.Build_Path);
5011+
(Filename => GPR2.Path_Name.Create (GPR),
5012+
Context => Self.Project_Environment.Context,
5013+
Build_Path => Self.Project_Environment.Build_Path,
5014+
Environment => Environment);
50255015

50265016
Self.Project_Tree.Update_Sources (With_Runtime => True);
50275017

@@ -5101,10 +5091,11 @@ package body LSP.Ada_Handlers is
51015091
Status : Load_Project_Status;
51025092
Errors : VSS.Strings.Virtual_String;
51035093
Project : VSS.Strings.Virtual_String := Project_File;
5104-
Search_Path : VSS.String_Vectors.Virtual_String_Vector;
5105-
Scenario : Scenario_Variable_List := Scenario_Variables;
51065094
UTF_8 : constant VSS.Strings.Virtual_String := "utf-8";
51075095

5096+
Environment : GPR2.Environment.Object :=
5097+
GPR2.Environment.Process_Environment;
5098+
51085099
Alire_TOML : constant GNATCOLL.VFS.Virtual_File :=
51095100
Self.Root.Create_From_Dir ("alire.toml");
51105101
begin
@@ -5121,8 +5112,7 @@ package body LSP.Ada_Handlers is
51215112
Has_Alire => Has_Alire,
51225113
Error => Errors,
51235114
Project => Project,
5124-
Search_Path => Search_Path,
5125-
Scenario => Scenario);
5115+
Environment => Environment);
51265116

51275117
Status := Alire_Project;
51285118
else
@@ -5131,8 +5121,7 @@ package body LSP.Ada_Handlers is
51315121
(Root => Self.Root.Display_Full_Name,
51325122
Has_Alire => Has_Alire,
51335123
Error => Errors,
5134-
Search_Path => Search_Path,
5135-
Scenario => Scenario);
5124+
Environment => Environment);
51365125

51375126
Status := Valid_Project_Configured;
51385127
end if;
@@ -5164,26 +5153,10 @@ package body LSP.Ada_Handlers is
51645153
(Message => "Project:"
51655154
& VSS.Strings.Conversions.To_UTF_8_String (Project));
51665155

5167-
Self.Trace.Trace (Message => "Search Path:");
5168-
for Item of Search_Path loop
5169-
Self.Trace.Trace
5170-
(Message => VSS.Strings.Conversions.To_UTF_8_String (Item));
5171-
end loop;
5172-
5173-
Self.Trace.Trace ("Scenario:");
5174-
for J in 1 .. Scenario.Names.Length loop
5175-
Self.Trace.Trace
5176-
(Message => VSS.Strings.Conversions.To_UTF_8_String
5177-
(Scenario.Names (J))
5178-
& "="
5179-
& VSS.Strings.Conversions.To_UTF_8_String
5180-
(Scenario.Values (J)));
5181-
end loop;
5182-
51835156
Self.Load_Project
51845157
(Project_File => Project,
5185-
Search_Path => Search_Path,
5186-
Scenario => Scenario,
5158+
Scenario => Scenario_Variables,
5159+
Environment => Environment,
51875160
Charset => (if Charset.Is_Empty then UTF_8 else Charset),
51885161
Status => Status);
51895162
-- Alire projects tend to use utf-8
@@ -5199,8 +5172,8 @@ package body LSP.Ada_Handlers is
51995172

52005173
Self.Load_Project
52015174
(Project_File => Project,
5202-
Search_Path => VSS.String_Vectors.Empty_Virtual_String_Vector,
52035175
Scenario => Scenario_Variables,
5176+
Environment => Environment,
52045177
Charset => Charset,
52055178
Status => Valid_Project_Configured);
52065179
end if;

0 commit comments

Comments
 (0)