--
-- Copyright (C) 2014-2022, AdaCore
-- SPDX-License-Identifier: Apache-2.0
--
-- This package provides helpers to deal with GNAT's configurations pragmas
-- files.
with Ada.Containers.Hashed_Maps;
with GNATCOLL.Projects; use GNATCOLL.Projects;
with GPR2.Project.Tree;
with GPR2.Project.View;
with Libadalang.Analysis; use Libadalang.Analysis;
package Libadalang.Config_Pragmas is
package Unit_Maps is new Ada.Containers.Hashed_Maps
(Key_Type => Analysis_Unit,
Element_Type => Analysis_Unit,
Hash => Hash,
Equivalent_Keys => "=");
-- Map analysis unit to the local configuration pragmas file that applies
-- to it.
type Config_Pragmas_Mapping is record
Local_Pragmas : Unit_Maps.Map;
-- Mappings that associate a local configuration pragmas file (element)
-- to each analysis unit (key) for which it applies.
Global_Pragmas : Analysis_Unit;
-- Configuration pragmas file that applies to all analysis units, or
-- ``No_Analysis_Unit`` if there is no such file.
end record;
procedure Set_Mapping
(Context : Analysis_Context; Mapping : Config_Pragmas_Mapping);
-- Assign in ``Context`` configuration pragmas files to analysis units as
-- described in ``Mapping``.
--
-- This raises a ``Precondition_Failure`` exception if:
--
-- * ``Context`` is null;
-- * any analysis unit in ``Mapping`` does not belong to ``Context``;
-- * ``Local_Pragmas`` has a ``No_Analysis`` key or element.
function Import_From_Project
(Context : Analysis_Context;
Project : Project_Tree'Class;
Subproject : Project_Type := No_Project) return Config_Pragmas_Mapping;
-- Load configuration pragmas files referenced in ``Project`` and its
-- sub-projects and return a mapping that describes for each analysis unit
-- owned by ``Project`` which configuration pragmas files applies to it.
--
-- If ``Subproject`` is not ``No_Project``, restrict the exploration of
-- local configuration pragmas files to that project (global ones are still
-- found in the root project).
procedure Import_From_Project
(Context : Analysis_Context;
Project : Project_Tree'Class;
Subproject : Project_Type := No_Project);
-- Shortcut for ``Import_From_Project/Set_Mapping`` calls
--------------------
-- GPR2 based API --
--------------------
-- .. ATTENTION:: This is an experimental feature, so even if it is exposed
-- to allow experiments, it is totally unsupported and the API is very
-- likely to change in the future.
function Import_From_Project
(Context : Analysis_Context;
Tree : GPR2.Project.Tree.Object;
View : GPR2.Project.View.Object := GPR2.Project.View.Undefined)
return Config_Pragmas_Mapping;
-- Load configuration pragmas files referenced in ``Tree`` and its
-- sub-projects and return a mapping that describes for each analysis unit
-- owned by ``Tree`` which configuration pragmas files applies to it.
--
-- If ``View`` is not ``Undefined``, restrict the exploration of local
-- configuration pragmas files to that project (global ones are still found
-- in the root project).
procedure Import_From_Project
(Context : Analysis_Context;
Tree : GPR2.Project.Tree.Object;
View : GPR2.Project.View.Object := GPR2.Project.View.Undefined);
-- Shortcut for ``Import_From_Project/Set_Mapping`` calls
-------------------
-- Debug helpers --
-------------------
procedure Dump (Mapping : Config_Pragmas_Mapping);
-- Dump the content of ``Mapping`` on the standard output
end Libadalang.Config_Pragmas;