summaryrefslogtreecommitdiffstats
path: root/after
diff options
context:
space:
mode:
authorSquibid <me@zacharyscheiman.com>2025-04-17 11:41:32 -0500
committerSquibid <me@zacharyscheiman.com>2025-04-17 11:41:32 -0500
commit3094bf2a3983b375f4adeccd25c3b12bbbded2aa (patch)
tree860f0a9cfd3d83bf73837e2f3a0ccc1b0c75cf5b /after
parent8eaa615596be321a3be12378c5e7d65cc7e482b6 (diff)
downloadnvim-3094bf2a3983b375f4adeccd25c3b12bbbded2aa.tar.gz
nvim-3094bf2a3983b375f4adeccd25c3b12bbbded2aa.tar.bz2
nvim-3094bf2a3983b375f4adeccd25c3b12bbbded2aa.zip
a lot more stuff
Diffstat (limited to 'after')
-rw-r--r--after/ftplugin/java.lua136
-rw-r--r--after/ftplugin/norg.lua2
2 files changed, 137 insertions, 1 deletions
diff --git a/after/ftplugin/java.lua b/after/ftplugin/java.lua
new file mode 100644
index 0000000..26e7e2e
--- /dev/null
+++ b/after/ftplugin/java.lua
@@ -0,0 +1,136 @@
+local misc = require('core.misc')
+local lsp = require('core.lsp.functions')
+local map, auto = misc.map, misc.auto
+
+local jdtls = require('jdtls')
+local jdtls_install = require('mason-registry').get_package('jdtls'):get_install_path()
+
+-- make sure to check if things with 💀 need updating
+local config = {
+ cmd = {
+ 'java', -- 💀
+ '-jar', vim.fn.glob(jdtls_install..'/plugins/org.eclipse.equinox.launcher_*.jar'), -- 💀
+ '-configuration', jdtls_install..'/config_linux',
+ '-data', vim.fn.stdpath('cache')..'/nvim-jdtls',
+
+ '--add-modules=ALL-SYSTEM',
+ '--add-opens', 'java.base/java.lang=ALL-UNNAMED',
+ '--add-opens', 'java.base/java.util=ALL-UNNAMED',
+ '-Declipse.application=org.eclipse.jdt.ls.core.id1',
+ '-Declipse.product=org.eclipse.jdt.ls.core.product',
+ '-Dlog.level=ALL',
+ '-Dlog.protocol=true',
+ '-Dosgi.bundles.defaultStartLevel=4',
+ '-Xmx1G',
+ },
+ root_dir = vim.fs.dirname(vim.fs.find({
+ 'gradlew',
+ '.git',
+ 'mvnw',
+ 'settings.gradle', -- Gradle (multi-project)
+ 'settings.gradle.kts', -- Gradle (multi-project)
+ 'build.xml', -- Ant
+ 'pom.xml', -- Maven
+ }, { upward = true })[1]),
+
+ -- don't print out status messages
+ handlers = {
+ ['language/status'] = function() end
+ },
+
+ on_attach = function(_, bufnr)
+ -- add some jdtls specific mappings
+ local opts = { buffer = bufnr }
+ map('n', 'cri', jdtls.organize_imports, opts)
+ map('n', 'crv', jdtls.extract_variable, opts)
+ map('n', 'crc', jdtls.extract_constant, opts)
+ map('x', 'crv', function() jdtls.extract_variable(true) end, opts)
+ map('x', 'crc', function() jdtls.extract_constant(true) end, opts)
+ map('x', 'crm', function() jdtls.extract_method(true) end, opts)
+
+ pcall(vim.lsp.codelens.refresh)
+ auto('BufWritePost', {
+ buffer = bufnr,
+ desc = 'refresh codelens',
+ callback = function()
+ pcall(vim.lsp.codelens.refresh)
+ end
+ })
+ end,
+ capabilities = lsp.capabilities
+}
+
+-- generate the path to the java file(s)
+---@type string|nil
+local cache_path = vim.fs.joinpath(vim.fn.stdpath("cache"), "/JavaVersion.class")
+---@type string|nil
+local src_path = vim.fs.joinpath(vim.fn.stdpath("config"), "/extras/JavaVersion.java")
+
+-- if either path is invalid
+if not cache_path or not src_path then
+ return
+end
+
+--- build a cache of the JavaVersion code
+local function build_cache()
+ -- check if we have javac
+ vim.system({ "javac" }, {}, function(out)
+ if out.code == 127 then
+ cache_path = nil
+ return
+ end
+
+ -- compile our code
+ vim.system({ 'javac', src_path, '-d', vim.fn.stdpath("cache") }, {}, function(out)
+ if out.code ~= 0 then
+ cache_path = nil
+ end
+ end)
+ end)
+end
+
+-- check if we have a compiled version of JavaVersion
+local f, _ = io.open(cache_path, "r")
+if not f then -- if we don't have a cache
+ build_cache()
+else
+ io.close(f)
+end
+
+-- check the java version
+local buffer = {}
+vim.fn.jobstart({
+ config.cmd[1],
+ (cache_path and "JavaVersion") or src_path
+}, {
+ cwd = vim.fn.stdpath("cache"),
+ stdin = nil,
+ on_stdout = function(_, data, _)
+ table.insert(buffer, table.concat(data))
+ end,
+ on_exit = function(_, exit_code, _)
+ local v = vim.version.parse(table.concat(buffer))
+
+ -- if there's an error, no version info, or the java version is
+ -- less than 17 stop the lsp from starting
+ if exit_code ~= 0 then
+ vim.notify(string.format(
+ "java version check failed: exit code %s", exit_code),
+ vim.log.levels.ERROR, { title = misc.appid })
+ return
+ elseif not v then
+ vim.notify("no java version info found", vim.log.levels.ERROR,
+ { title = misc.appid })
+ return
+ elseif v.major < 17 then
+ vim.notify(string.format(
+ "java version %s < 17.0.0 Cannot run jdtls, bailing out",
+ v[1].."."..v[2].."."..v[3]),
+ vim.log.levels.ERROR, { title = misc.appid })
+ return
+ end
+
+ -- start lsp
+ jdtls.start_or_attach(config)
+ end
+ })
diff --git a/after/ftplugin/norg.lua b/after/ftplugin/norg.lua
index c09a36e..fc69be9 100644
--- a/after/ftplugin/norg.lua
+++ b/after/ftplugin/norg.lua
@@ -17,7 +17,7 @@ end, "so")
-- if the parsers don't exist download them
if found[0] < 2 and
(not found["norg.so"] or not found["norg_meta.so"]) then
- vim.cmd.Neorg("sync-parsers")
+ vim.cmd("Neorg sync-parsers")
end
-- set colorcolumn in norg buffers