From faa9149777c8039584e84c82f704560ea884a53a Mon Sep 17 00:00:00 2001 From: s1n7ax Date: Sun, 26 Nov 2023 21:54:47 +0530 Subject: [PATCH] refactor!: go from promises to co-routines --- lua/java.lua | 23 ++++++------ lua/java/dap/api.lua | 34 ++++++++++++------ lua/java/dap/init.lua | 38 ++++++++------------ lua/java/handlers/error.lua | 5 +-- lua/java/{ => utils}/dependencies.lua | 0 lua/java/{ => utils}/jdtls.lua | 0 lua/java/{ => utils}/lspconfig.lua | 50 ++++++++++++++------------- lua/java/{ => utils}/mason.lua | 0 8 files changed, 76 insertions(+), 74 deletions(-) rename lua/java/{ => utils}/dependencies.lua (100%) rename lua/java/{ => utils}/jdtls.lua (100%) rename lua/java/{ => utils}/lspconfig.lua (64%) rename lua/java/{ => utils}/mason.lua (100%) diff --git a/lua/java.lua b/lua/java.lua index ead8c94..cb907f1 100644 --- a/lua/java.lua +++ b/lua/java.lua @@ -1,31 +1,32 @@ -local deps = require('java.dependencies') -local java_mason = require('java.mason') -local java_dap = require('java.dap.api') -local java_lspconfig = require('java.lspconfig') +local deps = require('java.utils.dependencies') +local mason = require('java.utils.mason') +local lspconfig = require('java.utils.lspconfig') + +local dap = require('java.dap.api') local ts = require('java.treesitter') local M = {} function M.setup() deps.check() - java_mason.install_dependencies() - java_lspconfig.wrap_lspconfig_setup() - java_lspconfig.register_class_file_decomplier() - java_dap.setup_dap_on_lsp_attach() + mason.install_dependencies() + lspconfig.wrap_lspconfig_setup() + lspconfig.register_class_file_decomplier() + dap.setup_dap_on_lsp_attach() end ---------------------------------------------------------------------- -- DAP APIs -- ---------------------------------------------------------------------- M.dap = {} -M.dap.config_dap = java_dap.config_dap +M.dap.config_dap = dap.config_dap ---------------------------------------------------------------------- -- Test APIs -- ---------------------------------------------------------------------- M.test = {} -M.test.run_current_test_class = java_dap.run_current_test_class -M.test.debug_current_test_class = java_dap.debug_current_test_class +M.test.run_current_test_class = dap.run_current_test_class +M.test.debug_current_test_class = dap.debug_current_test_class ---------------------------------------------------------------------- -- Manipulate -- diff --git a/lua/java/dap/api.lua b/lua/java/dap/api.lua index 1beacb6..eb2cae7 100644 --- a/lua/java/dap/api.lua +++ b/lua/java/dap/api.lua @@ -1,9 +1,9 @@ local JavaDap = require('java.dap') local log = require('java.utils.log') -local notify = require('java-core.utils.notify') local get_error_handler = require('java.handlers.error') -local jdtls = require('java.jdtls') +local jdtls = require('java.utils.jdtls') +local async = require('java-core.utils.async').sync local M = {} @@ -19,24 +19,36 @@ function M.setup_dap_on_lsp_attach() }) end ----Runs the current test class function M.run_current_test_class() - return JavaDap:new(jdtls()):execute_current_test_class({ noDebug = true }) + log.info('run current test class') + + return async(function() + return JavaDap:new(jdtls()):execute_current_test_class({ noDebug = true }) + end) + .catch(get_error_handler('failed to run the current test class')) + .run() end function M.debug_current_test_class() - return JavaDap:new(jdtls()):execute_current_test_class({}) + log.info('debug current test class') + + return async(function() + return JavaDap:new(jdtls()):execute_current_test_class({}) + end) + .catch(get_error_handler('failed to debug the current test class')) + .run() end ----Configures the dap function M.config_dap() - return JavaDap:new(jdtls()) - :config_dap() - :catch(get_error_handler('failed to configure dap')) + log.info('configuring dap') + + return async(function() + JavaDap:new(jdtls()):config_dap() + end) + .catch(get_error_handler('dap configuration failed')) + .run() end ----@private ----@param ev any function M.on_jdtls_attach(ev) local client = vim.lsp.get_client_by_id(ev.data.client_id) diff --git a/lua/java/dap/init.lua b/lua/java/dap/init.lua index ce7c852..8d4395a 100644 --- a/lua/java/dap/init.lua +++ b/lua/java/dap/init.lua @@ -1,7 +1,6 @@ local log = require('java.utils.log') -local get_error_handler = require('java.handlers.error') +local async = require('java-core.utils.async').sync -local Promise = require('java-core.utils.promise') local JavaCoreDap = require('java-core.dap') local JavaCoreTestApi = require('java-core.api.test') @@ -34,36 +33,27 @@ end ---Run the current test class ---@param config JavaCoreDapLauncherConfigOverridable function M:execute_current_test_class(config) - log.info('running the current class') + log.debug('running the current class') local buffer = vim.api.nvim_get_current_buf() - return self.test_api - :run_class_by_buffer(buffer, config) - :catch(get_error_handler('failed to run current test class')) + return self.test_api:run_class_by_buffer(buffer, config) end function M:config_dap() - return Promise.resolve() - :thenCall(function() - log.debug('set dap adapter callback function') + log.debug('set dap adapter callback function') - -- setting java adapter - require('dap').adapters.java = function(callback) - self.dap - :get_dap_adapter() - :thenCall(callback) - :catch(get_error_handler('failed to set DAP adapter')) - end + require('dap').adapters.java = function(callback) + async(function() + local adapter = self.dap:get_dap_adapter() + callback(adapter --[[@as Adapter]]) + end).run() + end - -- setting java config - return self.dap:get_dap_config() - end) - :thenCall(function(dap_config) - log.debug('set dap config: ', dap_config) - require('dap').configurations.java = dap_config - end) - :catch(get_error_handler('failed to set DAP configuration')) + local dap_config = self.dap:get_dap_config() + + log.debug('set dap config: ', dap_config) + require('dap').configurations.java = dap_config end return M diff --git a/lua/java/handlers/error.lua b/lua/java/handlers/error.lua index 870b5c4..45aa6de 100644 --- a/lua/java/handlers/error.lua +++ b/lua/java/handlers/error.lua @@ -12,11 +12,8 @@ end ---Returns a error handler ---@param msg string messages to show in the error ----@param ...? any values for place holders in the message ---@return fun(err: any) # function that log and notify the error -local function get_error_handler(msg, ...) - msg = string.format(msg, ...) - +local function get_error_handler(msg) return function(err) local trace = debug.traceback() diff --git a/lua/java/dependencies.lua b/lua/java/utils/dependencies.lua similarity index 100% rename from lua/java/dependencies.lua rename to lua/java/utils/dependencies.lua diff --git a/lua/java/jdtls.lua b/lua/java/utils/jdtls.lua similarity index 100% rename from lua/java/jdtls.lua rename to lua/java/utils/jdtls.lua diff --git a/lua/java/lspconfig.lua b/lua/java/utils/lspconfig.lua similarity index 64% rename from lua/java/lspconfig.lua rename to lua/java/utils/lspconfig.lua index bfc2038..e7b9f45 100644 --- a/lua/java/lspconfig.lua +++ b/lua/java/utils/lspconfig.lua @@ -1,9 +1,12 @@ -local log = require('java.utils.log') local lspconfig = require('lspconfig') -local server = require('java-core.ls.servers.jdtls') -local jdtls = require('java.jdtls') + +local log = require('java.utils.log') +local jdtls = require('java.utils.jdtls') local get_error_handler = require('java.handlers.error') +local server = require('java-core.ls.servers.jdtls') +local async = require('java-core.utils.async').sync + local JavaCoreJdtlsClient = require('java-core.ls.clients.jdtls-client') local M = {} @@ -41,39 +44,38 @@ end ---@field file string name of the file ---@field id integer event id? ---@field match string matched pattern in autocmd match + function M.register_class_file_decomplier() vim.api.nvim_create_autocmd('BufReadCmd', { pattern = 'jdt://*', ---@param opts BufReadCmdCallbackArgs callback = function(opts) - ---@type boolean local done = false - local client_obj = jdtls() - local buffer = opts.buf - local function handle_file_content(text) - local lines = vim.split(text, '\n') - vim.api.nvim_buf_set_lines(buffer, 0, -1, true, lines) + async(function() + local client_obj = jdtls() + local buffer = opts.buf + + local text = JavaCoreJdtlsClient:new(client_obj) + :java_decompile(opts.file) - vim.bo[buffer].swapfile = false - vim.bo[buffer].filetype = 'java' - vim.bo[buffer].modifiable = false + local lines = vim.split(text, '\n') + vim.api.nvim_buf_set_lines(buffer, 0, -1, true, lines) - if not vim.lsp.buf_is_attached(buffer, client_obj.client.id) then - vim.lsp.buf_attach_client(buffer, client_obj.client.id) - end + vim.bo[buffer].swapfile = false + vim.bo[buffer].filetype = 'java' + vim.bo[buffer].modifiable = false - done = true - end + if not vim.lsp.buf_is_attached(buffer, client_obj.client.id) then + vim.lsp.buf_attach_client(buffer, client_obj.client.id) + end - JavaCoreJdtlsClient:new(client_obj) - :java_decompile(opts.file) - :thenCall(handle_file_content) - :catch( - get_error_handler('failed to decompile the class at %s', opts.file) - ) + done = true + end) + .catch(get_error_handler('decompilation failed for ' .. opts.file)) + .run() - vim.wait(10000, function() + vim.wait(3000, function() return done end) end, diff --git a/lua/java/mason.lua b/lua/java/utils/mason.lua similarity index 100% rename from lua/java/mason.lua rename to lua/java/utils/mason.lua