init.lua 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. -- TODO refacor this whole file and treesitter in general
  2. -- if not package.loaded['nvim-treesitter'] then return end
  3. --
  4. -- Custom parsers
  5. -- local parser_config = require("nvim-treesitter.parsers").get_parser_configs()
  6. -- parser_config.make = {
  7. -- install_info = {
  8. -- url = "https://github.com/alemuller/tree-sitter-make", -- local path or git repo
  9. -- files = {"src/parser.c"},
  10. -- requires_generate_from_grammar = true
  11. -- }
  12. -- }
  13. -- parser_config.just = {
  14. -- install_info = {
  15. -- url = "~/dev/tree-sitter-just", -- local path or git repo
  16. -- files = {"src/parser.c"}
  17. -- }
  18. -- -- filetype = "just", -- if filetype does not agrees with parser name
  19. -- -- used_by = {"bar", "baz"} -- additional filetypes that use this parser
  20. -- }
  21. -- Custom text objects
  22. local textobj_prefixes = O.treesitter.textobj_prefixes
  23. local textobj_suffixes = O.treesitter.textobj_suffixes
  24. local textobj_sel_keymaps = {}
  25. local textobj_swap_keymaps = {}
  26. local textobj_move_keymaps = {
  27. enable = O.plugin.ts_textobjects,
  28. set_jumps = true, -- whether to set jumps in the jumplist
  29. goto_next_start = {},
  30. goto_next_end = {},
  31. goto_previous_start = {},
  32. goto_previous_end = {},
  33. }
  34. for obj, suffix in pairs(textobj_suffixes) do
  35. if textobj_prefixes["goto_next"] ~= nil then
  36. textobj_move_keymaps["goto_next_start"][textobj_prefixes["goto_next"] .. suffix[1]] = "@" .. obj .. ".outer"
  37. textobj_move_keymaps["goto_next_end"][textobj_prefixes["goto_next"] .. suffix[2]] = "@" .. obj .. ".outer"
  38. end
  39. if textobj_prefixes["goto_prev"] ~= nil then
  40. textobj_move_keymaps["goto_previous_start"][textobj_prefixes["goto_previous"] .. suffix[2]] = "@" .. obj .. ".outer"
  41. textobj_move_keymaps["goto_previous_end"][textobj_prefixes["goto_previous"] .. suffix[1]] = "@" .. obj .. ".outer"
  42. end
  43. if textobj_prefixes["inner"] ~= nil then
  44. textobj_sel_keymaps[textobj_prefixes["inner"] .. suffix[1]] = "@" .. obj .. ".inner"
  45. end
  46. if textobj_prefixes["outer"] ~= nil then
  47. textobj_sel_keymaps[textobj_prefixes["outer"] .. suffix[1]] = "@" .. obj .. ".outer"
  48. end
  49. if textobj_prefixes["swap"] ~= nil then
  50. textobj_swap_keymaps[textobj_prefixes["swap"] .. suffix[1]] = "@" .. obj .. ".outer"
  51. end
  52. end
  53. vim.g.ts_hint_textobject_keys = O.treesitter.hint_labels -- Requires https://github.com/mfussenegger/nvim-ts-hint-textobject/pull/2
  54. -- Add which key menu entries
  55. local status, wk = pcall(require, "which-key")
  56. if status then
  57. local normal = {
  58. mode = "n", -- Normal mode
  59. }
  60. local operators = {
  61. mode = "o", -- Operator mode
  62. }
  63. wk.register(textobj_sel_keymaps, operators)
  64. wk.register({
  65. ["m"] = "Hint Objects",
  66. ["."] = "Textsubject",
  67. [";"] = "Textsubject-big",
  68. }, operators)
  69. wk.register(textobj_swap_keymaps, normal)
  70. wk.register({
  71. [textobj_prefixes["swap"]] = "Swap",
  72. -- [textobj_prefixes["goto_next"]] = "Jump [",
  73. -- [textobj_prefixes["goto_previous"]] = "Jump ]"
  74. }, normal)
  75. wk.register(textobj_move_keymaps["goto_next_start"], normal)
  76. wk.register(textobj_move_keymaps["goto_next_end"], normal)
  77. wk.register(textobj_move_keymaps["goto_previous_start"], normal)
  78. wk.register(textobj_move_keymaps["goto_previous_end"], normal)
  79. end
  80. require("nvim-treesitter.configs").setup {
  81. ensure_installed = O.treesitter.ensure_installed, -- one of "all", "maintained" (parsers with maintainers), or a list of languages
  82. ignore_install = O.treesitter.ignore_install,
  83. matchup = {
  84. enable = true, -- mandatory, false will disable the whole extension
  85. -- disable = { "c", "ruby" }, -- optional, list of language that will be disabled
  86. },
  87. highlight = {
  88. enable = O.treesitter.highlight.enabled, -- false will disable the whole extension
  89. additional_vim_regex_highlighting = true,
  90. disable = { "latex" },
  91. },
  92. context_commentstring = {
  93. enable = O.plugin.ts_context_commentstring.active,
  94. config = { css = "// %s" },
  95. },
  96. -- indent = {enable = true, disable = {"python", "html", "javascript"}},
  97. -- TODO seems to be broken
  98. indent = { enable = { "javascriptreact" } },
  99. autotag = { enable = O.plugin.ts_autotag.active },
  100. textobjects = {
  101. swap = {
  102. enable = O.plugin.ts_textobjects,
  103. swap_next = textobj_swap_keymaps,
  104. },
  105. move = textobj_move_keymaps,
  106. select = {
  107. enable = O.plugin.ts_textobjects,
  108. keymaps = textobj_sel_keymaps,
  109. },
  110. },
  111. textsubjects = {
  112. enable = O.plugin.ts_textsubjects,
  113. keymaps = { ["."] = "textsubjects-smart", [";"] = "textsubjects-big" },
  114. },
  115. playground = {
  116. enable = O.plugin.ts_playground.active,
  117. disable = {},
  118. updatetime = 25, -- Debounced time for highlighting nodes in the playground from source code
  119. persist_queries = false, -- Whether the query persists across vim sessions
  120. keybindings = {
  121. toggle_query_editor = "o",
  122. toggle_hl_groups = "i",
  123. toggle_injected_languages = "t",
  124. toggle_anonymous_nodes = "a",
  125. toggle_language_display = "I",
  126. focus_language = "f",
  127. unfocus_language = "F",
  128. update = "R",
  129. goto_node = "<cr>",
  130. show_help = "?",
  131. },
  132. },
  133. rainbow = {
  134. enable = O.plugin.ts_rainbow.active,
  135. extended_mode = true, -- Highlight also non-parentheses delimiters, boolean or table: lang -> boolean
  136. max_file_lines = 1000, -- Do not enable for files with more than 1000 lines, int
  137. },
  138. }