diff --git a/CHANGELOG.md b/CHANGELOG.md index 97803ae..c87fbc2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [1.6.0](https://github.com/nvim-java/nvim-java-core/compare/v1.5.0...v1.6.0) (2024-07-13) + + +### Features + +* add constructor requests ([0305c97](https://github.com/nvim-java/nvim-java-core/commit/0305c972167fd1bdc2ffa43bfcc2d319732b1dd0)) + ## [1.5.0](https://github.com/nvim-java/nvim-java-core/compare/v1.4.0...v1.5.0) (2024-07-10) diff --git a/lua/java-core/ls/clients/jdtls-client.lua b/lua/java-core/ls/clients/jdtls-client.lua index 1ec82bd..407addc 100644 --- a/lua/java-core/ls/clients/jdtls-client.lua +++ b/lua/java-core/ls/clients/jdtls-client.lua @@ -8,6 +8,8 @@ local await = async.wait_handle_error ---| 'java/inferSelection' ---| 'java/getRefactorEdit' ---| 'java/buildWorkspace' +---| 'java/checkConstructorsStatus' +---| 'java/generateConstructors' ---@alias jdtls.CodeActionCommand ---| 'extractVariable' @@ -22,7 +24,7 @@ local await = async.wait_handle_error ---| 'convertVariableToField' ---| 'invertVariable' ---| 'introduceParameter' ----| 'convertAnonymousClassToNestedCommand') { +---| 'convertAnonymousClassToNestedCommand' ---@class jdtls.RefactorWorkspaceEdit ---@field edit lsp.WorkspaceEdit @@ -45,7 +47,7 @@ end ---Sends a LSP request ---@param method java-core.JdtlsRequestMethod ----@param params lsp.ExecuteCommandParams +---@param params lsp.LSPAny ---@param buffer? number function JdtlsClient:request(method, params, buffer) log.debug('sending LSP request: ' .. method) @@ -88,7 +90,7 @@ function JdtlsClient:workspace_execute_command(command, params, buffer) end ---Returns more information about the object the cursor is on ----@param command java-core.JdtlsRequestMethod +---@param command jdtls.CodeActionCommand ---@param params lsp.CodeActionParams ---@param buffer? number ---@return jdtls.SelectionInfo[] @@ -99,25 +101,58 @@ function JdtlsClient:java_infer_selection(command, params, buffer) }, buffer) end +--- @class jdtls.VariableBinding +--- @field bindingKey string +--- @field name string +--- @field type string +--- @field isField boolean +--- @field isSelected? boolean + +---@class jdtls.MethodBinding +---@field bindingKey string; +---@field name string; +---@field parameters string[]; + +---@class jdtls.JavaCheckConstructorsStatusResponse +---@field constructors jdtls.MethodBinding +---@field fields jdtls.MethodBinding + +---@param params lsp.CodeActionParams +---@return jdtls.JavaCheckConstructorsStatusResponse +function JdtlsClient:java_check_constructors_status(params) + return self:request('java/checkConstructorsStatus', params) +end + +---@class jdtls.GenerateConstructorsParams +---@field context lsp.CodeActionParams +---@field constructors jdtls.MethodBinding[] +---@field fields jdtls.VariableBinding[] + +---@param params jdtls.GenerateConstructorsParams +---@return lsp.WorkspaceEdit +function JdtlsClient:java_generate_constructor(params) + return self:request('java/generateConstructors', params) +end + ---Returns refactor details ---@param command jdtls.CodeActionCommand ----@param context lsp.CodeActionParams ----@param options lsp.FormattingOptions ----@param command_arguments jdtls.SelectionInfo[]; +---@param action_params lsp.CodeActionParams +---@param formatting_options lsp.FormattingOptions +---@param selection_info jdtls.SelectionInfo[]; ---@param buffer? number ---@return jdtls.RefactorWorkspaceEdit function JdtlsClient:java_get_refactor_edit( command, - context, - options, - command_arguments, + action_params, + formatting_options, + selection_info, buffer ) local params = { command = command, - context = context, - options = options, - commandArguments = command_arguments, + context = action_params, + options = formatting_options, + commandArguments = selection_info, } return self:request('java/getRefactorEdit', params, buffer) diff --git a/lua/java-core/ls/servers/jdtls/init.lua b/lua/java-core/ls/servers/jdtls/init.lua index b0f66d4..c864e9c 100644 --- a/lua/java-core/ls/servers/jdtls/init.lua +++ b/lua/java-core/ls/servers/jdtls/init.lua @@ -18,7 +18,7 @@ local M = {} ---Returns a configuration for jdtls that you can pass into the setup of nvim-lspconfig ---@param opts JavaCoreGetConfigOptions ----@return LspSetupConfig # jdtls setup configuration +---@return vim.lsp.ClientConfig function M.get_config(opts) log.debug('generating jdtls config') @@ -80,6 +80,7 @@ function M.get_config(opts) end end + ---@diagnostic disable-next-line: assign-type-mismatch base_config.root_dir = M.get_root_finder(opts.root_markers) base_config.init_options.bundles = plugin_paths base_config.init_options.workspace = utils.get_workspace_path() @@ -92,7 +93,7 @@ end ---Returns a function that finds the java project root ---@private ---@param root_markers string[] list of files to find the root dir of a project ----@return fun(file_name: string): string | nil +---@return fun(file_name: string): string function M.get_root_finder(root_markers) return function(file_name) log.debug('finding the root_dir with root_markers ', root_markers) diff --git a/lua/java-core/types/nvim-types.lua b/lua/java-core/types/nvim-types.lua index 7db6a4a..d16632b 100644 --- a/lua/java-core/types/nvim-types.lua +++ b/lua/java-core/types/nvim-types.lua @@ -1,7 +1,6 @@ ----@class nvim.Range ----@field end nvim.CursorPoint ----@field start nvim.CursorPoint - ----@class nvim.CursorPoint ----@field line integer ----@field character integer +---@class nvim.CodeActionParamsResponse +---@field bufnr number +---@field client_id number +---@field method string +---@field params lsp.CodeActionParams +---@field version number diff --git a/lua/java-core/utils/list.lua b/lua/java-core/utils/list.lua index 529225b..bdc9807 100644 --- a/lua/java-core/utils/list.lua +++ b/lua/java-core/utils/list.lua @@ -31,13 +31,13 @@ function M:find(finder) end ---Returns a list of mapped values ----@param mapper fun(value: any): any +---@param mapper fun(value: any, index: number): any ---@return java-core.List function M:map(mapper) local mapped = M:new() - for _, v in ipairs(self) do - mapped:push(mapper(v)) + for i, v in ipairs(self) do + mapped:push(mapper(v, i)) end return mapped @@ -112,4 +112,19 @@ function M:every(validator) return true end +---Returns a filtered list +---@param filter fun(value: any, index: integer): boolean +---@return java-core.List +function M:filter(filter) + local new_list = M:new() + + self:for_each(function(value, index) + if filter(value, index) then + new_list:push(value) + end + end) + + return new_list +end + return M