11-- ----------------------------------------------------------------------------
22-- GNAT Documentation Generation Tool --
33-- --
4- -- Copyright (C) 2022, AdaCore --
4+ -- Copyright (C) 2022-2023 , AdaCore --
55-- --
66-- This is free software; you can redistribute it and/or modify it under --
77-- terms of the GNU General Public License as published by the Free Soft- --
1717
1818with Ada.Text_IO ;
1919
20+ with Langkit_Support.Slocs ;
2021with Libadalang.Common ;
2122
2223with VSS.Strings.Conversions ;
@@ -148,9 +149,31 @@ package body GNATdoc.Frontend is
148149 -- Process children nodes, filter out important nodes, and dispatch to
149150 -- corresponding documentation extraction and entity creation subprograms.
150151
152+ function Location
153+ (Name : Defining_Name'Class) return GNATdoc.Entities.Entity_Location;
154+ -- Return location of the defining name.
155+
151156 function Signature (Name : Defining_Name'Class) return Virtual_String;
152157 -- Computes unique signature of the given entity.
153158
159+ -- ------------
160+ -- Location --
161+ -- ------------
162+
163+ function Location
164+ (Name : Defining_Name'Class) return GNATdoc.Entities.Entity_Location
165+ is
166+ Aux : constant Langkit_Support.Slocs.Source_Location_Range :=
167+ Name.Sloc_Range;
168+
169+ begin
170+ return
171+ (File =>
172+ VSS.Strings.Conversions.To_Virtual_String (Name.Unit.Get_Filename),
173+ Line => VSS.Strings.Line_Count (Aux.Start_Line),
174+ Column => VSS.Strings.Character_Count (Aux.Start_Column));
175+ end Location ;
176+
154177 -- ---------------------------
155178 -- Process_Access_Type_Def --
156179 -- ---------------------------
@@ -162,7 +185,8 @@ package body GNATdoc.Frontend is
162185 Name : constant Defining_Name := Node.F_Name;
163186 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
164187 new GNATdoc.Entities.Entity_Information'
165- (Name => To_Virtual_String (Name.Text),
188+ (Location => Location (Name),
189+ Name => To_Virtual_String (Name.Text),
166190 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
167191 Signature => Signature (Name),
168192 Documentation => Extract (Node, GNATdoc.Options.Extractor_Options),
@@ -183,7 +207,8 @@ package body GNATdoc.Frontend is
183207 Name : constant Defining_Name := Node.F_Name;
184208 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
185209 new GNATdoc.Entities.Entity_Information'
186- (Name => To_Virtual_String (Name.Text),
210+ (Location => Location (Name),
211+ Name => To_Virtual_String (Name.Text),
187212 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
188213 Signature => Signature (Name),
189214 Documentation => Extract (Node, GNATdoc.Options.Extractor_Options),
@@ -205,7 +230,8 @@ package body GNATdoc.Frontend is
205230 Name : constant Defining_Name := Node.F_Subp_Spec.F_Subp_Name;
206231 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
207232 new GNATdoc.Entities.Entity_Information'
208- (Name => To_Virtual_String (Name.Text),
233+ (Location => Location (Name),
234+ Name => To_Virtual_String (Name.Text),
209235 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
210236 Signature => Signature (Name),
211237 Documentation => Extract (Node, GNATdoc.Options.Extractor_Options),
@@ -509,7 +535,8 @@ package body GNATdoc.Frontend is
509535 Name : constant Defining_Name := Node.F_Subp_Spec.F_Subp_Name;
510536 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
511537 new GNATdoc.Entities.Entity_Information'
512- (Name => To_Virtual_String (Name.Text),
538+ (Location => Location (Name),
539+ Name => To_Virtual_String (Name.Text),
513540 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
514541 Signature => Signature (Name),
515542 Documentation => Extract (Node, GNATdoc.Options.Extractor_Options),
@@ -630,7 +657,8 @@ package body GNATdoc.Frontend is
630657 Name : constant Defining_Name := Node.F_Name;
631658 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
632659 new GNATdoc.Entities.Entity_Information'
633- (Name => To_Virtual_String (Name.Text),
660+ (Location => Location (Name),
661+ Name => To_Virtual_String (Name.Text),
634662 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
635663 Signature => Signature (Name),
636664 Documentation => Extract (Node, GNATdoc.Options.Extractor_Options),
@@ -658,7 +686,8 @@ package body GNATdoc.Frontend is
658686 Name : constant Defining_Name := Node.F_Entry_Name;
659687 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
660688 new GNATdoc.Entities.Entity_Information'
661- (Name => To_Virtual_String (Name.Text),
689+ (Location => Location (Name),
690+ Name => To_Virtual_String (Name.Text),
662691 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
663692 Signature => Signature (Name),
664693 Documentation => Extract (Node, GNATdoc.Options.Extractor_Options),
@@ -679,7 +708,8 @@ package body GNATdoc.Frontend is
679708 Name : constant Defining_Name := Node.F_Spec.F_Entry_Name;
680709 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
681710 new GNATdoc.Entities.Entity_Information'
682- (Name => To_Virtual_String (Name.Text),
711+ (Location => Location (Name),
712+ Name => To_Virtual_String (Name.Text),
683713 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
684714 Signature => Signature (Name),
685715 Documentation => Extract (Node, GNATdoc.Options.Extractor_Options),
@@ -702,7 +732,8 @@ package body GNATdoc.Frontend is
702732 Entity : constant not null
703733 GNATdoc.Entities.Entity_Information_Access :=
704734 new GNATdoc.Entities.Entity_Information'
705- (Name => To_Virtual_String (Name.Text),
735+ (Location => Location (Name),
736+ Name => To_Virtual_String (Name.Text),
706737 Qualified_Name =>
707738 To_Virtual_String (Name.P_Fully_Qualified_Name),
708739 Signature => Signature (Name),
@@ -731,7 +762,8 @@ package body GNATdoc.Frontend is
731762 else Node.As_Generic_Subp_Instantiation.F_Subp_Name);
732763 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
733764 new GNATdoc.Entities.Entity_Information'
734- (Name => To_Virtual_String (Name.Text),
765+ (Location => Location (Name),
766+ Name => To_Virtual_String (Name.Text),
735767 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
736768 Signature => Signature (Name),
737769 Documentation => Extract (Node, GNATdoc.Options.Extractor_Options),
@@ -756,7 +788,8 @@ package body GNATdoc.Frontend is
756788 Name : constant Defining_Name := Node.F_Package_Decl.F_Package_Name;
757789 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
758790 new GNATdoc.Entities.Entity_Information'
759- (Name => To_Virtual_String (Name.F_Name.Text),
791+ (Location => Location (Name),
792+ Name => To_Virtual_String (Name.F_Name.Text),
760793 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
761794 Signature => Signature (Name),
762795 Enclosing =>
@@ -793,7 +826,8 @@ package body GNATdoc.Frontend is
793826 Name : constant Defining_Name := Node.F_Name;
794827 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
795828 new GNATdoc.Entities.Entity_Information'
796- (Name => To_Virtual_String (Name.Text),
829+ (Location => Location (Name),
830+ Name => To_Virtual_String (Name.Text),
797831 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
798832 Signature => Signature (Name),
799833 Documentation => Extract (Node, GNATdoc.Options.Extractor_Options),
@@ -816,7 +850,8 @@ package body GNATdoc.Frontend is
816850 Entity : constant not null
817851 GNATdoc.Entities.Entity_Information_Access :=
818852 new GNATdoc.Entities.Entity_Information'
819- (Name => To_Virtual_String (Name.Text),
853+ (Location => Location (Name),
854+ Name => To_Virtual_String (Name.Text),
820855 Qualified_Name =>
821856 To_Virtual_String (Name.P_Fully_Qualified_Name),
822857 Signature => Signature (Name),
@@ -843,7 +878,8 @@ package body GNATdoc.Frontend is
843878 Entity : constant not null
844879 GNATdoc.Entities.Entity_Information_Access :=
845880 new GNATdoc.Entities.Entity_Information'
846- (Name => To_Virtual_String (Name.Text),
881+ (Location => Location (Name),
882+ Name => To_Virtual_String (Name.Text),
847883 Qualified_Name =>
848884 To_Virtual_String (Name.P_Fully_Qualified_Name),
849885 Signature => Signature (Name),
@@ -873,7 +909,8 @@ package body GNATdoc.Frontend is
873909 Name : constant Defining_Name := Node.F_Package_Name;
874910 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
875911 new GNATdoc.Entities.Entity_Information'
876- (Name => To_Virtual_String (Name.F_Name.Text),
912+ (Location => Location (Name),
913+ Name => To_Virtual_String (Name.F_Name.Text),
877914 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
878915 Signature => Signature (Name),
879916 Enclosing =>
@@ -912,7 +949,8 @@ package body GNATdoc.Frontend is
912949 Entity : constant not null
913950 GNATdoc.Entities.Entity_Information_Access :=
914951 new GNATdoc.Entities.Entity_Information'
915- (Name => To_Virtual_String (Name.F_Name.Text),
952+ (Location => Location (Name),
953+ Name => To_Virtual_String (Name.F_Name.Text),
916954 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
917955 Signature => Signature (Name),
918956 Enclosing =>
@@ -949,7 +987,8 @@ package body GNATdoc.Frontend is
949987 Name : constant Defining_Name := Node.F_Name;
950988 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
951989 new GNATdoc.Entities.Entity_Information'
952- (Name => To_Virtual_String (Name.Text),
990+ (Location => Location (Name),
991+ Name => To_Virtual_String (Name.Text),
953992 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
954993 Signature =>
955994 To_Virtual_String (Name.P_Unique_Identifying_Name),
@@ -975,7 +1014,8 @@ package body GNATdoc.Frontend is
9751014 Name : constant Defining_Name := Node.F_Name;
9761015 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
9771016 new GNATdoc.Entities.Entity_Information'
978- (Name => To_Virtual_String (Name.Text),
1017+ (Location => Location (Name),
1018+ Name => To_Virtual_String (Name.Text),
9791019 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
9801020 Signature => Signature (Name),
9811021 Documentation => Extract (Node, GNATdoc.Options.Extractor_Options),
@@ -1002,7 +1042,8 @@ package body GNATdoc.Frontend is
10021042 Entity : constant not null
10031043 GNATdoc.Entities.Entity_Information_Access :=
10041044 new GNATdoc.Entities.Entity_Information'
1005- (Name => To_Virtual_String (Name.F_Name.Text),
1045+ (Location => Location (Name),
1046+ Name => To_Virtual_String (Name.F_Name.Text),
10061047 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
10071048 Signature => Signature (Name),
10081049 Enclosing =>
@@ -1033,7 +1074,8 @@ package body GNATdoc.Frontend is
10331074 is
10341075 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
10351076 new GNATdoc.Entities.Entity_Information'
1036- (Name => To_Virtual_String (Name.F_Name.Text),
1077+ (Location => Location (Name),
1078+ Name => To_Virtual_String (Name.F_Name.Text),
10371079 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
10381080 Signature => Signature (Name),
10391081 Enclosing =>
@@ -1070,7 +1112,8 @@ package body GNATdoc.Frontend is
10701112 Name : constant Defining_Name := Node.F_Name;
10711113 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
10721114 new GNATdoc.Entities.Entity_Information'
1073- (Name => To_Virtual_String (Name.Text),
1115+ (Location => Location (Name),
1116+ Name => To_Virtual_String (Name.Text),
10741117 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
10751118 Signature => Signature (Name),
10761119 Documentation => Extract (Node, GNATdoc.Options.Extractor_Options),
@@ -1091,7 +1134,8 @@ package body GNATdoc.Frontend is
10911134 Name : constant Defining_Name := Node.F_Name;
10921135 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
10931136 new GNATdoc.Entities.Entity_Information'
1094- (Name => To_Virtual_String (Name.Text),
1137+ (Location => Location (Name),
1138+ Name => To_Virtual_String (Name.Text),
10951139 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
10961140 Signature => Signature (Name),
10971141 Documentation => Extract (Node, GNATdoc.Options.Extractor_Options),
@@ -1112,7 +1156,8 @@ package body GNATdoc.Frontend is
11121156 Name : constant Defining_Name := Node.F_Name;
11131157 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
11141158 new GNATdoc.Entities.Entity_Information'
1115- (Name => To_Virtual_String (Name.Text),
1159+ (Location => Location (Name),
1160+ Name => To_Virtual_String (Name.Text),
11161161 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
11171162 Signature => Signature (Name),
11181163 Documentation => Extract (Node, GNATdoc.Options.Extractor_Options),
@@ -1134,7 +1179,8 @@ package body GNATdoc.Frontend is
11341179 Name : constant Defining_Name := Decl.F_Name;
11351180 Entity : constant not null GNATdoc.Entities.Entity_Information_Access :=
11361181 new GNATdoc.Entities.Entity_Information'
1137- (Name => To_Virtual_String (Name.F_Name.Text),
1182+ (Location => Location (Name),
1183+ Name => To_Virtual_String (Name.F_Name.Text),
11381184 Qualified_Name => To_Virtual_String (Name.P_Fully_Qualified_Name),
11391185 Signature => Signature (Name),
11401186 Enclosing =>
0 commit comments