-- -- Copyright (C) 2023, AdaCore -- -- SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -- with Langkit_Support.Text; with Libadalang.Helpers; -- This package contains the Refactor Auto Imports Tool utilities package LAL_Refactor.Auto_Import is use Libadalang.Helpers; subtype Analysis_Unit_Vector is Unit_Vectors.Vector; type Import_Type is record Import : Langkit_Support.Text.Unbounded_Text_Type; Qualifier : Langkit_Support.Text.Unbounded_Text_Type; end record; function "<" (Left, Right : Import_Type) return Boolean; -- Compares Left.Import with Right.Import and if equal, compares -- Left.Qualifier with Right.Qualifier. function Image (Object : Import_Type) return String; -- Returns a String with the following format: -- "Import: ${Object.Import}; Qualifier: ${Object.Qualifier}". package Import_Type_Ordered_Sets is new Ada.Containers.Ordered_Sets (Element_Type => Import_Type); subtype Import_Type_Ordered_Set is Import_Type_Ordered_Sets.Set; function Is_Auto_Import_Available (Unit : Analysis_Unit; Location : Source_Location; Units : not null access function return Analysis_Unit_Array; Name : out Libadalang.Analysis.Name; Available_Imports : out Import_Type_Ordered_Set) return Boolean; -- Checks if Location in Unit is a Name which does not resolve. If so, -- fills Available_Imports with all the suggestions that would make Name -- resolve. Suggestions that have the component Qualifier equal to an -- empty string means that the name does not need to be qualifier, only -- imported.t type Auto_Importer is new Refactoring_Tool with private; function Create_Auto_Importer (Unit : Analysis_Unit; Location : Source_Location; Import : Import_Type) return Auto_Importer; -- Auto_Importer constructor. -- Location in Unit must resolve to a Name where Import can be applied. -- Use Is_Auto_Import_Available to confirm that Unit and Location can -- safely be used on this constuctor. function Create_Auto_Importer (Name : Libadalang.Analysis.Name; Import : Import_Type) return Auto_Importer; -- Auto_Importer constructor. -- Name must be a Name where Import can be applied. -- Use the out parameter of Is_Auto_Import_Available to confirm that Name -- can safely be used on this constuctor. overriding function Refactor (Self : Auto_Importer; Analysis_Units : access function return Analysis_Unit_Array) return Refactoring_Edits; -- Adds the import and qualifies the name private type Auto_Importer is new Refactoring_Tool with record Name : Libadalang.Analysis.Name; -- Name that cannot be resolved Import : Import_Type; -- The with clause and qualifier that make Name resolvable end record; end LAL_Refactor.Auto_Import;