------------------------------------------------------------------------------
-- Language Server Protocol --
-- --
-- Copyright (C) 2022, AdaCore --
-- --
-- This is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
-- ware Foundation; either version 3, or (at your option) any later ver- --
-- sion. This software is distributed in the hope that it will be useful, --
-- but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- --
-- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
-- License for more details. You should have received a copy of the GNU --
-- General Public License distributed with this software; see file --
-- COPYING3. If not, go to http://www.gnu.org/licenses for a complete copy --
-- of the license. --
------------------------------------------------------------------------------
with Ada.Containers.Indefinite_Hashed_Maps;
with Ada.Containers.Indefinite_Doubly_Linked_Lists;
with Laltools.Common;
with Libadalang.Analysis; use Libadalang.Analysis;
with VSS.Strings; use VSS.Strings;
package LSP.Ada_Completions.Generic_Assoc_Utils is
function Hash
(Node : Libadalang.Analysis.Ada_Node'Class)
return Ada.Containers.Hash_Type is
(Libadalang.Analysis.Hash (Node.As_Ada_Node));
type Assoc_Type is record
Node : Libadalang.Analysis.Ada_Node;
Is_Value : Boolean := False;
-- True if Node.Text represents a value and not a type
end record;
package Param_To_Type_Maps is new Ada.Containers.Indefinite_Hashed_Maps
(Key_Type => Libadalang.Analysis.Ada_Node'Class,
Element_Type => Assoc_Type,
Hash => Hash,
Equivalent_Keys => Libadalang.Analysis."=",
"=" => "=");
type Assoc_Data is record
Decl : Libadalang.Analysis.Basic_Decl :=
Libadalang.Analysis.No_Basic_Decl;
-- Basic_Decl to retrieve the documentation
Title : VSS.Strings.Virtual_String;
-- Title of the CompletionItem
Prefix : VSS.Strings.Virtual_String;
-- String prepend to the snippet
Param_Types : Param_To_Type_Maps.Map;
-- Map of {Param : Type}
-- Note: the nodes type doesn't matter only Libadalang.Analysis.Text is
-- used on the nodes
Param_Vector : Laltools.Common.Node_Vectors.Vector;
-- Vector of Params, used to keep the order
end record;
package Assoc_Data_Lists is new
Ada.Containers.Indefinite_Doubly_Linked_Lists
(Element_Type => Assoc_Data,
"=" => "=");
-- List of all the possible "profile"
end LSP.Ada_Completions.Generic_Assoc_Utils;