diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index b9f27c6..8c2b79a 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -2,5 +2,12 @@ set runtimepath^=~/.vim runtimepath+=~/.vim/after let &packpath = &runtimepath source ~/.vimrc lua << EOF -require'lspconfig'.julials.setup{} +require'lspconfig'.julials.setup{ + on_new_config = function(new_config, _) + local julia = vim.fn.expand("~/.julia/environments/nvim-lspconfig/bin/julia") + if require'lspconfig'.util.path.is_file(julia) then + new_config.cmd[1] = julia + end + end +} EOF diff --git a/.julia/environments/nvim-lspconfig/Makefile b/.julia/environments/nvim-lspconfig/Makefile new file mode 100644 index 0000000..675baae --- /dev/null +++ b/.julia/environments/nvim-lspconfig/Makefile @@ -0,0 +1,68 @@ +JULIA=$(shell which julia) +JULIA_PROJECT= +default: languageserver.so + +languageserver.so: Manifest.toml packagecompiler/Manifest.toml packagecompiler/precompile_statements.jl + JULIA_LOAD_PATH=${PWD}:${PWD}/packagecompiler:@stdlib ${JULIA} -e 'using PackageCompiler; PackageCompiler.create_sysimage(:LanguageServer, sysimage_path="languageserver.so", precompile_statements_file="packagecompiler/precompile_statements.jl")' + +Manifest.toml: Project.toml + JULIA_LOAD_PATH=${PWD}/Project.toml:@stdlib ${JULIA} -e 'using Pkg; Pkg.instantiate()' + +Project.toml: + JULIA_LOAD_PATH=${PWD}/Project.toml:@stdlib ${JULIA} -e 'using Pkg; Pkg.add("LanguageServer")' + +packagecompiler/Manifest.toml: packagecompiler/Project.toml + JULIA_LOAD_PATH=${PWD}/packagecompiler/Project.toml:@stdlib ${JULIA} -e 'using Pkg; Pkg.instantiate()' + +packagecompiler/Project.toml: + mkdir -p packagecompiler + JULIA_LOAD_PATH=${PWD}/packagecompiler/Project.toml:@stdlib ${JULIA} -e 'using Pkg; Pkg.add("PackageCompiler")' + +packagecompiler/precompile_statements.jl: Manifest.toml bin/julia + TMPDIR=$(shell mktemp -d) && \ + cd $${TMPDIR} && \ + JULIA_LOAD_PATH=: ${JULIA} -e 'using Pkg; Pkg.generate("Example")' 2> /dev/null && \ + cd Example && \ + JULIA_LOAD_PATH=$${PWD}:@stdlib ${JULIA} -e 'using Pkg; Pkg.add(["JSON", "fzf_jll", "Random", "Zlib_jll"])' 2> /dev/null && \ + JULIA_LOAD_PATH=$${PWD}:@stdlib ${JULIA} -e 'using Pkg; Pkg.precompile()' 2> /dev/null && \ + echo "module Example" > src/Example.jl && \ + echo "" >> src/Example.jl && \ + echo "import JSON" >> src/Example.jl && \ + echo "import fzf_jll" >> src/Example.jl && \ + echo "using Random" >> src/Example.jl && \ + echo "using Zlib_jll" >> src/Example.jl && \ + echo "" >> src/Example.jl && \ + echo "function hello(who, notused)" >> src/Example.jl && \ + echo " println(\"hello\", who)" >> src/Example.jl && \ + echo " shuffle([1, 2, 3])" >> src/Example.jl && \ + echo " shoffle([1, 2, 3])" >> src/Example.jl && \ + echo " fzzf = fzf_jll.fzzf()" >> src/Example.jl && \ + echo " fzf = fzf_jll.fzf(1)" >> src/Example.jl && \ + echo " JSON.print(stdout, Dict(\"hello\" => [1, 2, 3]), 2, 123)" >> src/Example.jl && \ + echo " JSON.print(stdout, Dict(\"hello\" => [1, 2, 3]))" >> src/Example.jl && \ + echo " hi(who)" >> src/Example.jl && \ + echo " return Zlib_jll.libz" >> src/Example.jl && \ + echo "end" >> src/Example.jl && \ + echo "" >> src/Example.jl && \ + echo "end # module" >> src/Example.jl && \ + JULIA_TRACE_COMPILE=1 nvim src/Example.jl && \ + rm -rf $${TMPDIR} + +bin/julia: + mkdir -p bin + rm -f bin/julia + echo "#!/bin/bash" > bin/julia + echo "JULIA=${JULIA}" >> bin/julia + echo "if [[ \$${JULIA_TRACE_COMPILE} = \"1\" ]]; then" >> bin/julia + echo " exec \$${JULIA} --trace-compile=${PWD}/packagecompiler/precompile_statements.jl \"\$$@\"" >> bin/julia + echo "elif [[ -f ${PWD}/languageserver.so ]]; then" >> bin/julia + echo " exec \$${JULIA} --sysimage=${PWD}/languageserver.so \"\$$@\"" >> bin/julia + echo "else" >> bin/julia + echo " exec \$${JULIA} \"\$$@\"" >> bin/julia + echo "fi" >> bin/julia + chmod +x bin/julia + +clean: + rm -rf languageserver.so packagecompiler bin + +.PHONY: clean default diff --git a/.julia/environments/nvim-lspconfig/Project.toml b/.julia/environments/nvim-lspconfig/Project.toml index 4be0f14..c70bd7d 100644 --- a/.julia/environments/nvim-lspconfig/Project.toml +++ b/.julia/environments/nvim-lspconfig/Project.toml @@ -1,2 +1,5 @@ [deps] +CSTParser = "00ebfdb7-1f24-5e51-bd34-a7502290713f" LanguageServer = "2b0e0bc5-e4fd-59b4-8912-456d1b03d8d7" +StaticLint = "b3cc710f-9c33-5bdb-a03d-a94903873e97" +SymbolServer = "cf896787-08d5-524d-9de7-132aaa0cb996"