Skip to content

Commit ebec118

Browse files
committed
Extract and store location of the entity.
1 parent e37b569 commit ebec118

File tree

2 files changed

+78
-25
lines changed

2 files changed

+78
-25
lines changed

source/frontend/gnatdoc-entities.ads

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
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- --
@@ -24,6 +24,12 @@ with GNATdoc.Comments;
2424

2525
package GNATdoc.Entities is
2626

27+
type Entity_Location is record
28+
File : VSS.Strings.Virtual_String;
29+
Line : VSS.Strings.Line_Count := 0;
30+
Column : VSS.Strings.Character_Count := 0;
31+
end record;
32+
2733
type Entity_Information;
2834

2935
type Entity_Information_Access is access all Entity_Information;
@@ -43,6 +49,7 @@ package GNATdoc.Entities is
4349
VSS.Strings."=");
4450

4551
type Entity_Information is record
52+
Location : Entity_Location;
4653
Name : VSS.Strings.Virtual_String;
4754
Qualified_Name : VSS.Strings.Virtual_String;
4855
Signature : VSS.Strings.Virtual_String;

source/frontend/gnatdoc-frontend.adb

Lines changed: 70 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
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- --
@@ -17,6 +17,7 @@
1717

1818
with Ada.Text_IO;
1919

20+
with Langkit_Support.Slocs;
2021
with Libadalang.Common;
2122

2223
with 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

Comments
 (0)