diff --git a/CHANGELOG.md b/CHANGELOG.md index 7beae60..abe1fde 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## [2.0.0](https://github.com/nvim-java/nvim-java/compare/v1.21.0...v2.0.0) (2024-07-25) + + +### ⚠ BREAKING CHANGES + +* move all the client commands to nvim-refactor repo ([#278](https://github.com/nvim-java/nvim-java/issues/278)) + +### Code Refactoring + +* move all the client commands to nvim-refactor repo ([#278](https://github.com/nvim-java/nvim-java/issues/278)) ([1c04d72](https://github.com/nvim-java/nvim-java/commit/1c04d72d10a4807583096848dc6ad92192a94ee1)) + ## [1.21.0](https://github.com/nvim-java/nvim-java/compare/v1.20.0...v1.21.0) (2024-07-15) diff --git a/lua/java.lua b/lua/java.lua index 30fb85d..658e033 100644 --- a/lua/java.lua +++ b/lua/java.lua @@ -1,17 +1,15 @@ -require('java.commands') - local decomple_watch = require('java.startup.decompile-watcher') local mason_dep = require('java.startup.mason-dep') local setup_wrap = require('java.startup.lspconfig-setup-wrap') local startup_check = require('java.startup.startup-check') -local test = require('java.api.test') -local dap = require('java.api.dap') -local runner = require('java.api.runner') -local profile_ui = require('java.ui.profile') -local refactor = require('java.api.refactor') -local build_api = require('java.api.build') +local command_util = require('java.utils.command') + +local test_api = require('java.api.test') +local dap_api = require('java.api.dap') +local runner_api = require('java.api.runner') local settings_api = require('java.api.settings') +local profile_ui = require('java.ui.profile') local global_config = require('java.config') @@ -36,70 +34,73 @@ function M.setup(custom_config) local is_installing = mason_dep.install(config) - if not is_installing then - setup_wrap.setup(config) - decomple_watch.setup() - dap.setup_dap_on_lsp_attach() + if is_installing then + return end + setup_wrap.setup(config) + decomple_watch.setup() + dap_api.setup_dap_on_lsp_attach() + vim.api.nvim_exec_autocmds( 'User', { pattern = 'JavaPostSetup', data = { config = config } } ) end ----------------------------------------------------------------------- --- Experimental APIs -- ----------------------------------------------------------------------- -M.build = {} -M.build.build_workspace = build_api.full_build_workspace +---@param path string[] +---@param command fun() +---@param opts vim.api.keyset.user_command +function M.register_api(path, command, opts) + local name = command_util.path_to_command_name(path) + + vim.api.nvim_create_user_command(name, command, opts or {}) + + local last_index = #path - 1 + local func_name = path[last_index] + + table.remove(path, last_index) + + local node = M + + for _, v in ipairs(path) do + if not node[v] then + node[v] = {} + end + + node = node[v] + end + + node[func_name] = command +end ---------------------------------------------------------------------- -- DAP APIs -- ---------------------------------------------------------------------- M.dap = {} -M.dap.config_dap = dap.config_dap +M.dap.config_dap = dap_api.config_dap ---------------------------------------------------------------------- -- Test APIs -- ---------------------------------------------------------------------- M.test = {} -M.test.run_current_class = test.run_current_class -M.test.debug_current_class = test.debug_current_class +M.test.run_current_class = test_api.run_current_class +M.test.debug_current_class = test_api.debug_current_class -M.test.run_current_method = test.run_current_method -M.test.debug_current_method = test.debug_current_method +M.test.run_current_method = test_api.run_current_method +M.test.debug_current_method = test_api.debug_current_method -M.test.view_last_report = test.view_last_report - ----------------------------------------------------------------------- --- Manipulate -- ----------------------------------------------------------------------- - -M.manipulate = {} --- M.manipulate.organize_imports = {} - ----------------------------------------------------------------------- --- Refactor -- ----------------------------------------------------------------------- -M.refactor = {} -M.refactor.extract_variable = refactor.extract_variable -M.refactor.extract_constant = refactor.extract_constant -M.refactor.extract_method = refactor.extract_method -M.refactor.extract_field = refactor.extract_field -M.refactor.convert_variable_to_field = refactor.convert_variable_to_field -M.refactor.extract_variable_all_occurrence = - refactor.extract_variable_all_occurrence +M.test.view_last_report = test_api.view_last_report ---------------------------------------------------------------------- -- Runner APIs -- ---------------------------------------------------------------------- M.runner = {} M.runner.built_in = {} -M.runner.built_in.run_app = runner.built_in.run_app -M.runner.built_in.toggle_logs = runner.built_in.toggle_logs -M.runner.built_in.stop_app = runner.built_in.stop_app -M.runner.built_in.switch_app = runner.built_in.switch_app +M.runner.built_in.run_app = runner_api.built_in.run_app +M.runner.built_in.toggle_logs = runner_api.built_in.toggle_logs +M.runner.built_in.stop_app = runner_api.built_in.stop_app +M.runner.built_in.switch_app = runner_api.built_in.switch_app ---------------------------------------------------------------------- -- Profile UI -- @@ -113,8 +114,4 @@ M.profile.ui = profile_ui.ui M.settings = {} M.settings.change_runtime = settings_api.change_runtime -function M.__run() - test.debug_current_method() -end - return M diff --git a/lua/java/api/build.lua b/lua/java/api/build.lua deleted file mode 100644 index a32b4c9..0000000 --- a/lua/java/api/build.lua +++ /dev/null @@ -1,52 +0,0 @@ -local runner = require('async.runner') -local get_error_handler = require('java.handlers.error') -local ui = require('java.utils.ui') -local jdtls = require('java.utils.jdtls2') - -local M = {} - ----Do a workspace build ----@param is_full_build? boolean ----@return number -function M.full_build_workspace(is_full_build) - local JdtlsClient = require('java-core.ls.clients.jdtls-client') - local jdtls = require('java.utils.jdtls2') - local buf_util = require('java.utils.buffer') - local notify = require('java-core.utils.notify') - - is_full_build = type(is_full_build) == 'boolean' and is_full_build or true - - return runner(function() - JdtlsClient(jdtls()):java_build_workspace( - is_full_build, - buf_util.get_curr_buf() - ) - - notify.info('Workspace build successful!') - end) - .catch(get_error_handler('Workspace build failed')) - .run() -end - -function M.clean_workspace() - runner(function() - local client = jdtls() - - local workpace_path = - vim.tbl_get(client, 'config', 'init_options', 'workspace') - - local prompt = string.format('Do you want to delete "%s"', workpace_path) - - local choice = ui.select(prompt, { 'Yes', 'No' }) - - if choice ~= 'Yes' then - return - end - - vim.fn.delete(workpace_path, 'rf') - end) - .catch(get_error_handler('Failed to clean up the workspace')) - .run() -end - -return M diff --git a/lua/java/api/generate.lua b/lua/java/api/generate.lua deleted file mode 100644 index 1712215..0000000 --- a/lua/java/api/generate.lua +++ /dev/null @@ -1,238 +0,0 @@ -local runner = require('async.runner') - -local M = {} - ----@param params nvim.CodeActionParamsResponse -function M.generate_constructor(params) - local instance = require('java.utils.instance_factory') - local get_error_handler = require('java.handlers.error') - local ui = require('java.utils.ui') - - return runner(function() - local jdtls = instance.jdtls_client() - local status = jdtls:java_check_constructors_status(params.params) - - if not status or not status.constructors then - return - end - - local selected_constructor = ui.select( - 'Select super class constructor(s).', - status.constructors, - function(constructor) - return string.format( - '%s %s', - constructor.name, - table.concat(constructor.parameters, ', ') - ) - end - ) - - if not selected_constructor then - return - end - - local selected_fields = ui.multi_select( - 'Select Fields:', - status.fields, - function(field) - return field.name - end - ) - - local edit = jdtls:java_generate_constructor({ - context = params.params, - constructors = { selected_constructor }, - fields = selected_fields or {}, - }) - - vim.lsp.util.apply_workspace_edit(edit, 'utf-8') - end) - .catch(get_error_handler('Generating constructor failed')) - .run() -end - ----@param params nvim.CodeActionParamsResponse -function M.generate_to_string(params) - local instance = require('java.utils.instance_factory') - local get_error_handler = require('java.handlers.error') - local ui = require('java.utils.ui') - - runner(function() - local jdtls = instance.jdtls_client() - local status = jdtls:java_check_to_string_status(params.params) - - if status.exists then - local prompt = string.format( - 'Method "toString()" already exists in the Class %s. Do you want to replace the implementation?', - status.type - ) - local choice = ui.select(prompt, { 'Replace', 'Cancel' }) - - if choice ~= 'Replace' then - return - end - end - - local fields = ui.multi_select( - 'Select the fields to include in the toString() method.', - status.fields, - function(field) - return field.name - end - ) - - if not fields then - return - end - - local edit = jdtls:java_generate_to_string({ - context = params.params, - fields = fields, - }) - - vim.lsp.util.apply_workspace_edit(edit, 'utf-8') - end) - .catch(get_error_handler('Generating to string failed')) - .run() -end - ----@param params nvim.CodeActionParamsResponse -function M.generate_hash_code_and_equals(params) - local instance = require('java.utils.instance_factory') - local get_error_handler = require('java.handlers.error') - local ui = require('java.utils.ui') - - runner(function() - local jdtls = instance.jdtls_client() - local status = jdtls:java_check_hash_code_equals_status(params.params) - - if not status or not status.fields or #status.fields < 1 then - local message = string.format( - 'The operation is not applicable to the type %s.', - status.type - ) - require('java-core.utils.notify').warn(message) - return - end - - local regenerate = false - - if status.existingMethods and #status.existingMethods > 0 then - local prompt = string.format( - 'Methods %s already exists in the Class %s. Do you want to regenerate the implementation?', - 'Regenerate', - 'Cancel' - ) - - local choice = ui.select(prompt, { 'Regenerate', 'Cancel' }) - - if choice == 'Regenerate' then - regenerate = true - end - end - - local fields = ui.multi_select( - 'Select the fields to include in the hashCode() and equals() methods.', - status.fields, - function(field) - return field.name - end - ) - - if not fields or #fields < 1 then - return - end - - local edit = jdtls:java_generate_hash_code_equals({ - context = params.params, - fields = fields, - regenerate = regenerate, - }) - - vim.lsp.util.apply_workspace_edit(edit, 'utf-8') - end) - .catch(get_error_handler('Generating hash code failed')) - .run() -end - ----@param params nvim.CodeActionParamsResponse -function M.generate_delegate_mothods_prompt(params) - local instance = require('java.utils.instance_factory') - local get_error_handler = require('java.handlers.error') - local ui = require('java.utils.ui') - local List = require('java-core.utils.list') - - runner(function() - local jdtls = instance.jdtls_client() - local status = jdtls:java_check_delegate_methods_status(params.params) - - if - not status - or not status.delegateFields - or #status.delegateFields < 1 - then - require('notify').warn( - 'All delegatable methods are already implemented.' - ) - return - end - - local selected_delegate_field = ui.select( - 'Select target to generate delegates for.', - status.delegateFields, - function(field) - return field.field.name .. ': ' .. field.field.type - end - ) - - if not selected_delegate_field then - return - end - - if #selected_delegate_field.delegateMethods < 1 then - require('notify').warn( - 'All delegatable methods are already implemented.' - ) - return - end - - local selected_delegate_methods = ui.multi_select( - 'Select methods to generate delegates for.', - selected_delegate_field.delegateMethods, - function(method) - return string.format( - '%s.%s(%s)', - selected_delegate_field.field.name, - method.name, - table.concat(method.parameters, ', ') - ) - end - ) - - if not selected_delegate_methods or #selected_delegate_methods < 1 then - return - end - - local delegate_entries = List:new(selected_delegate_methods):map( - ---@param method jdtls.MethodBinding - function(method) - return { - field = selected_delegate_field.field, - delegateMethod = method, - } - end - ) - - local edit = jdtls:java_generate_delegate_methods({ - context = params.params, - delegateEntries = delegate_entries, - }) - - vim.lsp.util.apply_workspace_edit(edit, 'utf-8') - end) - .catch(get_error_handler('Generating delegate mothods failed')) - .run() -end - -return M diff --git a/lua/java/api/refactor.lua b/lua/java/api/refactor.lua deleted file mode 100644 index 87803c8..0000000 --- a/lua/java/api/refactor.lua +++ /dev/null @@ -1,39 +0,0 @@ -local M = {} - -function M.extract_variable() - M.run_code_action('refactor.extract.variable', 'extractVariable') -end - -function M.extract_variable_all_occurrence() - M.run_code_action('refactor.extract.variable', 'extractVariableAllOccurrence') -end - -function M.extract_constant() - M.run_code_action('refactor.extract.constant') -end - -function M.extract_method() - M.run_code_action('refactor.extract.function') -end - -function M.extract_field() - M.run_code_action('refactor.extract.field') -end - ----@private ----@param action_type string ----@param filter? string -function M.run_code_action(action_type, filter) - vim.lsp.buf.code_action({ - apply = true, - context = { - diagnostics = vim.lsp.diagnostic.get_line_diagnostics(0), - only = { action_type }, - }, - filter = filter and function(refactor) - return refactor.command.arguments[1] == filter - end or nil, - }) -end - -return M diff --git a/lua/java/commands/init.lua b/lua/java/commands/init.lua deleted file mode 100644 index e6c1923..0000000 --- a/lua/java/commands/init.lua +++ /dev/null @@ -1,168 +0,0 @@ -local log = require('java.utils.log') -local notify = require('java-core.utils.notify') - -local M = {} - -local id - -id = vim.api.nvim_create_autocmd('LspAttach', { - callback = function(args) - local client = vim.lsp.get_client_by_id(args.data.client_id) - - if client and client.name == 'jdtls' then - log.debug('adding vim.lsp.commands for java') - - for key, handler in pairs(M.handlers) do - vim.lsp.commands[key] = handler - end - - vim.api.nvim_del_autocmd(id) - end - end, - - group = vim.api.nvim_create_augroup('JavaCommandReg', {}), -}) - -M.commands = { - ADD_TO_SOURCEPATH = 'java.project.addToSourcePath', - ADD_TO_SOURCEPATH_CMD = 'java.project.addToSourcePath.command', - APPLY_REFACTORING_COMMAND = 'java.action.applyRefactoringCommand', - APPLY_WORKSPACE_EDIT = 'java.apply.workspaceEdit', - BUILD_PROJECT = 'java.project.build', - CHANGE_BASE_TYPE = 'java.action.changeBaseType', - CHANGE_IMPORTED_PROJECTS = 'java.project.changeImportedProjects', - CHOOSE_IMPORTS = 'java.action.organizeImports.chooseImports', - CLEAN_SHARED_INDEXES = 'java.clean.sharedIndexes', - CLEAN_WORKSPACE = 'java.clean.workspace', - CLIPBOARD_ONPASTE = 'java.action.clipboardPasteAction', - COMPILE_WORKSPACE = 'java.workspace.compile', - CONFIGURATION_UPDATE = 'java.projectConfiguration.update', - CREATE_MODULE_INFO = 'java.project.createModuleInfo', - CREATE_MODULE_INFO_COMMAND = 'java.project.createModuleInfo.command', - EXECUTE_WORKSPACE_COMMAND = 'java.execute.workspaceCommand', - FILESEXPLORER_ONPASTE = 'java.action.filesExplorerPasteAction', - GENERATE_ACCESSORS_PROMPT = 'java.action.generateAccessorsPrompt', - GENERATE_CONSTRUCTORS_PROMPT = 'java.action.generateConstructorsPrompt', - GENERATE_DELEGATE_METHODS_PROMPT = 'java.action.generateDelegateMethodsPrompt', - GENERATE_TOSTRING_PROMPT = 'java.action.generateToStringPrompt', - GET_ALL_JAVA_PROJECTS = 'java.project.getAll', - GET_CLASSPATHS = 'java.project.getClasspaths', - GET_DECOMPILED_SOURCE = 'java.decompile', - GET_PROJECT_SETTINGS = 'java.project.getSettings', - GET_WORKSPACE_PATH = '_java.workspace.path', - GOTO_LOCATION = 'editor.action.goToLocations', - HANDLE_PASTE_EVENT = 'java.edit.handlePasteEvent', - HASHCODE_EQUALS_PROMPT = 'java.action.hashCodeEqualsPrompt', - IGNORE_INCOMPLETE_CLASSPATH = 'java.ignoreIncompleteClasspath', - IGNORE_INCOMPLETE_CLASSPATH_HELP = 'java.ignoreIncompleteClasspath.help', - IMPORT_PROJECTS = 'java.project.import', - IMPORT_PROJECTS_CMD = 'java.project.import.command', - IS_TEST_FILE = 'java.project.isTestFile', - LEARN_MORE_ABOUT_CLEAN_UPS = '_java.learnMoreAboutCleanUps', - LEARN_MORE_ABOUT_REFACTORING = '_java.learnMoreAboutRefactorings', - LIST_SOURCEPATHS = 'java.project.listSourcePaths', - LIST_SOURCEPATHS_CMD = 'java.project.listSourcePaths.command', - LOMBOK_CONFIGURE = 'java.lombokConfigure', - MANUAL_CLEANUP = 'java.action.doCleanup', - MARKDOWN_API_RENDER = 'markdown.api.render', - METADATA_FILES_GENERATION = '_java.metadataFilesGeneration', - NAVIGATE_TO_SUPER_IMPLEMENTATION_COMMAND = 'java.action.navigateToSuperImplementation', - NOT_COVERED_EXECUTION = '_java.notCoveredExecution', - NULL_ANALYSIS_SET_MODE = 'java.compile.nullAnalysis.setMode', - OPEN_BROWSER = 'vscode.open', - OPEN_CLIENT_LOG = 'java.open.clientLog', - OPEN_FILE = 'java.open.file', - OPEN_FORMATTER = 'java.open.formatter.settings', - OPEN_JSON_SETTINGS = 'workbench.action.openSettingsJson', - OPEN_LOGS = 'java.open.logs', - OPEN_OUTPUT = 'java.open.output', - OPEN_SERVER_LOG = 'java.open.serverLog', - OPEN_SERVER_STDERR_LOG = 'java.open.serverStderrLog', - OPEN_SERVER_STDOUT_LOG = 'java.open.serverStdoutLog', - OPEN_STATUS_SHORTCUT = '_java.openShortcuts', - OPEN_TYPE_HIERARCHY = 'java.navigate.openTypeHierarchy', - ORGANIZE_IMPORTS = 'java.action.organizeImports', - ORGANIZE_IMPORTS_SILENTLY = 'java.edit.organizeImports', - OVERRIDE_METHODS_PROMPT = 'java.action.overrideMethodsPrompt', - PROJECT_CONFIGURATION_STATUS = 'java.projectConfiguration.status', - REFRESH_BUNDLES = 'java.reloadBundles', - REFRESH_BUNDLES_COMMAND = '_java.reloadBundles.command', - RELOAD_WINDOW = 'workbench.action.reloadWindow', - REMOVE_FROM_SOURCEPATH = 'java.project.removeFromSourcePath', - REMOVE_FROM_SOURCEPATH_CMD = 'java.project.removeFromSourcePath.command', - RENAME_COMMAND = 'java.action.rename', - RESOLVE_PASTED_TEXT = 'java.project.resolveText', - RESOLVE_SOURCE_ATTACHMENT = 'java.project.resolveSourceAttachment', - RESOLVE_TYPE_HIERARCHY = 'java.navigate.resolveTypeHierarchy', - RESOLVE_WORKSPACE_SYMBOL = 'java.project.resolveWorkspaceSymbol', - RESTART_LANGUAGE_SERVER = 'java.server.restart', - RUNTIME_VALIDATION_OPEN = 'java.runtimeValidation.open', - SHOW_CLASS_HIERARCHY = 'java.action.showClassHierarchy', - SHOW_JAVA_IMPLEMENTATIONS = 'java.show.implementations', - SHOW_JAVA_REFERENCES = 'java.show.references', - SHOW_REFERENCES = 'editor.action.showReferences', - SHOW_SERVER_TASK_STATUS = 'java.show.server.task.status', - SHOW_SUBTYPE_HIERARCHY = 'java.action.showSubtypeHierarchy', - SHOW_SUPERTYPE_HIERARCHY = 'java.action.showSupertypeHierarchy', - SHOW_TYPE_HIERARCHY = 'java.action.showTypeHierarchy', - SMARTSEMICOLON_DETECTION = 'java.edit.smartSemicolonDetection', - SWITCH_SERVER_MODE = 'java.server.mode.switch', - TEMPLATE_VARIABLES = '_java.templateVariables', - UPDATE_SOURCE_ATTACHMENT = 'java.project.updateSourceAttachment', - UPDATE_SOURCE_ATTACHMENT_CMD = 'java.project.updateSourceAttachment.command', - UPGRADE_GRADLE_WRAPPER = 'java.project.upgradeGradle', - UPGRADE_GRADLE_WRAPPER_CMD = 'java.project.upgradeGradle.command', -} - -M.handlers = { - ---@param _ lsp.Command - ---@param params nvim.CodeActionParamsResponse - [M.commands.GENERATE_CONSTRUCTORS_PROMPT] = function(_, params) - require('java.api.generate').generate_constructor(params) - end, - - [M.commands.GENERATE_TOSTRING_PROMPT] = function(_, params) - require('java.api.generate').generate_to_string(params) - end, - - [M.commands.HASHCODE_EQUALS_PROMPT] = function(_, params) - require('java.api.generate').generate_hash_code_and_equals(params) - end, - - [M.commands.GENERATE_DELEGATE_METHODS_PROMPT] = function(_, params) - require('java.api.generate').generate_delegate_mothods_prompt(params) - end, - - ---@param is_full_build boolean - [M.commands.COMPILE_WORKSPACE] = function(is_full_build) - require('java.api.build').full_build_workspace(is_full_build) - end, - - [M.commands.CLEAN_WORKSPACE] = function() - require('java.api.build').clean_workspace() - end, -} - -local ignored_commands = { M.commands.REFRESH_BUNDLES_COMMAND } - -for _, command in pairs(M.commands) do - if - not M.handlers[command] and not vim.tbl_contains(ignored_commands, command) - then - local message = string.format( - '"%s" is not supported yet!' - .. '\nPlease request the feature using below link' - .. '\nhttps://github.com/nvim-java/nvim-java/issues/new?assignees=' - .. '&labels=enhancement&projects=&template=feature_request.yml&title=feature%%3A+', - command - ) - - M.handlers[command] = function() - notify.warn(message) - return vim.lsp.rpc_response_error( - vim.lsp.protocol.ErrorCodes.MethodNotFound, - 'Not implemented yes' - ) - end - end -end diff --git a/lua/java/config.lua b/lua/java/config.lua index 8844429..5cd2d29 100644 --- a/lua/java/config.lua +++ b/lua/java/config.lua @@ -67,7 +67,7 @@ local config = { -- mason.nvim plugin. -- IF it's not registered correctly, an error will be thrown and nvim-java -- will stop setup - invalid_mason_registry = true, + invalid_mason_registry = false, }, } diff --git a/lua/java/utils/command.lua b/lua/java/utils/command.lua new file mode 100644 index 0000000..4170b33 --- /dev/null +++ b/lua/java/utils/command.lua @@ -0,0 +1,25 @@ +local M = {} + +---Converts a path array to command name +---@param path string[] +---@return string +function M.path_to_command_name(path) + local name = 'Java' + + for _, word in ipairs(path) do + local sub_words = vim.split(word, '_') + local changed_word = '' + + for _, sub_word in ipairs(sub_words) do + local first_char = sub_word:sub(1, 1):upper() + local rest = sub_word:sub(2) + changed_word = changed_word .. first_char .. rest + end + + name = name .. changed_word + end + + return name +end + +return M diff --git a/lua/java/utils/instance_factory.lua b/lua/java/utils/instance_factory.lua index 5bbfb75..56787be 100644 --- a/lua/java/utils/instance_factory.lua +++ b/lua/java/utils/instance_factory.lua @@ -2,7 +2,6 @@ local class = require('java-core.utils.class') local M = class() ----@private ---@return vim.lsp.Client local function get_client() local clients = vim.lsp.get_clients({ name = 'jdtls' }) diff --git a/plugin/java.lua b/plugin/java.lua index 1357c32..a2d4a83 100644 --- a/plugin/java.lua +++ b/plugin/java.lua @@ -7,8 +7,6 @@ end local cmd_map = { JavaSettingsChangeRuntime = { java.settings.change_runtime }, - JavaBuildWorkspace = { java.build.build_workspace }, - JavaDapConfig = { java.dap.config_dap }, JavaTestRunCurrentClass = { java.test.run_current_class }, @@ -25,31 +23,6 @@ local cmd_map = { JavaRunnerSwitchLogs = { java.runner.built_in.switch_app }, JavaProfile = { java.profile.ui }, - - JavaRefactorExtractVariable = { - java.refactor.extract_variable, - { range = 2 }, - }, - - JavaRefactorExtractMethod = { - java.refactor.extract_method, - { range = 2 }, - }, - - JavaRefactorExtractConstant = { - java.refactor.extract_constant, - { range = 2 }, - }, - - JavaRefactorExtractVariableAllOccurrence = { - java.refactor.extract_variable_all_occurrence, - { range = 2 }, - }, - - JavaRefactorExtractField = { - java.refactor.extract_field, - { range = 2 }, - }, } for cmd, details in pairs(cmd_map) do