package Perl::LanguageServer::Methods ;
use Moose::Role ;
use JSON ;
use Data::Dump qw{pp} ;
no warnings 'uninitialized' ;
# ---------------------------------------------------------------------------
sub _rpcreq_initialize
{
my ($self, $workspace, $req) = @_ ;
#print STDERR "Call initialize\n" ;
$self -> logger ("initialize ", $Perl::LanguageServer::jsonpretty -> encode ($req -> params), "\n")
if ($Perl::LanguageServer::debug1) ;
$Perl::LanguageServer::workspace = Perl::LanguageServer::Workspace -> new ({ config => $req -> params }) ;
my $caps =
{
# Defines how text documents are synced. Is either a detailed structure defining each notification or
# for backwards compatibility the TextDocumentSyncKind number. If omitted it defaults to `TextDocumentSyncKind.None`.
textDocumentSync => 1, # full
# The server provides hover support.
#hoverProvider?: boolean;
# The server provides completion support.
#completionProvider?: CompletionOptions;
# The server provides signature help support.
#signatureHelpProvider?: SignatureHelpOptions;
signatureHelpProvider =>
{
triggerCharacters => ['('],
},
# The server provides goto definition support.
#definitionProvider?: boolean;
definitionProvider => JSON::true,
# The server provides Goto Type Definition support.
# Since 3.6.0
#typeDefinitionProvider?: boolean | (TextDocumentRegistrationOptions & StaticRegistrationOptions);
# The server provides Goto Implementation support.
# Since 3.6.0
#implementationProvider?: boolean | (TextDocumentRegistrationOptions & StaticRegistrationOptions);
# The server provides find references support.
referencesProvider => JSON::true,
# The server provides document highlight support.
#documentHighlightProvider?: boolean;
# The server provides document symbol support.
#documentSymbolProvider?: boolean;
documentSymbolProvider => JSON::true,
# The server provides workspace symbol support.
workspaceSymbolProvider => JSON::true,
# The server provides code actions.
#codeActionProvider?: boolean;
# The server provides code lens.
#codeLensProvider?: CodeLensOptions;
# The server provides document formatting.
#documentFormattingProvider?: boolean;
#documentFormattingProvider => JSON::true,
# The server provides document range formatting.
#documentRangeFormattingProvider?: boolean;
documentRangeFormattingProvider => JSON::true,
# The server provides document formatting on typing.
#documentOnTypeFormattingProvider?: DocumentOnTypeFormattingOptions;
# The server provides rename support.
#renameProvider?: boolean;
# The server provides document link support.
#documentLinkProvider?: DocumentLinkOptions;
# The server provides color provider support.
# Since 3.6.0
#colorProvider?: boolean | ColorProviderOptions | (ColorProviderOptions & TextDocumentRegistrationOptions & StaticRegistrationOptions);
# The server provides execute command support.
#executeCommandProvider?: ExecuteCommandOptions;
# The server provides selection range support.
# @since 3.15.0
# selectionRangeProvider?: boolean | SelectionRangeOptions | SelectionRangeRegistrationOptions;
#selectionRangeProvider => JSON::true,
# Workspace specific server capabilities
workspace => {
# The server supports workspace folder.
# Since 3.6.0
workspaceFolders => {
# The server has support for workspace folders
supported => JSON::true,
# * Whether the server wants to receive workspace folder
# * change notifications.
# *
# * If a strings is provided the string is treated as a ID
# * under which the notification is registered on the client
# * side. The ID can be used to unregister for these events
# * using the `client/unregisterCapability` request.
# */
changeNotifications => JSON::true,
}
}
# Experimental server capabilities.
#experimental?: any;
} ;
return { capabilities => $caps } ;
}
# ---------------------------------------------------------------------------
sub _rpcnot_initialized
{
my ($self, $workspace, $req) = @_ ;
return if (!$Perl::LanguageServer::client_version) ;
if ($Perl::LanguageServer::client_version ne $Perl::LanguageServer::VERSION)
{
my $msg = "Version of IDE/Editor plugin is $Perl::LanguageServer::client_version\nVersion of Perl::LanguageServer is $Perl::LanguageServer::VERSION\nPlease make sure you run matching versions of the plugin and the Perl::LanguageServer module\nUse 'cpan Perl::LanguageServer' to install the newest version of the Perl::LanguageServer module\n" ;
$self -> logger ("\n$msg\n") ;
}
return ;
}
# ---------------------------------------------------------------------------
sub _rpcnot_cancelRequest
{
my ($self, $workspace, $req) = @_ ;
my $cancel_id = $req -> params -> {id} ;
return if (!$cancel_id) ;
return if (!exists $Perl::LanguageServer::running_req{$cancel_id}) ;
$Perl::LanguageServer::running_req{$cancel_id} -> cancel_req ;
return ;
}
# ---------------------------------------------------------------------------
sub _rpcreq_shutdown
{
my ($self, $workspace, $req) = @_ ;
return if (!$workspace) ;
$workspace -> shutdown ;
}
# ---------------------------------------------------------------------------
sub _rpcnot_exit
{
my ($self, $workspace, $req) = @_ ;
print STDERR "Exit\n" ;
exit (1) if (!$workspace) ;
exit (1) if (!$workspace -> is_shutdown) ;
exit (0) ;
return ;
}
# ---------------------------------------------------------------------------
1 ;