------------------------------------------------------------------------------ -- Language Server Protocol -- -- -- -- Copyright (C) 2020-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. -- ------------------------------------------------------------------------------ -- -- This package provides a base class to implement custom commands. -- The concrete LSP server provides the set of commands by inheriting from -- this base class. Read_XXX procedures declared in LSP.Messages construct -- corresponding object using generic dispatching constructor on the server -- side. On the client side any command is an opaque object and will always be -- represented as a JSON object. with Ada.Tags; with VSS.String_Vectors; with LSP.Errors; with LSP.JSON_Streams; limited with LSP.Client_Message_Receivers; limited with LSP.Server_Notification_Receivers; with GNATCOLL.Refcount; package LSP.Commands is type Command is abstract tagged null record; type Command_Access is access all Command'Class with Storage_Size => 0; function Create (Stream : not null access LSP.JSON_Streams.JSON_Stream'Class) return Command is abstract; 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 abstract; -- Execute given command and return Error is something went wrong. -- Use Client object to send requests and notifications to the client. -- Commands are executed on the server side only. -- The Handler is the access to the message handler executing the command. procedure Register (Value : Ada.Tags.Tag); -- Register a new command type. The type should be in Command'Class function All_Commands return VSS.String_Vectors.Virtual_String_Vector; -- Return all registered command names. package Command_Shared_Pointers is new GNATCOLL.Refcount.Shared_Pointers (Command'Class); type Command_Pointer is new Command_Shared_Pointers.Ref with null record; -- Smart pointer to Command'Class for garbage collection. end LSP.Commands;