fix(gen_lsp.lua): no notifications in lsp.Methods #24530

Problem:
- Notifications are missing from `lsp.Methods`.
- Need a way to represent `$/` prefixed methods.

Solution:
- Generate notifications.
- Use "dollar_" prefix for `$/` methods.
This commit is contained in:
Raphael 2023-08-03 17:52:21 +08:00 committed by GitHub
parent 4a06de40e7
commit 214b125132
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 90 additions and 4 deletions

View File

@ -954,22 +954,46 @@ protocol.Methods = {
--- parameter is of type {@link DocumentLink} the response --- parameter is of type {@link DocumentLink} the response
--- is of type {@link DocumentLink} or a Thenable that resolves to such. --- is of type {@link DocumentLink} or a Thenable that resolves to such.
documentLink_resolve = 'documentLink/resolve', documentLink_resolve = 'documentLink/resolve',
dollar_cancelRequest = '$/cancelRequest',
dollar_logTrace = '$/logTrace',
dollar_progress = '$/progress',
dollar_setTrace = '$/setTrace',
--- The exit event is sent from the client to the server to
--- ask the server to exit its process.
exit = 'exit',
--- The initialize request is sent from the client to the server. --- The initialize request is sent from the client to the server.
--- It is sent once as the request after starting up the server. --- It is sent once as the request after starting up the server.
--- The requests parameter is of type {@link InitializeParams} --- The requests parameter is of type {@link InitializeParams}
--- the response if of type {@link InitializeResult} of a Thenable that --- the response if of type {@link InitializeResult} of a Thenable that
--- resolves to such. --- resolves to such.
initialize = 'initialize', initialize = 'initialize',
--- The initialized notification is sent from the client to the
--- server after the client is fully initialized and the server
--- is allowed to send requests from the server to the client.
initialized = 'initialized',
--- A request to resolve additional properties for an inlay hint. --- A request to resolve additional properties for an inlay hint.
--- The request's parameter is of type {@link InlayHint}, the response is --- The request's parameter is of type {@link InlayHint}, the response is
--- of type {@link InlayHint} or a Thenable that resolves to such. --- of type {@link InlayHint} or a Thenable that resolves to such.
--- @since 3.17.0 --- @since 3.17.0
inlayHint_resolve = 'inlayHint/resolve', inlayHint_resolve = 'inlayHint/resolve',
notebookDocument_didChange = 'notebookDocument/didChange',
--- A notification sent when a notebook closes.
--- @since 3.17.0
notebookDocument_didClose = 'notebookDocument/didClose',
--- A notification sent when a notebook opens.
--- @since 3.17.0
notebookDocument_didOpen = 'notebookDocument/didOpen',
--- A notification sent when a notebook document is saved.
--- @since 3.17.0
notebookDocument_didSave = 'notebookDocument/didSave',
--- A shutdown request is sent from the client to the server. --- A shutdown request is sent from the client to the server.
--- It is sent once when the client decides to shutdown the --- It is sent once when the client decides to shutdown the
--- server. The only notification that is sent after a shutdown request --- server. The only notification that is sent after a shutdown request
--- is the exit event. --- is the exit event.
shutdown = 'shutdown', shutdown = 'shutdown',
--- The telemetry event notification is sent from the server to the client to ask
--- the client to log telemetry data.
telemetry_event = 'telemetry/event',
--- A request to provide commands for the given text document and range. --- A request to provide commands for the given text document and range.
textDocument_codeAction = 'textDocument/codeAction', textDocument_codeAction = 'textDocument/codeAction',
--- A request to provide code lens for the given text document. --- A request to provide code lens for the given text document.
@ -1003,6 +1027,29 @@ protocol.Methods = {
--- The document diagnostic request definition. --- The document diagnostic request definition.
--- @since 3.17.0 --- @since 3.17.0
textDocument_diagnostic = 'textDocument/diagnostic', textDocument_diagnostic = 'textDocument/diagnostic',
--- The document change notification is sent from the client to the server to signal
--- changes to a text document.
textDocument_didChange = 'textDocument/didChange',
--- The document close notification is sent from the client to the server when
--- the document got closed in the client. The document's truth now exists where
--- the document's uri points to (e.g. if the document's uri is a file uri the
--- truth now exists on disk). As with the open notification the close notification
--- is about managing the document's content. Receiving a close notification
--- doesn't mean that the document was open in an editor before. A close
--- notification requires a previous open notification to be sent.
textDocument_didClose = 'textDocument/didClose',
--- The document open notification is sent from the client to the server to signal
--- newly opened text documents. The document's truth is now managed by the client
--- and the server must not try to read the document's truth using the document's
--- uri. Open in this sense means it is managed by the client. It doesn't necessarily
--- mean that its content is presented in an editor. An open notification must not
--- be sent more than once without a corresponding close notification send before.
--- This means open and close notification must be balanced and the max open count
--- is one.
textDocument_didOpen = 'textDocument/didOpen',
--- The document save notification is sent from the client to the server when
--- the document got saved in the client.
textDocument_didSave = 'textDocument/didSave',
--- A request to list all color symbols found in a given text document. The request's --- A request to list all color symbols found in a given text document. The request's
--- parameter is of type {@link DocumentColorParams} the --- parameter is of type {@link DocumentColorParams} the
--- response is of type {@link ColorInformation ColorInformation[]} or a Thenable --- response is of type {@link ColorInformation ColorInformation[]} or a Thenable
@ -1025,7 +1072,7 @@ protocol.Methods = {
--- response is of type {@link FoldingRangeList} or a Thenable --- response is of type {@link FoldingRangeList} or a Thenable
--- that resolves to such. --- that resolves to such.
textDocument_foldingRange = 'textDocument/foldingRange', textDocument_foldingRange = 'textDocument/foldingRange',
--- A request to format a whole document. --- A request to to format a whole document.
textDocument_formatting = 'textDocument/formatting', textDocument_formatting = 'textDocument/formatting',
--- Request to request hover information at a given text document position. The request's --- Request to request hover information at a given text document position. The request's
--- parameter is of type {@link TextDocumentPosition} the response is of --- parameter is of type {@link TextDocumentPosition} the response is of
@ -1071,6 +1118,9 @@ protocol.Methods = {
--- Can be used as an input to a subtypes or supertypes type hierarchy. --- Can be used as an input to a subtypes or supertypes type hierarchy.
--- @since 3.17.0 --- @since 3.17.0
textDocument_prepareTypeHierarchy = 'textDocument/prepareTypeHierarchy', textDocument_prepareTypeHierarchy = 'textDocument/prepareTypeHierarchy',
--- Diagnostics notification are sent from the server to the client to signal
--- results of validation runs.
textDocument_publishDiagnostics = 'textDocument/publishDiagnostics',
--- A request to format a range in a document. --- A request to format a range in a document.
textDocument_rangeFormatting = 'textDocument/rangeFormatting', textDocument_rangeFormatting = 'textDocument/rangeFormatting',
--- A request to format ranges in a document. --- A request to format ranges in a document.
@ -1101,6 +1151,9 @@ protocol.Methods = {
--- (#TextDocumentPositionParams) the response is of type {@link Definition} or a --- (#TextDocumentPositionParams) the response is of type {@link Definition} or a
--- Thenable that resolves to such. --- Thenable that resolves to such.
textDocument_typeDefinition = 'textDocument/typeDefinition', textDocument_typeDefinition = 'textDocument/typeDefinition',
--- A document will save notification is sent from the client to the server before
--- the document is actually saved.
textDocument_willSave = 'textDocument/willSave',
--- A document will save request is sent from the client to the server before --- A document will save request is sent from the client to the server before
--- the document is actually saved. The request can return an array of TextEdits --- the document is actually saved. The request can return an array of TextEdits
--- which will be applied to the text document before it is saved. Please note that --- which will be applied to the text document before it is saved. Please note that
@ -1114,15 +1167,24 @@ protocol.Methods = {
--- A request to resolve the supertypes for a given `TypeHierarchyItem`. --- A request to resolve the supertypes for a given `TypeHierarchyItem`.
--- @since 3.17.0 --- @since 3.17.0
typeHierarchy_supertypes = 'typeHierarchy/supertypes', typeHierarchy_supertypes = 'typeHierarchy/supertypes',
--- The log message notification is sent from the server to the client to ask
--- the client to log a particular message.
window_logMessage = 'window/logMessage',
--- A request to show a document. This request might open an --- A request to show a document. This request might open an
--- external program depending on the value of the URI to open. --- external program depending on the value of the URI to open.
--- For example a request to open `https://code.visualstudio.com/` --- For example a request to open `https://code.visualstudio.com/`
--- will very likely open the URI in a WEB browser. --- will very likely open the URI in a WEB browser.
--- @since 3.16.0 --- @since 3.16.0
window_showDocument = 'window/showDocument', window_showDocument = 'window/showDocument',
--- The show message notification is sent from a server to a client to ask
--- the client to display a particular message in the user interface.
window_showMessage = 'window/showMessage',
--- The show message request is sent from the server to the client to show a message --- The show message request is sent from the server to the client to show a message
--- and a set of options actions to the user. --- and a set of options actions to the user.
window_showMessageRequest = 'window/showMessageRequest', window_showMessageRequest = 'window/showMessageRequest',
--- The `window/workDoneProgress/cancel` notification is sent from the client to the server to cancel a progress
--- initiated on the server side.
window_workDoneProgress_cancel = 'window/workDoneProgress/cancel',
--- The `window/workDoneProgress/create` request is sent from the server to the client to initiate progress --- The `window/workDoneProgress/create` request is sent from the server to the client to initiate progress
--- reporting from the server. --- reporting from the server.
window_workDoneProgress_create = 'window/workDoneProgress/create', window_workDoneProgress_create = 'window/workDoneProgress/create',
@ -1148,6 +1210,28 @@ protocol.Methods = {
--- The diagnostic refresh request definition. --- The diagnostic refresh request definition.
--- @since 3.17.0 --- @since 3.17.0
workspace_diagnostic_refresh = 'workspace/diagnostic/refresh', workspace_diagnostic_refresh = 'workspace/diagnostic/refresh',
--- The configuration change notification is sent from the client to the server
--- when the client's configuration has changed. The notification contains
--- the changed configuration as defined by the language client.
workspace_didChangeConfiguration = 'workspace/didChangeConfiguration',
--- The watched files notification is sent from the client to the server when
--- the client detects changes to file watched by the language client.
workspace_didChangeWatchedFiles = 'workspace/didChangeWatchedFiles',
--- The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server when the workspace
--- folder configuration changes.
workspace_didChangeWorkspaceFolders = 'workspace/didChangeWorkspaceFolders',
--- The did create files notification is sent from the client to the server when
--- files were created from within the client.
--- @since 3.16.0
workspace_didCreateFiles = 'workspace/didCreateFiles',
--- The will delete files request is sent from the client to the server before files are actually
--- deleted as long as the deletion is triggered from within the client.
--- @since 3.16.0
workspace_didDeleteFiles = 'workspace/didDeleteFiles',
--- The did rename files notification is sent from the client to the server when
--- files were renamed from within the client.
--- @since 3.16.0
workspace_didRenameFiles = 'workspace/didRenameFiles',
--- A request send from the client to the server to execute a command. The request might return --- A request send from the client to the server to execute a command. The request might return
--- a workspace edit which the client will apply to the workspace. --- a workspace edit which the client will apply to the workspace.
workspace_executeCommand = 'workspace/executeCommand', workspace_executeCommand = 'workspace/executeCommand',

View File

@ -35,7 +35,8 @@ end
-- Gets the Lua symbol for a given fully-qualified LSP method name. -- Gets the Lua symbol for a given fully-qualified LSP method name.
local function name(s) local function name(s)
return s:gsub('/', '_', 3) -- "$/" prefix is special: https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#dollarRequests
return s:gsub('^%$', 'dollar'):gsub('/', '_')
end end
local function gen_methods(protocol) local function gen_methods(protocol)
@ -48,10 +49,11 @@ local function gen_methods(protocol)
} }
local indent = (' '):rep(2) local indent = (' '):rep(2)
table.sort(protocol.requests, function(a, b) local all = vim.list_extend(protocol.requests, protocol.notifications)
table.sort(all, function(a, b)
return name(a.method) < name(b.method) return name(a.method) < name(b.method)
end) end)
for _, item in ipairs(protocol.requests) do for _, item in ipairs(all) do
if item.method then if item.method then
if item.documentation then if item.documentation then
local document = vim.split(item.documentation, '\n?\n', { trimempty = true }) local document = vim.split(item.documentation, '\n?\n', { trimempty = true })