diff --git a/lua/custom/default.lua b/lua/custom/default.lua index 549d628..4ea9586 100644 --- a/lua/custom/default.lua +++ b/lua/custom/default.lua @@ -38,12 +38,17 @@ pcode.progress = 1 -- 4 = off pcode.show_mode = 3 --- 1 ( format jalan) 0 (fromat off) -pcode.format_on_save = 1 +-- true or false +pcode.format_on_save = true pcode.format_timeout_ms = 5000 -pcode.treesitter_ensure_installed = {} +-- https://github.com/mfussenegger/nvim-lint +-- https://github.com/stevearc/conform.nvim +-- use conform and nvim-lint if set true +pcode.disable_null_ls = true +pcode.treesitter_ensure_installed = {} +pcode.tscontext = false -- ini hanya untuk lsp yg tidak support masson -- untuk referesi support language kunjungi link dibawah -- https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md @@ -65,7 +70,7 @@ pcode.mason_ensure_installed = { -- sebelumnya register_lsp -- tambahkan di bawah sini setelah melakukan :masoninstall } pcode.unregister_lsp = { - -- "jdtls", -- tambahkan di bawah ini + "jdtls", -- tambahkan di bawah ini } -- https://github.com/jose-elias-alvarez/null-ls.nvim/blob/main/doc/BUILTINS.md @@ -153,7 +158,7 @@ pcode.database = false pcode.rest_client = true -- https://github.com/mfussenegger/nvim-dap -pcode.nvim_dap = false -- not support for windows os (auto config mason-nvim-dap) +pcode.nvim_dap = true -- not support for windows os (auto config mason-nvim-dap) -- conefig special support test & dap pcode.active_rust_config = false @@ -167,6 +172,6 @@ pcode.active_golang_config = false pcode.active_python_config = false pcode.active_cpp_config = false pcode.active_java_config = { - active = false, + active = true, project = "gradle", -- gradle or maven } diff --git a/lua/plugins/nonels.lua b/lua/plugins/nonels.lua index db824f0..3ef6473 100644 --- a/lua/plugins/nonels.lua +++ b/lua/plugins/nonels.lua @@ -2,9 +2,11 @@ return { { "nvimtools/none-ls.nvim", lazy = true, + enabled = not (pcode.disable_null_ls or false), dependencies = { { "jayp0521/mason-null-ls.nvim", + event = "VeryLazy", opts = { ensure_installed = pcode.null_ls_ensure_installed or {}, automatic_setup = true, @@ -17,65 +19,7 @@ return { "nvimtools/none-ls-extras.nvim", }, event = "InsertEnter", - opts = function() - local augroup = vim.api.nvim_create_augroup("LspFormatting", {}) - local sources = {} - local data_ok, data_sources = pcall(require, "custom.null-ls") - if data_ok then - for _, cfg in pairs(data_sources.sources) do - table.insert(sources, cfg) - end - end - local on_save = pcode.format_on_save or 0 - if on_save == 1 then - return { - debug = false, - sources = sources, - on_attach = function(client, bufnr) - vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) - local filetype = vim.bo.filetype - local n = require("null-ls") - local s = require("null-ls.sources") - local method = n.methods.FORMATTING - local available_formatters = s.get_available(filetype, method) - - if - (#available_formatters > 0 and client.name == "null-ls") - or client.supports_method("textDocument/formatting") - then - vim.api.nvim_create_autocmd("BufWritePre", { - group = augroup, - buffer = bufnr, - callback = function() - vim.lsp.buf.format({ bufnr = bufnr, timeout_ms = pcode.format_timeout_ms or 5000 }) - end, - }) - else - vim.api.nvim_create_autocmd("BufWritePre", { - group = augroup, - buffer = bufnr, - callback = function() - vim.lsp.buf.format({ bufnr = bufnr, timeout_ms = pcode.format_timeout_ms or 5000, filter = nil }) - end, - }) - end - end, - } - else - vim.schedule(function() - pcall(function() - vim.api.nvim_clear_autocmds({ group = "LspFormatting" }) - end) - end) - - return { - debug = false, - sources = sources, - } - end - end, - config = function(_, opts) - require("null-ls").setup(opts) - end, + opts = {}, + config = true, }, } diff --git a/lua/user/lsp/handlers.lua b/lua/user/lsp/handlers.lua index 7292e3c..3ef7adc 100644 --- a/lua/user/lsp/handlers.lua +++ b/lua/user/lsp/handlers.lua @@ -2,7 +2,7 @@ local M = {} local status_cmp_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp") if not status_cmp_ok then - return + return end local lspvitualtext = pcode.lsp_virtualtext or false @@ -13,95 +13,135 @@ M.capabilities.textDocument.completion.completionItem.snippetSupport = true M.capabilities = cmp_nvim_lsp.default_capabilities(M.capabilities) M.setup = function() - local signs = { - { name = "DiagnosticSignError", text = icons.diagnostics.Error }, - { name = "DiagnosticSignWarn", text = icons.diagnostics.Warning }, - { name = "DiagnosticSignHint", text = icons.diagnostics.Hint }, - { name = "DiagnosticSignInfo", text = icons.diagnostics.Info }, - } + local signs = { + { name = "DiagnosticSignError", text = icons.diagnostics.Error }, + { name = "DiagnosticSignWarn", text = icons.diagnostics.Warning }, + { name = "DiagnosticSignHint", text = icons.diagnostics.Hint }, + { name = "DiagnosticSignInfo", text = icons.diagnostics.Info }, + } - for _, sign in ipairs(signs) do - vim.fn.sign_define(sign.name, { texthl = sign.name, text = sign.text, numhl = "" }) - end + for _, sign in ipairs(signs) do + vim.fn.sign_define(sign.name, { texthl = sign.name, text = sign.text, numhl = "" }) + end - local config = { - virtual_text = lspvitualtext, -- disable virtual text - signs = { - active = signs, -- show signs - }, - update_in_insert = true, - underline = true, - severity_sort = true, - float = { - focusable = true, - style = "minimal", - border = "rounded", - source = "always", - header = "", - prefix = "", - }, - } + local config = { + virtual_text = lspvitualtext, -- disable virtual text + signs = { + active = signs, -- show signs + }, + update_in_insert = true, + underline = true, + severity_sort = true, + float = { + focusable = true, + style = "minimal", + border = "rounded", + source = "always", + header = "", + prefix = "", + }, + } - vim.diagnostic.config(config) + vim.diagnostic.config(config) - vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { - border = "rounded", - }) + vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { + border = "rounded", + }) - vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { - border = "rounded", - }) + vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { + border = "rounded", + }) end local function attach_navic(client, bufnr) - vim.g.navic_silence = true - local status_ok, navic = pcall(require, "nvim-navic") - if not status_ok then - return - end - navic.attach(client, bufnr) + vim.g.navic_silence = true + local status_ok, navic = pcall(require, "nvim-navic") + if not status_ok then + return + end + navic.attach(client, bufnr) end -local function lsp_keymaps(bufnr) - local opts = { noremap = true, silent = true } - local keymap = vim.api.nvim_buf_set_keymap - keymap(bufnr, "n", "gD", "lua vim.lsp.buf.declaration()", opts) - keymap(bufnr, "n", "gd", "lua vim.lsp.buf.definition()", opts) - keymap(bufnr, "n", "K", "lua vim.lsp.buf.hover()", opts) - keymap(bufnr, "n", "gI", "lua vim.lsp.buf.implementation()", opts) - keymap(bufnr, "n", "gr", "lua vim.lsp.buf.references()", opts) - keymap(bufnr, "n", "gl", "lua vim.diagnostic.open_float()", opts) - keymap(bufnr, "n", "lf", "lua vim.lsp.buf.format{ async = true }", opts) - keymap(bufnr, "n", "li", "LspInfo", opts) - keymap(bufnr, "n", "lI", "Mason", opts) - keymap(bufnr, "n", "la", "lua vim.lsp.buf.code_action()", opts) - keymap(bufnr, "n", "lj", "lua vim.diagnostic.goto_next({buffer=0})", opts) - keymap(bufnr, "n", "lk", "lua vim.diagnostic.goto_prev({buffer=0})", opts) - keymap(bufnr, "n", "lr", "lua vim.lsp.buf.rename()", opts) - keymap(bufnr, "n", "ls", "lua vim.lsp.buf.signature_help()", opts) - keymap(bufnr, "n", "lq", "lua vim.diagnostic.setloclist()", opts) +function FORMAT_FILTER(client) + local filetype = vim.bo.filetype + local n = require("null-ls") + local s = require("null-ls.sources") + local method = n.methods.FORMATTING + local available_formatters = s.get_available(filetype, method) + + if #available_formatters > 0 then + return client.name == "null-ls" + elseif client.supports_method("textDocument/formatting") then + return true + else + return false + end +end + +-- stylua: ignore +local function lsp_keymaps(bufnr, on_save) + local opts = { noremap = true, silent = true } + local keymap = vim.api.nvim_buf_set_keymap + keymap(bufnr, "n", "gD", "lua vim.lsp.buf.declaration()", opts) + keymap(bufnr, "n", "gd", "lua vim.lsp.buf.definition()", opts) + keymap(bufnr, "n", "K", "lua vim.lsp.buf.hover()", opts) + keymap(bufnr, "n", "gI", "lua vim.lsp.buf.implementation()", opts) + keymap(bufnr, "n", "gr", "lua vim.lsp.buf.references()", opts) + keymap(bufnr, "n", "gl", "lua vim.diagnostic.open_float()", opts) + keymap(bufnr, "n", "lf", "lua vim.lsp.buf.format{ async = true }", opts) + keymap(bufnr, "n", "li", "LspInfo", opts) + keymap(bufnr, "n", "lI", "Mason", opts) + keymap(bufnr, "n", "la", "lua vim.lsp.buf.code_action()", opts) + keymap(bufnr, "n", "lj", "lua vim.diagnostic.goto_next({buffer=0})", opts) + keymap(bufnr, "n", "lk", "lua vim.diagnostic.goto_prev({buffer=0})", opts) + keymap(bufnr, "n", "lr", "lua vim.lsp.buf.rename()", opts) + keymap(bufnr, "n", "ls", "lua vim.lsp.buf.signature_help()", opts) + keymap(bufnr, "n", "lq", "lua vim.diagnostic.setloclist()", opts) + if on_save then + local augroup = vim.api.nvim_create_augroup("LspFormatting", {}) + vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) + vim.api.nvim_create_autocmd("BufWritePre", { + group = augroup, + buffer = bufnr, + callback = function() + vim.lsp.buf.format({ bufnr = bufnr, timeout_ms = pcode.format_timeout_ms or 5000, filter = FORMAT_FILTER }) + end, + }) + else + vim.schedule(function() + pcall(function() + vim.api.nvim_clear_autocmds({ group = "LspFormatting" }) + end) + end) + end end M.on_attach = function(client, bufnr) - attach_navic(client, bufnr) - if client.name == "tsserver" then - client.server_capabilities.documentFormattingProvider = false - end + attach_navic(client, bufnr) + if client.name == "tsserver" then + client.server_capabilities.documentFormattingProvider = false + end - if client.name == "lua_ls" then - client.server_capabilities.documentFormattingProvider = false - end + if client.name == "lua_ls" then + client.server_capabilities.documentFormattingProvider = false + end - if client.supports_method("textDocument/inlayHint") then - -- vim.lsp.inlay_hint.enable(bufnr, true) - vim.lsp.inlay_hint.enable(true) - end + if client.supports_method("textDocument/inlayHint") then + -- vim.lsp.inlay_hint.enable(bufnr, true) + vim.lsp.inlay_hint.enable(true) + end - lsp_keymaps(bufnr) - local status_ok, illuminate = pcall(require, "illuminate") - if not status_ok then - return - end - illuminate.on_attach(client) + local on_save = pcode.format_on_save or false + -- disable if conform active + local status, _ = pcall(require, "conform") + if status then + on_save = false + end + lsp_keymaps(bufnr, on_save) + local status_ok, illuminate = pcall(require, "illuminate") + if not status_ok then + return + end + illuminate.on_attach(client) end return M diff --git a/lua/user/utils/formatter.lua b/lua/user/utils/formatter.lua index 32cf578..1fba9cb 100644 --- a/lua/user/utils/formatter.lua +++ b/lua/user/utils/formatter.lua @@ -1,10 +1,14 @@ -local null_ls = require("null-ls") +local ok, null_ls = pcall(require, "null-ls") local M = {} M.list_registered = function(filetype) - local method = null_ls.methods.FORMATTING - local registered_providers = require("user.utils.lsp").list_registered_providers_names(filetype) - return registered_providers[method] or {} + if ok then + local method = null_ls.methods.FORMATTING + local registered_providers = require("user.utils.lsp").list_registered_providers_names(filetype) + return registered_providers[method] or {} + else + return {} + end end M.list_registered_all = function() diff --git a/lua/user/utils/linter.lua b/lua/user/utils/linter.lua index 3ab99e4..5fbb7b5 100644 --- a/lua/user/utils/linter.lua +++ b/lua/user/utils/linter.lua @@ -1,19 +1,27 @@ -local null_ls = require("null-ls") +local ok, null_ls = pcall(require, "null-ls") local M = {} -M.alternative_methods = { - null_ls.methods.DIAGNOSTICS, - null_ls.methods.DIAGNOSTICS_ON_OPEN, - null_ls.methods.DIAGNOSTICS_ON_SAVE, -} +if ok then + M.alternative_methods = { + null_ls.methods.DIAGNOSTICS, + null_ls.methods.DIAGNOSTICS_ON_OPEN, + null_ls.methods.DIAGNOSTICS_ON_SAVE, + } +else + M.alternative_methods = {} +end M.linter_list_registered = function(filetype) - local registered_providers = require("user.utils.lsp").list_registered_providers_names(filetype) - local providers_for_methods = vim.iter(vim.tbl_map(function(m) - return registered_providers[m] or {} - end, M.alternative_methods)) + if ok then + local registered_providers = require("user.utils.lsp").list_registered_providers_names(filetype) + local providers_for_methods = vim.iter(vim.tbl_map(function(m) + return registered_providers[m] or {} + end, M.alternative_methods)) - return providers_for_methods + return providers_for_methods + else + return {} + end end return M diff --git a/lua/user/utils/lualine_component.lua b/lua/user/utils/lualine_component.lua index dc6e0c4..e2ba53c 100644 --- a/lua/user/utils/lualine_component.lua +++ b/lua/user/utils/lualine_component.lua @@ -93,7 +93,8 @@ return { if type(msg) == "boolean" or #msg == 0 then return "LSP Inactive" end - return msg + -- return msg + table.insert(buf_client_names, msg) end -- add client for _, client in pairs(buf_clients) do