1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120 | ------------------------------------------------------------------------------
-- Language Server Protocol --
-- --
-- Copyright (C) 2021, 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.Strings.UTF_Encoding;
with LSP.Messages.Client_Requests;
with VSS.Strings.Conversions;
package body LSP.Ada_Handlers.Other_File_Commands is
------------
-- Create --
------------
overriding function Create
(JS : not null access LSP.JSON_Streams.JSON_Stream'Class) return Command
is
begin
return V : Command do
pragma Assert (JS.R.Is_Start_Object);
JS.R.Read_Next;
while not JS.R.Is_End_Object loop
pragma Assert (JS.R.Is_Key_Name);
declare
Key : constant Ada.Strings.UTF_Encoding.UTF_8_String :=
VSS.Strings.Conversions.To_UTF_8_String (JS.R.Key_Name);
begin
JS.R.Read_Next;
if Key = "uri" then
LSP.Types.Read_LSP_URI (JS, V.URI);
else
JS.Skip_Value;
end if;
end;
end loop;
JS.R.Read_Next;
end return;
end Create;
-------------
-- Execute --
-------------
overriding procedure Execute
(Self : Command;
Handler : not null access LSP.Server_Notification_Receivers
.Server_Notification_Receiver'
Class;
Client : not null access LSP.Client_Message_Receivers
.Client_Message_Receiver'
Class;
Error : in out LSP.Errors.Optional_ResponseError)
is
Message_Handler : LSP.Ada_Handlers.Message_Handler renames
LSP.Ada_Handlers.Message_Handler (Handler.all);
File : constant GNATCOLL.VFS.Virtual_File :=
Message_Handler.To_File (Self.URI);
Other_File : constant GNATCOLL.VFS.Virtual_File :=
Message_Handler.Project_Tree.Other_File (File);
URI : constant LSP.Messages.DocumentUri :=
Message_Handler.From_File (Other_File);
Message : constant LSP.Messages.Client_Requests.ShowDocument_Request :=
(params =>
(uri => URI,
takeFocus => LSP.Types.True,
others => <>),
others => <>);
begin
Client.On_ShowDocument_Request (Message);
end Execute;
----------------
-- Initialize --
----------------
procedure Initialize
(Self : in out Command'Class; URI : LSP.Messages.DocumentUri)
is
begin
Self.URI := URI;
end Initialize;
-------------------
-- Write_Command --
-------------------
procedure Write_Command
(S : access Ada.Streams.Root_Stream_Type'Class; V : Command)
is
JS : LSP.JSON_Streams.JSON_Stream'Class renames
LSP.JSON_Streams.JSON_Stream'Class (S.all);
begin
JS.Start_Object;
JS.Key ("uri");
LSP.Types.Write_LSP_URI (S, V.URI);
JS.End_Object;
end Write_Command;
end LSP.Ada_Handlers.Other_File_Commands;
|