sh.lua 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. local M = {}
  2. M.config = function()
  3. O.lang.sh = {
  4. -- @usage can be 'shellcheck'
  5. linter = "",
  6. -- @usage can be 'shfmt'
  7. diagnostics = {
  8. virtual_text = { spacing = 0, prefix = "" },
  9. signs = true,
  10. underline = true,
  11. },
  12. formatter = {
  13. exe = "shfmt",
  14. args = { "-w" },
  15. stdin = false,
  16. },
  17. linters = { "shellcheck" },
  18. lsp = {
  19. path = DATA_PATH .. "/lspinstall/bash/node_modules/.bin/bash-language-server",
  20. },
  21. }
  22. end
  23. M.format = function()
  24. O.formatters.filetype["sh"] = {
  25. function()
  26. return {
  27. exe = O.lang.sh.formatter.exe,
  28. args = O.lang.sh.formatter.args,
  29. stdin = O.lang.sh.formatter.stdin,
  30. tempfile_prefix = ".formatter",
  31. }
  32. end,
  33. }
  34. require("formatter.config").set_defaults {
  35. logging = false,
  36. filetype = O.formatters.filetype,
  37. }
  38. end
  39. M.lint = function()
  40. require("lint").linters_by_ft = {
  41. sh = O.lang.sh.linters,
  42. }
  43. end
  44. M.lsp = function()
  45. if not require("lv-utils").check_lsp_client_active "bashls" then
  46. -- npm i -g bash-language-server
  47. require("lspconfig").bashls.setup {
  48. cmd = { O.lang.sh.lsp.path, "start" },
  49. on_attach = require("lsp").common_on_attach,
  50. filetypes = { "sh", "zsh" },
  51. }
  52. end
  53. end
  54. M.dap = function()
  55. -- TODO: implement dap
  56. return "No DAP configured!"
  57. end
  58. return M